Category: it

Default

Особый респект

Вот этим ребятам - особый респект, хоть мы и не читали их заметок. Технари из "Ленты", могли бы остаться работать при ком угодно, но сделали свой выбор. При том, что время такое, семьи, дети. Такие примеры вселяют надежду.



Collapse )
Default

Duct tape programming

Джоэль Сполски опять провоцирует. И в оправдание бездумного программирования приводит слова одного из разработчиков Нетскейпа: "It was decisions like not using C++ and not using threads that made us ship the product on time."

Убийственный аргумент. И хороший ответ Орена Эйни. С картинкой.

Default

Настройка режима фар

Знакомый привез из Германии машину. Обойти норвежские налоги нельзя, но при наличии желания и свободного времени какие-то деньги на ввезенной из-за рубежа машине можно сэкономить.

Но на немецких машинах фары не включаются при включении зажигания. В Норвегии все обязаны езить с включенными фарами.

Знакомый заехал на станцию техобслуживания, и ему предложили переделать режим включения фар за 2500 крон (примерно 300 евро). Будучи программистом, причем программистом, занимающимся управлением периферийными устройствами, он знал, как это делается: мастер с ноутбуком подключается к автомобилю и в запущенной под Windows программе ставит галочку в соответствующем поле. Вся процедура занимает около минуты. Признавшись, что так оно все и есть, ему согласились провести эту процедуру за 250 крон.
Default

Собеседования с программистами

Сполски обновил свои рекоммендации: http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html

Все больше склоняюсь к тому, что он прав: "At the end of the interview, you must be prepared to make a sharp decision about the candidate. There are only two possible outcomes to this decision: Hire or No Hire. There is no other possible answer."

Окончательное решение о кандидате должно формироваться в течении собеседования. Откладывать нельзя. Такие рамки заставляют и проводящего собеседование более ответственно готовиться к разговору. Раньше я никода не обсуждал во время собеседования конкретные задачи, образцы кода. Последние собеседования, однако, были разбиты на две части: руководитель проекта разговаривает "за жизнь", а я потом один на один обсуждаю технические вопросы. Эффективность таких собеседований выросла очень сильно, и задавшись целью к концу разговора формировать свое "да" или "нет", а не "мы посоветуемся", я совершенно по-другому стал его проводить.

Неплохая подборка вопросов и ссылок: http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx

Поскольку наша специализация - .NET, то для того, чтобы сложилось впечатление, затрагивают следующие темы:

1. Типы, передаваемые по ссылке и по значению (reference/value types). Boxing/unboxing. Смежный вопрос - как эффективность хранения и доступа коллекций value-типов улучшена в .NET 2.0 (generics). Был случай, когда уже на этом вопросе мнение о кандидате (к сожалению) сформировалось.

2. Обработка исключительных состояний. Кстати, разницу между "throw" и "throw ex" не знает почти никто.

3. ADO.NET, доступ к базам данных. Если кандидат понимает, что использование DataSet при записи данных позволительно, лишь когда данные спускаются с уровня интерфейса пользователя, это уже хорошо.

4. Assembly version management, strong naming.

5. XML. Тривиальный вопрос-индикатор: вам нужно объекты классы сохранить как XML-файл. Самый простой код, который позволит вам это сделать. Про XmlSerializer знает не больше половины кандидатов. Незнание этого еще не означает "No Hire", но это тревожный симптом: программист с опытом работы с .NET должен обладать соответствующим кругозором.

6. Disposable objects. Почему конструкция "using (SqlConnection con = new SqlConnection(...)) {}" возможна, а "using (string str = new string(...)) {}" - нет?

7. Средства обмена данными между процессами в .NET.

8. Вопросы для определения опыта работы с .NET: пользовался ли кандидат reflection, remoting, cross-domain communication, globalization. Отрицательные ответы на эти вопросы общего впечатления не ухудшают, а вот положительные идут в копилку.

9. Автоматизированные тесты. "Печально я гляжу на наше поколенье". Практически никто ими серьезно не пользуется, хотя ответственность за это несут, конечно, руководители проектов. Один из кандидатов со статусом руководителя, т.е. определяющий выбор инструментальных средств, сказал, что на ручное тестирование времени уходит много, а вот с автоматизированным тестированием пока не познакомился - времени нет. Видимо, ручное тестирование все съедает.

10. Любимые книги по профессии, часто посещаемые программистские сайты.

Я, однако, по-прежнему не прибегаю к практике постановки алгоритмических задача, которые кандидат должен в моем присутствии решить, написав соответсвующий код. Умение сконцетрироваться и выдать код хорошего качества в присутствии наблюдающего - имхо, способность, далеко не обязательная для хорошего программиста. Видимо, средний уровень кандидатов, приходящих к Джоэлю Сполски или в Майкрософт, значительно выше, чем у приходящих к нам, поэтому они могут позволить себе отсечь хороших программистов, не справившихся с волнением во время разговора. Мы стараемся их не упустить - не так уж велик выбор.
Default

TestDriven.Net

Джеми Кэнсдейл написал одну из самых популярных "примочек" к Visual Studio: TestDriven.Net. Его программа позволяла оснастить любую версию Visual Studio средой тестирования (unit testing), в том числе и бесплатную Visual Studio Express, которая не позволяла ее расширять таким образом, но Джеми сумел с этим справиться. Вскоре после этого Джеми лишили звания Microsoft Most Valued Professional, присваимого наиболее активным разработчикам, поддерживающим в свободное время программистские комьюнити. Звание это дает возможность бесплатно получать макйрософтовские продукты, участвовать в конференциях, технических форумах и т.п.

Джеми задается вопросом, почему это произошло. В комментариях звучит одна из версий: Джеми перевел свой продукт TestDriven.Net из бесплатных в платные, что вообще говоря моветон. А вот Рой Ошеров в своем блоге придерживается другой: Джеми наказали за то, что своим продуктом он расширил возможности бесплатной Visual Studio Express, дав тем самым возможным ее пользователям работать с программой более профессионально без покупки платной версии.

Не знаю, что за всем этим в действительности стоит, но присоединяюсь к Рою: Microsoft could have been more clear and come out and say it out loud: "you're not an MVP because you misused our product and we don't like that". Формальное объяснение Майкрософтом своего решения - на уровне политической демагогии: "Unfortunately your community participation rate over the past year (in any of the communities including VSIP and ASP.Net) is well below the required level. Even if we were to look beyond the MVP code of conduct concerns I don't believe we could justify reinstating you based on participation."

"Well below the required level"! И это сказано об авторе программы, которой пользуется едва ли не каждый обладатель Visual Studio, серьезно относящийся к автоматизированным тестам. Упорно отказываюсь понимать, почему ему нельзя было написать "вы сделали вашу программу платной, выведя тем самым себя из группы некоммерческой поддержки технологии .NET" (первая версия), или же "вы нарушили условия использования продукта Visual Studio Express" (вторая версия).
Default

Семинар Андерса Хейлсберга

Был сегодня на майкрософтовском семинаре, где первые два часа выступал Андерс Хейлсберг (Turbo Pascal, Delphi, C#). Честно говоря, полагал, что выступление его будет более детальным, не просто исторический обзор развития созданных им языков программирования. Но все равно любопытно. Оказывается, рабочее название C# было Цезий (Cesium), но его сочли слишком беспокойным. Хейлсберг также упомянул о бизнес-модели Борланда. Когда у его фирмы (еще в Дании) Борланд лицензировал Турбо-Паскаль, они оговорили потиражные, но Борланду была предоставлена свобода определить продажную цену продукта. Хейлсберг ожидал, что цена будет установлена на обычном уровне стоимости компиляторов языков программирования - порядка 500 долларов за копию. Борланд выпустил Турбо-Паскаль по $49.95. Как оказалось, попали в яблочко.
Default

Символы табуляции

В отличие от весьма размытой границы между либералами и патриотами, у программистов граница отчетлива и не оставляет никаких шансов на компромисс. Или вы настраиваете ваш текстовый редактор, чтобы он при нажатии клавиши табуляции вставлял символы табуляции (ASCII код 9), или же символы табуляции заменяются определенным количеством пробелов. "Табуляторам" и "пробельщикам" вместе лучше не работать и желательно не иметь общих родных.

Для сведения: я - "табулятор".

А вот вам, "пробельщики", от Ивана Андреевича:

Попрыгунья стрекоза
Файлы с кодами пробела-
Ми забила - тоже дело,
Только диск вот не успела
Прикупить, и память съелась.
Она нынче поумнела
И пробелам всем - гроза!
Default

STL/C++

За что мне следует благодарить судьбу, так это за то, что уберегла от интимной близости с STL. Целый час бился головой об ошибку компилятора:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::basic_string
[Error: Irreparable invalid markup ('<_elem,_traits,_ax>') in entry. Owner must fix manually. Raw contents below.]

За что мне следует благодарить судьбу, так это за то, что уберегла от интимной близости с STL. Целый час бился головой об ошибку компилятора:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>::iterator' (or there is no acceptable conversion)
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]

Моя взяла, но голова кровоточит и шрамы не рубцуются.

Чур меня, чур! Совсем необязательно постигать красоту через строительство Беломорканала. Вообще, после C# во временном возвращении к макросам и шаблонам C++ важнее всего прилагательное "временное".
Default

Формула расчета длительности проектов



Знакомый норвежский программист Ингар Стейнсланд как-то поделился личной формулой расчета длительности проектов.

- Я все умножаю на 2 пи плюс 1.
- Почему?, - удивился я.
- Ну это же просто. Положим, мне кажется, что я управлюсь с работой за неделю. Но это я гляжу на проблему со стороны, я к ней еще не приступал. Я стою от нее на расстоянии r и на основании этого делаю вывод, что идти мне - это самое r. В действительности же для решения задачи ее нужно изучить - то есть обойти со всех сторон. Потом я подхожу к ней и решаю.

Я стараюсь брать формулу Ингара на вооружение где только можно, и всегда она оказывалась куда ближе к действительности, чем мои собственные расчеты.

Однажды я рассказал об этой формуле другому разработчику, польскому инженеру Стену Бжезинскому, работающему в Ирландии. Мы с ним познакомились на одной из выставок CeBIT, и это был один из самых больших оригиналов, которых я встречал в своей жизни. Хождение по стенду своей фирмы в шлепанцах из принципиальных соображений - это лишь немногое из того, что мне довелось видеть за два дня нашего знакомства.

Стен ненавидит лютой ненавистью все, что имеет отношение к торговле и маркетингу. Он искренне уверен, что люди из этих областей - основная преграда на пути ко всеобщему счастью. Следующей по значимости преградой он считает немцев ("мне неловко об этом говорить, но это самая глупая нация в мире", - признался он робко).

Так вот, этот оригинал Стен, узнав про формулу расчета длительности проектов, мгновенно выдал свое дополнение:

- А знаете, как это формула выглядит для торговцев? Пи-эр.
- Почему просто пи-эр?
- Они делают полкруга вокруг проблемы, понимают, что с ней им не совладать и продают ее.