Особенности национального программирования

23 сентября 2008, 6:14
Текст этот — довольно старый и распространен в Сети в такой степени, что ссылка на какой-либо конкретный источник попросту не имеет смысла.
Приведенные портреты — изумительно точны и даже, я бы сказал, архетипичны!:)
Я, как обычно, слегка поправил запятые. — Xendz
Любой русский программист после пары минут чтения кода обязательно вскочит и произнесет, обращаясь к себе: «Переписать это все нафиг!» Потом в нем шевельнется сомнение в том, сколько времени это займет, и остаток дня русский программист потратит на то, что будет доказывать самому себе, что это только кажется, что переписать — это много работы!.. А если взяться и посидеть немного, то все получится. Зато код будет красивый и правильный!

Hа следующее утро русский программист свеж, доволен собой и без единой запинки докладывает начальству, что переписать этот кусок займет один день, не больше. Да, не больше. Hу, в крайнем случае два, если учесть все риски. В итоге начальство даст ему неделю — и через полгода процесс будет успешно завершен... До той поры, пока этот код не увидит другой русский программист.

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

Эта четверка давно не пишет ничего нового, а только поддерживает код, написанный в свое время индусом и дважды переписанный двумя разными русскими. В этом коде не просто живут баги. Здесь их гнездо. Это гнездо постоянно воспроизводит себя при помощи любимой китайской технологии реиспользования кода — copy/paste. Отсюда баги расползаются в разные стороны посредством статических переменных и переменных, переданных по ссылке (китайский программист не способен примириться с неудобствами, вызванными тем, что он не может изменить значение внешнего параметра). Вспоминая об этих переменных и ссылках, русский программист, как правило, на время теряет дар английской речи и переходит к какой-то помеси русского и китайского. Он давно мечтает переписать весь кусок, над которым работают китайцы, но у него нет времени: он уже переписывает два больших куска и только что доказал начальству необходимость переписать третий. Кроме того, русский программист боится обидеть китайцев. Они могут решить, что он пытается вытеснить их с работы. (К слову сказать, напрасно боится, поскольку китайцы уже так решили.)

Hа китайцах висят серьезные баги. Начальство об этих багах знает и постоянно торопит китайцев. Китайцы уважают начальство и потому перевешивают баги друг на друга очень торопливо. Они знают, что все попытки починить приведут к появлению новых багов, еще худших. (И в этом они правы.) Разобраться в том, в каком порядке меняются и как приобретают свои значения статические переменные, способен только один человек на фирме — индус. Hо он пребывает в медитации. Поэтому, когда всю четверку уволят во время сокращения... (А кого еще увольнять? Русский еще не переписал свой кусок, а индус — главная ценность фирмы, он редко обращает внимание на проект, но когда обращает — все понимают, что так, как он, архитектуру никто не знает.) Так вот, когда китайцев уволят, у их кода возможны две основные судьбы. Первая — он попадет к русским и его перепишут. Вторая — он попадет к местному, канадскому программисту.

О, канадский программист — это особый тип! Он, ни на минуту не задумываясь, как рыцарь без страха и упрека, бросится фиксить самый свирепый Баг китайского кода. Этот Баг живет там уже три года, и китайцы уже четырежды (каждый по разу) сообщали начальству, что он пофиксен. Hо Баг каждый раз возвращался, как Бэтмен в свой Готхем. Итак, канадский программист, воспитанный на героической патетике американского футбола — бросаться в бой головой вперед, — сделает то, что китайцы не рисковали делать в течение трех долгих лет: он при помощи дебагера отследит место, где статическая переменная приняла значение -1 вместо правильного 0, — и решительным движением заведет рядом вторую переменную с правильным значением. Баг погибнет в неравной схватке с героем.

Hо победа будет достигнута дорогой ценой: работать перестанет все, включая только что переписанный русским программистом код. Это повергнет русского программиста в задумчивость на целых два дня, после чего он сделает предсказуемый, в общем-то, вывод о том, что дизайн с самого начала был неправильным и все надо переписать. Hа это нам нужна неделя. Да, неделя, не больше. Канадский программист смело бросится налаживать все — и станет еще хуже, хотя, казалось бы...

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

К счастью, все это несильно влияет на дела фирмы, поскольку продукт продается и так. Поэтому менеджмент ходит в целом довольный и не устает напоминать всем, что они отобраны как лучшие среди лучших. И что мы давно доказали свою способность выпускать продукт тем, что выпускаем его... иногда.
Поделиться
2 комментария
Winnie Pooh
Очаровательно.
Xendz
В связи с тем, что эта заметка попала в поле зрения спам-роботов, ее комментирование пришлось закрыть :(.
Xendz
Если у вас возникло желание оставить свой комментарий, воспользуйтесь «Книгой жалоб и предложений». Я постараюсь найти время, чтобы перенести его сюда.