30 апреля 2014 г.
Об авторе. Peter Welch писатель и программист, автор книги «And Then I Thought I Was a Fish», автор блога «Still Drinking».
Изображение: Joe Raedle/Getty Images
Каждый мой друг, хотя бы дважды в неделю поднимающий на работе что-то тяжелее ноутбука, рано или поздно в разговоре невзначай бросает что-то вроде: «Бро, ты не пашешь на износ. Я только что отработал 4700-часовую неделю, копая тоннель под Мордором, используя отвертку»
Они правы. Мордор — отстой, и копание тоннеля гораздо трудозатратнее, чем тыкание в клавиши, если конечно вы не муравей. Но для галочки, давайте договоримся о том, что стресс и безумие — это плохо? Отлично. Добро пожаловать в мир программирования.
Все команды программистов набираются безумцами из безумцев
Представьте, что вы присоединились к команде инженеров. Вы возбуждены и полны идей, возможно только что закончили обучение и выходите из мира прекрасных инженерных решений, внушающих трепет эстетическим союзом пользы, экономичности и силы. Сначала вы знакомитесь с Мэри — ведущим проекта по строительству моста в густонаселенном городском округе. Мэри представляет вас Фреду после прохождения пятнадцати проверок безопасности, установленных Дейвом, по причине того, что у Дейва намедни украли свитер со стола первый и последний раз. Фред работает только с деревом, поэтому вы спрашиваете почему тот в проекте, ведь мост должен выдерживать трафик из автомобилей, полных смертными людьми, пересекающими 200-футовое ущелье над речными порогами. «Не беспокойтесь», — говорит Мэри. — «Фред займется пешеходными дорожками». «Какими дорожками?» — «Ну, Фред хорош в пешеходных дорожках, и они добавят мосту привлекательности». Конечно же, они будут без перил из-за строгого ограничения «Никаких перил!», установленного не-инженером Филом. Никто не в курсе чем Фил занимается, но оно определенно полно синергии и как-то связано с высшим руководством, с которым никто из инженеров связываться не хочет, поэтому они разрешают ему делать то, что он хочет.
Сара, тем временем, нашла несколько передовых техник мощения и включила их в проект, поэтому вам придется обходить их в процессе строительства, так как для каждой нужна своя опора и требование безопасности. Том и Гарри работают вместе годами, но у них спор насчет использования метрической или имперской системы. Решено было использовать ту систему, в зависимости от того «кто первый доберется до той части проекта». Это стало головной болью для монтажников, и они тупо скрутили, забили и сварили все из того, что было под рукой. Также этот мост должен быть подвесным, но никто не в курсе как строить подвесные мосты, поэтому на полпути добавили несколько дополнительных опор, чтобы все не рухнуло, но оставили тросы подвесные тросы, потому что те вроде как держат какие-то детали. Никто не знает какие, но все точно уверены, что эти детали очень важные. После того, как все познакомились, вам предлагают поделиться свежими идеями, но у вас их нет, потому что вы специалист по ракетным двигателям и ничего не знаете о мостах.
Вы бы проехали по такому мосту? Нет. Если бы его каким-то образом построили, то всех причастных бы казнили. И все же подобным манером написана каждая программа, которой вы когда либо пользовались, банковский софт, веб-сайты и повсеместно используемая утилита, которая должна была защищать информацию в интернете, но она не защитила.
Изображение: Peter Welch
Весь код плох.
Каждый программист временами, когда никого нет дома, выключает свет, наливает стакан скотча, ставит легкую немецкую электронику и открывает на своем компьютере файл. У каждого программиста он свой. Иногда он сам написал его, иногда он его где-то находит и понимает, что обязан сохранить. Он смотрит поверх строк и рыдает над их красотой, но вдруг слезы становятся горькими, как только программисты вспоминают, что остальные файлы — неизбежный крах всего хорошего и правильного что есть мире.
Этот файл — Хороший Код. В нем осмысленные и логичные имена функций и переменных. Он лаконичен. В нем нет ничего очевидно идиотского. Ему никогда не было нужно жить в дикой природе или следовать требованиям продажников. Он делает только одну, приземленную, специфичную вещь, и делает ее хорошо. Он написан одним человеком и никогда не изменялся другим. Он читается как поэма, написанная кем-то, кому за тридцать.
Любой программист начинает писать такие идеальные маленькие снежинки. Затем в пятницу ему говорят, что нужно шестьсот снежинок ко вторнику, поэтому он начинает жульничать там и тут, и возможно копирует несколько снежинок и пытается слепить их вместе, или просит коллегу помочь ему с теми снежинками, которые тают, и потом все снежинки превращаются в какой-то бесформенный ком, и кто-то прикладывает портрет Пикассо к нему, потому что никто не хочет видеть как кошачья моча впитывается в его испорченные снежинки, плавя их в лучах солнца. На следующей неделе все налепляют на ком еще снега, чтобы Пикассо не отвалился.
Существует мнение, что такое положение вещей можно исправить, если следовать стандартам, только вот «стандартов» существует больше, чем вещей, которые компьютеры в принципе могут сделать, и эти стандарты по-всякому улучшаются и портятся в соответствии с личными предпочтениями людей, которые их пишут, так что нет такого кода, который не попал бы в реальный мир, не делая десяток одинаковых вещей десятком даже отдаленно не похожих способов. Первые несколько недель на работе — только изучение того как программа работает, даже если вы разбираетесь во всех языках, фреймворках и стандартах, использованных в ней, потому что стандарты — единороги.
Всегда будет тьма
В детстве в моей спальне была кладовка. Она была странно сделана. Снаружи она казалась обычной, потом вы заходили внутрь и обнаруживали справа в стене углубление, создающее удобную маленькую полочку. Затем вы смотрели вверх, где стена за углублением уходила дальше, в абсолютное ничто, где не бывает света, и что вы мгновенно определяли как место дневной спячки для всех голодных монстров, которых вы отпугивали фонариком и плюшевыми игрушками каждую ночь.
Вот что значит учиться программированию. Вы изучаете полезные инструменты, потом вы осматриваетесь, а вокруг другие полезные инструменты, и эти инструменты открывают вам бездонный ужас, который всегда был рядом с вашей кроватью.
Например, скажем, вы среднестатистический веб разработчик. Вы знакомы с десятком языков программирования, сотней полезных библиотек, стандартов, протоколов и все в таком роде. Тем не менее вам нужно изучать новые вещи с частотой примерно одну в неделю, и не забывать проверять сотни уже знакомых вещей на случай, если они обновились или сломались, и быть уверенным в том, что они продолжают работать друг с другом и никто не починил баг в одной из них, которым вы воспользовались, чтобы сделать что-то, потому что это показалось вам очень умным однажды, на выходных, когда вы были пьяны. Вы полностью компетентны, и все хорошо, и вдруг все ломается.
«Шо за нах?» — восклицаете вы и начинаете отлавливать проблему. Выясняется, что однажды один идиот решил, что раз другой идиот решил, что 1/0 равно бесконечности, он может использовать это как условное обозначение для «бесконечности» для упрощения своего кода. Затем не-идиот справедливо решил, что это идиотизм, то, что должен был решить первый идиот, но поскольку он этого не сделал, не-идиот решил стать козлом и сделать это ошибкой компиляции. Затем он решил никому не говорить, что это ошибка, потому что он козел, и теперь все ваши снежинки — моча, а вы даже не можете найти кошку.
Вы эксперт во всех этих технологиях, и это хорошо, потому что ваша компетентность позволяет потратить всего лишь шесть часов на выяснение причин проблем, вместо потери работы. Теперь вы знаете еще один маленький факт в миллионах уже вам известных, потому что программы, от которых вы зависите, написаны козлами и идиотами.
И все это относится только к вашей области, которая представляет собой малюсенький кусочек всего известного в компьютерной науке, чего вы возможно никогда не узнаете. Ни одна живая душа не в курсе всего того, как ка самом работает ваш пятилетний макбук. Почему мы просим вас выключить его и включить снова? Потому что мы понятия не имеем что с ним и гораздо проще отправить его в искусственную кому, чтобы его встроенная команда автоматических докторов постаралась решить это за нас. Единственная причина, по которой компьютеры айтишников работают лучше, чем компьютеры не-айтишников, состоит в том, что айтишники знают, что компьютеры — маленькие, больные шизофренией дети с аутоимунным заболеванием и мы не наказываем их, когда они себя плохо ведут.
Много всего делается в интернете, и интернет тот еще ад
Помните о безумцах и плохом коде? Интернет — это все то же самое, за исключением того, что он в миллиард раз хуже. Вебсайты, представляющие собой шикарные тележки из супермаркета с может быть тремя динамическими страницами, поддерживаются командами людей по всему свету, потому что «правда — все» (Полная цитата: «Я — ничто, правда — все!». А. Линкольн., прим. пер.) нарушается всегда, везде, для всех. Прямо сейчас кто-то в Фейсбуке получает тысячи сообщений об ошибках и яростно пытается найти проблему, пока все не рухнуло. В офисе Гугла есть команда, которая не спала три дня. Где-то программист базы данных сидит в окружении пустых бутылок из-под Маунтин Дью, а его супруг считает, что тот мертв. И если эти люди остановятся, мир рухнет. Большинство обывателей не в курсе, чем занимаются сисадмины, но поверьте мне, если они все одновременно уйдут на обед, то не успеют дойти до столовой к тому моменту, как у вас кончатся патроны, которыми вы отстреливались, защищая консервы от бродячих банд мутантов.
Нельзя перезапустить интернет. Триллионы долларов зависят от ненадежной паутины неофициальных договоренностей и кода в стиле «и тааааак сойдет!» с комментариями типа «TODO: ПОФИКСИТЕ, ЭТО ОЧЕНЬ ОПАСНЫЙ ХАК, НО Я НЕ ЗНАЮ В ЧЕМ ДЕЛО», написанными десять лет назад. И я даже не упомянул легион людей, атакующих разные части интернета с целью шпионажа или рады наживы, просто от скуки. Слышали когда-нибудь про форчан? Форчан может уничтожить вашу жизнь и ваш бизнес просто потому, что они вдруг решили, что вы им не нравитесь, но мы не переживаем насчет форчана, потому что еще одна атомная бомба не сделает погоду в ядерной зиме.
В интернете нормально сказать «Ты знаешь, это вроде как работает время от времени, если использовать правильную технологию», и БАМ! Это стало частью интернета. Кто угодно с несколькими сотнями долларов и компьютером может вырезать кусочек интернета и залепить брешь кусками кода по своему вкусу какого угодно отвратительного качества, и потом прикрепить свой маленький кусочек к нескольким большим кускам, и все станет чуточку хуже. Даже хорошие разработчики не заморачиваются учить таинственные спецификации, набросанные организациями людей, желающих создать единорогов, поэтому все половину времени мирятся с фактом, что всё равно ничему и не имеет смысла, и может сломаться в любой момент, и мы просто пытаемся хоть как-то прикрыть это и надеемся, что никто не заметит.
Вот вам секретный закон интернета: через пять минут после того, как вы открыли браузер, ребенок в России узнает номер вашего социального страхования. Вы где-то поставили галочку? Компьютер в АНБ теперь отслеживает ваше физическое местонахождение до конца ваших дней. Отправили письмо? Ваш почтовый адрес высветился на билборде в Нигерии.
Это происходит не потому, что нам все равно и мы не пытаемся им помешать, а потому, что все сломано из-за отсутствия хорошего кода, и все пытаются сделать так, чтобы оно хоть как-то функционировало. Вот ваша работа, если вы работаете с интернетом: надеяться, что последнее написанное вами достаточно хорошо, чтобы продержаться несколько часов, чтобы вы могли поужинать и немного вздремнуть.
ОШИБКА: Попытка распарсить HTML при помощи регулярного выражения; система пробудила Ктулху*.
Смешно ведь? Нет? Как насчет такого диалога**:
— Это называется arrayReverse?
— s/верблюд/_/
— Круто, спасибо!
Помог ли тот чел? С верблюдом? Его ответ не кажется адекватным? Нет? Хорошо. Вы все еще можете обрести Иисуса. Вы пока не провели столько времени читая код, что начали говорить на нем. Человеческий мозг не очень хорош в базовой логике, а сейчас существует целое ремесло, занимающееся ничем иным, как сложной, очень сложной логикой.
Огромные цепочки абстрактных условий и требований выстраиваются, чтобы отслеживать такие вещи, как забытые запятые. Занятия этим весь день вызывают у вас легкую афазию (потерю речи, прим. пер.), и когда вы смотрите на лицо человека, который что-то говорит, вы не можете определить закончил он или нет, потому что нет точки с запятой. Вы погружаете себя в мир полной бессмыслицы, где все, что важно — это маленькая последовательность цифр, отправляющаяся в огромный лабиринт символов, и на выходе получается другая последовательность цифр или фотография котенка.
Повреждения мозга подтверждаются языками программирования, создаваемыми людьми. Это программа:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout << "Hello, World!\n";
return 0;
}
Эта программа делает ровно то же самое, что и эта:
`r```````````.H.e.l.l.o. .w.o.r.l.di
И эта:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
И эта:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.
И кто-то однажды написал язык программирования, на котором кто-то другой написал вот это:
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while("){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
"
Если верить автору, то эта программа представляет собой «две строки кода, которые парсят две строки комментариев, в которых записаны числа Майя, представляющие ASCII символы, из которых составлен заголовок журнала, и воспроизводятся в виде повернутого на 90 градусов ASCII-арта.»
Эта программа выиграла конкурс, потому что конечно она выиграла. Вы хотите жить в таком мире? Нет. Это мир, в котором можно курить коробок в день и никто вам слова не скажет. «Конечно он выкуривает коробок, а кто нет?» Со временем каждый программист в момент пробуждения ото сна, в полудреме видит всю свою жизнь и все отношения в ней в виде кусков кода, и потом программисты обмениваются историями о том, как бессонница вызывает кислотные трипы и это нормально. Это мир, в котором люди отказываются секса ради написания языка программирования для орангутангов. Все программисты заставляют свои мозги делать то, на что они не были рассчитаны, в ситуациях, в которых невозможно оказаться, десять-пятнадцать часов в день, пять-семь дней в неделю, и каждый из них медленно теряет рассудок.
</проповедь>
Так что нет, мне не нужно поднимать предметы весом до пятидесяти фунтов. Взамен я получил возможность подравнивать лобковые волосы Сатаны, пока он ест мозг из моего открытого черепа, чтобы небольшая часть интернета смогла проработать еще несколько дней.
___
* Parsing HTML the Cthulhu way
** CamelCase
Комментарии (31)
ProgrammerMicrosoft
23.07.2015 15:27+3Думаю что вот с такими типами статей и нужно бороться так как они исповедуют ложь и мягко говоря полный БРЕД
Lorien_Elf Автор
23.07.2015 15:54+1С удовольствием отправлю статью в соответствующий хаб, если подскажете в какой.
lostpassword
23.07.2015 21:36+4По формальным критериям статья вообще на Хабре должна быть.
Во-первых, это про программирование; во-вторых, там таки есть хаб с хорошим, годным, подходящим названием.))
lostpassword
23.07.2015 15:59+16Это с какой стороны баррикад посмотреть. Я, например, никогда не мог понять статьи с лейтмотивом «Сижу, пишу код весь рабочий день, потом дома тоже пишу, и в выходные пишу, и в отпуске. Как же это здорово — писать код! Обожаю это дело!».
полный БРЕД
storoj
23.07.2015 16:13+2сорри, что не в ЛС, никогда никому не писал
а программа на С++ разве не потеряла iostream и hello world?
storoj
23.07.2015 17:10оказывается, в оригинале такая же проблема
тогда хочу предложить такой вариант:
#include <iostream> int main(int argc, char *argv[]) { std::cout << "Hello, World!" << std::endl; return 0; }
сорри, сегодня что-то совсем ничего не получается, теперь не в ту ветку ответилk06a
23.07.2015 22:23м?
#include <iostream> int main(int argc, char *argv[]) { std::cout << "Hello, World!" << std::endl; }
Rumlin
23.07.2015 17:54Всегда подозревал, что к программированию также применимо «Все процессы в мире происходят с увеличением энтропии».
P.S. Надеюсь автору перевода карму не уронили за статью. Конечно статью более уместно было бы читать на проф.праздник или 1 апреля. Спасибо за труд.Rumlin
23.07.2015 20:42Нашел русский перевод (MAY 2, 2014) ruslanbes.com/blog/all/perevod-programmirovanie-otstoy
Перевод делался для инвайта на хабр, но они там не очень любят переводы, поэтому выкладываю сюда
hacklex
23.07.2015 22:29Сомнительно, потому что правильно всё же уточнять «в закрытых системах».
Rumlin
23.07.2015 22:54Система и есть закрытая. Статья на хабре сегодня в тему Конец эры айтишников. Нужно что-то новое, куда IT будет расширяться.
В последнее время впечатление «варения в собственном котле» — ситуация сводится к «делая десяток одинаковых вещей десятком даже отдаленно не похожих способов». Но что-то кроме «десяток одинаковых вещей» я не вижу. «Птички», интернет, мобильные приложения… Всё одно и тоже и ничего принципиально нового.
Maccimo
24.07.2015 03:39-12В чём тайный смысл перевода подобных словесных испражнений горе-блоггеров?
Словно бенефис Евгения Вагановича Петросяна целиком посмотрел, тьфу!
aronsky
24.07.2015 10:17-3Картинка для привлечения внимания конечно поражает своей абсурдностью.
aronsky
25.07.2015 01:47-2Нет, серьёзно, кто-то читал?
public function indexAction() { echo 'banana'; exit; $inbox = new InboxController(); $queue = $inbox->indexAction();
Это всё происходит в контроллере в ZF2.
Кроме этого, в папке public у него зачем-то лежит wordpress.
engine9
24.07.2015 11:40+1На мой, далекий от программирования взгляд, кажется что масла в костёр подливает человеческий эгоизм: я не стану улучшать труд других людей, я сделаю еще один дистрибутив линукса (создам еще один клон фейсбука, свой фреймворк с блэкджеком и т.п.) и попытаюсь его всунуть везде где можно.
PalkinTsk
24.07.2015 12:15+3Отличная статья. Можно и с юмористической стороны ее принять, но если вдуматься, то кол-во библиотек, фреймворков, итд разростается с каждым днем, и для многих это действительно проблема. Пришел в новую команду? А вот выучи новый стек технологий! Конечно если есть опыт и гугл проблема не такая серьезная, но тем не менее в среднем на изучение и вовлечение в производство новой технологии уходит неделя. А ведь это время твоей жизни.
pronvis
24.07.2015 12:27«Гугл проблема» — проблема заключающаяся в недостатке знаний в определённой области, а также понимание того, что копать глубоко особого смысла не имеет. Зачастую решается одним запросов в google. :)
engine9
24.07.2015 13:02+1И да, у человечества как у вида сознательность чуть выше чем у колонии водорослей в теплом, насыщенном нитратами водоеме: выжать из среды всё, всеми доступными методами, оставив толстый слой продуктов жизнедеятельности и собственных тел.
Foxcool
24.07.2015 14:24-2Странный бомбеж.
Все гораздо проще и будничнее. Ну есть баги. есть говнокод — кто сказал, что это настолько плохо? Вся жизнь такая, с программированием или без него. Я читал аналогичное нытье хирургов, которые говорят, что у некоторых людей есть некие мутации, которые до операции хер выявишь, а во время операции уже поздно — труп. Это куда критичнее. В общем, везде несовершенство. А нытье по упущеннму совершенству — банальное задротство. А так да, повышать сознательность и элементы самоорганизации, распространять внутри кодингстандарты. Костыли моментально вывешивать в багтрэкер, чтобы было видно. что надо решить и т.д.
MrLibra
11.08.2015 13:16Спасибо за перевод, подняло настроение. Вот эта фраза только резанула глаза: «Вы все еще можете обрести Иисуса» — по-английски видимо подразумевается какая-то коннотация, но по-русски фраза звучит несколько неуклюже.
lostpassword
Прямо бальзам на душу. Какой замечательный человек! Какой замечательный рассказ!
Обязательно покажу знакомым.