Программирование — не тяжелый физический труд, но все равно отстой

в 8:51, , рубрики: все читают теги, Программирование

Peter Welch
30 апреля 2014 г.
Об авторе. Peter Welch писатель и программист, автор книги «And Then I Thought I Was a Fish», автор блога «Still Drinking».

Программирование — не тяжелый физический труд, но все равно отстой - 1
Изображение: Joe Raedle/Getty Images

Каждый мой друг, хотя бы дважды в неделю поднимающий на работе что-то тяжелее ноутбука, рано или поздно в разговоре невзначай бросает что-то вроде: «Бро, ты не пашешь на износ. Я только что отработал 4700-часовую неделю, копая тоннель под Мордором, используя отвертку»

Они правы. Мордор — отстой, и копание тоннеля гораздо трудозатратнее, чем тыкание в клавиши, если конечно вы не муравей. Но для галочки, давайте договоримся о том, что стресс и безумие — это плохо? Отлично. Добро пожаловать в мир программирования.

Все команды программистов набираются безумцами из безумцев

Представьте, что вы присоединились к команде инженеров. Вы возбуждены и полны идей, возможно только что закончили обучение и выходите из мира прекрасных инженерных решений, внушающих трепет эстетическим союзом пользы, экономичности и силы. Сначала вы знакомитесь с Мэри — ведущим проекта по строительству моста в густонаселенном городском округе. Мэри представляет вас Фреду после прохождения пятнадцати проверок безопасности, установленных Дейвом, по причине того, что у Дейва намедни украли свитер со стола первый и последний раз. Фред работает только с деревом, поэтому вы спрашиваете почему тот в проекте, ведь мост должен выдерживать трафик из автомобилей, полных смертными людьми, пересекающими 200-футовое ущелье над речными порогами. «Не беспокойтесь», — говорит Мэри. — «Фред займется пешеходными дорожками». «Какими дорожками?» — «Ну, Фред хорош в пешеходных дорожках, и они добавят мосту привлекательности». Конечно же, они будут без перил из-за строгого ограничения «Никаких перил!», установленного не-инженером Филом. Никто не в курсе чем Фил занимается, но оно определенно полно синергии и как-то связано с высшим руководством, с которым никто из инженеров связываться не хочет, поэтому они разрешают ему делать то, что он хочет.

Сара, тем временем, нашла несколько передовых техник мощения и включила их в проект, поэтому вам придется обходить их в процессе строительства, так как для каждой нужна своя опора и требование безопасности. Том и Гарри работают вместе годами, но у них спор насчет использования метрической или имперской системы. Решено было использовать ту систему, в зависимости от того «кто первый доберется до той части проекта». Это стало головной болью для монтажников, и они тупо скрутили, забили и сварили все из того, что было под рукой. Также этот мост должен быть подвесным, но никто не в курсе как строить подвесные мосты, поэтому на полпути добавили несколько дополнительных опор, чтобы все не рухнуло, но оставили тросы подвесные тросы, потому что те вроде как держат какие-то детали. Никто не знает какие, но все точно уверены, что эти детали очень важные. После того, как все познакомились, вам предлагают поделиться свежими идеями, но у вас их нет, потому что вы специалист по ракетным двигателям и ничего не знаете о мостах.

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

Программирование — не тяжелый физический труд, но все равно отстой - 2
Изображение: 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

Автор: Lorien_Elf

Источник

Поделиться новостью

* - обязательные к заполнению поля