?

Log in

No account? Create an account

Журнал от Объекта

Entries by category: it

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



Read more...Collapse )

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

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


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

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

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

Собеседования с программистами
Default
object
Сполски обновил свои рекоммендации: 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. Любимые книги по профессии, часто посещаемые программистские сайты.

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

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

STL/C++
Default
object
За что мне следует благодарить судьбу, так это за то, что уберегла от интимной близости с 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
object


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

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

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

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

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

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

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

Норвежские гермафродиты - женщины?
Default
object
Обсуждали поля базы данных. Я спросил, можно ли формально гарантировать, что пол может иметь только два значения. Андре сказал, что его подружка, студент-медик говорила, что в Норвегии при рождении, если есть сомнения насчет пола, по правилу записывают на женский. Впоследствии возможны корректировки.

Какой из меня пират?
Default
object
Здорово все-таки нам удается оправдывать себя. Вот взять, например, мое отношение к так называемой интеллектуальной собственности. Моя позиция - логически непоследовательна, я сам это понимаю, тем не менее я стараюсь ей следовать, т.е. быть последовательным в ней настолько, насколько это возможно. Итак:

1. Я пишу программы, следовательно, напрямую завишу от защиты авторских прав. Быть может, если бы в России с этим обстояло по-другому, я бы сейчас работал там, а не в Норвегии. Наглядный пример: Женя Веселов, прошедший через ту же Норвегию. Его Лексикон все ругали, но в свое время он у всех был (по его оценкам, речь шла о десятке миллионов копий). После путча они пытались раскрутить Лексикон через Микроинформ, но было уже поздно: во-первых, по-прежнему, никто не покупал, во-вторых, он уже тогда и не нужен был - его съел Word. В итоге Веселов сейчас в Редмонде.

2. Значит я борюсь с пиратством, начиная с себя? Не совсем так. Работая в России, я вообще не был обременен этими заботами - копировал все, что мимо проходило. Позиция была простая: мне не по карману было. Еще такая была формулировка: это - забота работодателя (в чем, кстати, было больше логики).

3. Сейчас у меня более сложное отношение к этому: я стараюсь покупать то, что могу себе позволить и то, чем пользуюсь ежедневно или профессионально. С профессиональным - нет проблем, мы сертифицированы Микрофтом как партнер, получаем весь их софт с лицензиями до 10 пользователей. Для музыки купил себе Cubase. Если пользуюсь чем-то, что стоит до 50 долларов, обычно тоже покупаю. Но в Москве на Горбушке купил компакты с плагинами для Cubase - здесь бы они стояли долларов по 300-500 за штуку, так что на одном горбушкинском компакте напихано программ тысяч на десять баксов. Я его купил (пока не пользовался - про запас).

4. Интересно получилось с просмотром российских телепрограмм. Вначале у меня была карточка NTV International - еще в эпоху Гусинского. Она мне обходилась баксов в 120 в год. Я к этому привык и счел, что 10 баксов в месяц - это то, что я могу себе позволить. Потом Гусинского примерно наказали, и я повернул антенну на Сириус, где появились международное ОРТ и новое НТВ. В Норвегии абонемент на них надо покупать в местном Виасате. У них драконовская политика - русское ТВ продается только вместе с пакетом их программ, которые я и так получаю через кабель. За все получается долларов 40 в месяц (плюс ежегодный взнос за поддержание карточки). Я плюнул и купил пиратскую карту. Смотрел с ней ТВ около года - замучали коды. Не только то, что их надо было вводить каждые неделю-две. Они для меня стали блядским напоминанием, что я что-то ворую. В этом было что-то не то. Посетовал об этом другу, он интересно отреагировал: "Главное, что ты осознаешь, что это неправильно. Это уже многое значит". То есть сам факт, что я пиздИл вокруг о внутренних брожениях, оказываетя, было проявлением высокой нравственности. Можно было смотреть дальше :-)

И тут появилось спецпредложение из Германии. Карточка с двухлетним абонементом на ОРТ/НТВ обходилась дешевле 200 долларов. То есть вписывалась в мои "10 баксов в месяц я могу себе позволить". Я ее купил.

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

5. Я практически не встречался в Норвегии с фирмами, где ВСЕ программы были бы куплены. То есть все, конечно, из себя изображают, тыкают в коробку из-под Микрософт Офиса, но коробка - одна, а сотрудников - человек двадцать. С Windows XP/Office XP это проделать сложнее - там активация нужна. Теперь вокруг все говорят об open source. По-моему, многим из новоявленных сторонников open source нужно просто, чтоб пИздить было легче.

Для себя делаю вывод, что я - латентный блюститель интеллектуальных прав. Если положить передо мной нужную мне программу без всякой защиты - я ей воспользуюсь. Иначе у меня создастся ощущение, что я выбросил деньги, которые так нужны моей семье и детям (нравственный выбор, одним словом). Если же программа защищена или напоминает о том, что ее нужно купить (как те коды для НТВ/ОРТ), то я ее покупаю, если считаю, что могу себе позволить. А если не могу? Надо подумать...

Интересно, как бы я себя повел, если бы стал очень богатым? Стал бы покупать все? Так или иначе, когда у меня не было денег, мне кажется, я вел себя хуже, считая, что раз я беден, то и выбора нет. Другой интересный вопрос: если я снова сильно обеднею, вернется ли это оправдание, что мне все можно, потому что нет выбора? Надеюсь, что проверить это мне не удастся.