?

Log in

No account? Create an account
"Best practice" выживания программиста - Хроника затяжного прыжка [entries|archive|friends|userinfo]
maxtar

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

"Best practice" выживания программиста [Mar. 4th, 2010|01:37 pm]
maxtar

«Ну, что скажете насчет этого предложения», спросил у Бенакадровый агент. Несколько секунд ушло на раздумье. Он искал не совсем это, но у него не было никакой работы с Ноября 1989 — почти три месяца — так что надо было как-то возвращаться из забвения. Бен сказал агенту, что готов поговорить с нанимателем и попросил назначить собеседование на следующую неделю.

«Вообще-то», ответил агент, «им кто-нибудь нужен как можно скорее. Сможете подъехать к ним пораньше? Например, сегодня?»

К счастью в тот день Бен не только принял душ, но и оказался гладко выбрит. Он согласился приехать на собеседование в тот же день и уже через два часа встретился с Уэйном, ведущим разработчиком.

«Спасибо, что так быстро приехали», начал Уэйн, «предыдущий контрактник внезапно ушел. Ну да Бог с ним, я гляжу, вы несколько месяцев работали в Initech, чем вы там занимались?»

«Я работал над системой обмена да-»

Уэйн его перебил. «Отлично, а с ассемблерными вставками доводилось работать?»

«Да, вообще в последнем прое-»

Уэйн снова его перебил. «Насколько вы знакомы с многозадачным программированием?»

Бен начал было обычную речь о многозадачном программировании начала 90-х, но заметил, что Уэйн уже переключился на свой блокнот. Он что-то писал в блокноте, периодически соглашаясь с Уэйном случайными «угу».

«Отлично», опять перебил Уэйн. «Теперь посмотрите на этот код. Скажите что здесь не так». Он передал Бену блокнот с написанным от руки кодом на С.

int i;char *p = 0x10000;for (i = 0; i < 1000000;i++) {   *p++ = 0;}


Бен отметил очевидное целочисленное переполнение, а затем добавил, «но лично я бы просто использовал memset».

«Отлично», сказал Уэйн, «вы приняты! Сможете приступить немедленно?»

«Наверное», ответил Бен, немного удивившись. Было 15:03 — ровно три минуты с начала собеседования — и у Бена не было планов на вечер.

«Ну, эмм, давайте, что ли начнем?»

«Прекрасно!», с воодушевлением сказал Уэйн. «Итак, во-первых это будет самая легкая работа, которая вам доставалась. Вообще-то нам не нужна помощь, но так как от нас только что ушел один контрактник нам надо заполнить пробел. Вы знаете, как это происходит, верно?»

Уэйн продолжил, взяв небольшую паузу. «В работе я стараюсь следовать правилу 80/20. Слышали о таком?»

Не дав Бену ответить, он продолжил. «Ничто, ничто в мире ИТ не делается быстрее, чем за 80 часов, и какое бы время на исполнение ты не выделил, умножь его на 20, и назови руководству этот срок. Видите, 80/20».

Это было не совсем то правило 80/20, которое знал Бен, но решил, что каждый волен трактовать его посвоему. Поведав ему еще несколько «правил» их программистского отдела, Уэйн начал объяснять, зачем им понадобился Бен.

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

Уэйн был проектировщиком и главным программистом Оконной Системы. Это был надстроенный над DOS оконный менеджер, который для вывода «окошек» использовал ANSI графику. В каждом окне могло находиться одно из четырех приложений (одно из них предстояло поддерживать Бену), окно можно было перетаскивать, изменять размер, и производить другие действия.

Узнав вкратце об Оконной Системе и собственно основном приложении, Бен ушел домой и на следующее утро был готов к трудовым подвигам. В следующие несколько дней ничего особенного не происходило. Равно как и в следующие несколько недель. И в следующие несколько месяцев.

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

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

for(i=0;i<1000000;i++) {;}


Похоже, цикл срабатывал при каждом обновлении экрана. Он еще разок все проверил. В самом деле, он срабатывал всякий раз, когда обновлялся экран. Решив, что он, похоже, отыскал баг, или кривой кусок кода, Бен спросил у Уэйна, что с этим делать.

«Ха-ха», воскликнул Уэйн. «А это, друг мой, то, что мы называем 'ускоряющим циклом'. Мы их вставляем для страховки, да-да».

Бен недоумевающе потряс головой, пытаясь понять, как он мог не подумать, что это очередной способ уклонения от работы.

«Смысл в том», продолжил Уэйн, «что когда у нас выдаются это ужасно мучительные недели — ну знаешь, когда мы на самом ничего не исправляем и не вносим изменений — мы просто убираем из цикла один ноль. Затем мы говорим начальнику, что реализуя последнее изменение, мы столкнулись с некоторыми проблемами с производительностью, но после кропотливой квантовой оптимизации нам удалось добиться существенного увеличения скорости, а изменения мы реализуем на следующей неделе».

«Видишь», сказал Уэйн, выдержав короткую паузу, «это подстраховка».

Найдено на сайте "The daily WTF" (ссылка) по ссылке из icq.
LinkReply

Comments:
[User Picture]From: addicted_to_q
2010-03-04 03:15 pm (UTC)
Ого, после стольких лет все еще попадаются ссылки на русскоязычный WTF :)
(Reply) (Thread)
[User Picture]From: maxtar
2010-03-04 05:29 pm (UTC)
Кстати, а что он больше не обновляется?
(Reply) (Parent) (Thread)
[User Picture]From: addicted_to_q
2010-03-04 05:37 pm (UTC)
Да, я бросил это дело. Бессмысленно, и одному надоело. Волонтеры долго не держались, а доходов с грекламы никаких.
(Reply) (Parent) (Thread)
[User Picture]From: maxtar
2010-03-04 05:42 pm (UTC)
Да, жалко..
(Reply) (Parent) (Thread)