Программирование — отстой, а программисты — психи: мнение инсайдера

29276
30

Программист Питер Уэлш, автор книги «И тогда я подумал, что я рыба» и блога Still Drinking (все также пью) считает, что программирование — отстой, а все без исключения его коллеги — психи, которые по ночам ловят кислотные приходы вместо того, чтобы видеть сны. Нет, они не виноваты — это программирование сделало их такими. Как именно написание кодов день ото дня неминуемо сводит человека с ума, Уэлш рассказал в своей циничной колонке, перевод которой публикует AIN.UA.

Каждый мой друг, который по работе вынужден поднимать что-то тяжелее ноутбука чаще чем два раза в неделю, так или иначе находит способ ввернуть в диалог фразу: «Бро, ты не напрягаешься на работе. Я вот отработал 4700-часовую неделю, копая отверткой тоннель до Мордора». В этом есть смысл: Мордор отстой, и физически копать тоннель, конечно же, тяжелее, чем барабанить по клавишам (если только вы не муравей — им тоннели даются лучше). Но, дискуссии ради, давайте сойдемся на том, что стресс и психические расстройства — это плохо. Сошлись? Вот и славно. Добро пожаловать в программирование.

Все команды программистов состоят из психов

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

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

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

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

Том и Гарри много лет работают вместе, но до сих пор спорят, какая система измерений лучше — метрическая или британская, а исход зависит от того, кто первым доберется до задачи. Это такая головная боль для людей, которые в реальности собирают всю эту конструкцию, что они просто взяли кувалду, напильник и сварочный аппарат, и пытаются подогнать друг под друга те детали, которые более или менее стыкуются.

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

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

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

Все коды — плохие

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

Это Хороший Код. В нем названия функций и переменных логичны и последовательны. Он лаконичный. Он не делает ничего очевидно глупого. Ему никогда не приходилось жить в дикой природе и отвечать перед командой из отдела продаж. Он выполняет всего одну мирскую специфическую задачу, и выполняет ее хорошо. Его написал один человек, и никто другой к нему не прикасался. Он читается, как поэма, написанная человеком старше 30 лет.

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

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

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

Тьма будет всегда

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

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

Скажем, вы средний веб-разработчик. Знаете десятки языков программирования, полезных библиотек, стандартов, протоколов и чего там еще. И минимум раз в неделю вам приходится дополнительно изучать еще что-то, и проверять то, что вы уже знаете, на наличие обновлений — а то вдруг оно поломалось. И чтобы убедиться, что все это до сих пор работает и никто не пофиксил баг в одном из кодов, который вы написали однажды на выходных, думая, что это же так круто, а на самом деле вы тогда были в стельку пьяны.

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

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

И это только в вашей специфической области, которая представляет собой микроскопический сегмент всего того, что мы называем компьютерными науками, с позиций которой можно сказать, что несмотря на то, что вы так много знаете — вы не знаете ничего. Ни один человек, живущий на этой планете, не знает от начала и до конца, каким образом все на самом деле устроено в вашем пятилетнем MacBook. Почему мы рекомендуем вам попробовать выключить его, а затем снова включить? Потому что мы понятия не имеем, что с ним не так, и намного проще ввести компьютер в состоянии комы и приставить к нему бригаду докторов, которые попробуют выяснить это вместо нас.

Мне платят, потому что вы не умеете пользоваться <a href=

Google» width=»700″ height=»470″ /> Мне платят, потому что вы не умеете пользоваться Google

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

Огромное количество работы сделано в интернете, но интернет — это тоже ад

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

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

Вы не можете перезапустить интернет. Триллионы долларов зависят от хрупкой паутины неофициальных соглашений и кодов из разряда «и так сойдет» с комментариями типа «TODO: исправить это очень опасная уязвимость но я не понимаю в чем ошибка», которые были написаны много лет назад. Я даже не упоминал легионы людей, которые взламывают разные части интернета ради денег или потому что им скучно. Слышали когда-нибудь про 4chan? 4chan могут разрушить вашу жизнь и бизнес, потому что этим вечером им показалось, что вы им не нравитесь, и мы даже не беспокоимся о 4chan, потому что еще одна ядерная бомба не делает погоды во время ядерной зимы.

В интернете нормально говорить, что «вы знаете, эта штука иногда работает, если применять правильную технологию», и БАМ! — теперь это часть интернета. Любой с парой сотен долларов и компьютером может взять немножко интернета, прикрепить к нему сколь угодно кошмарные фрагменты кода, потом добавить еще кроху стремных байтов от себя — и все станет еще чуточку хуже. Даже хорошие кодеры не утруждают себя чтением таинственных спецификаций, потому что люди, которые их написали, были заняты созданием единорогов. Так что все они половину своего времени  пытаются смирить с фактом, что ничего ни с чем не стыкуется или вообще не имеет смысла и может в любую минуту сломаться, а мы просто пытаемся это скрыть и надеяться, что никто не заметит.

Секретные законы интернета таковы: через пять минут после того, как вы впервые открыли веб-браузер, ребенок из России узнает номер вашего страхового полиса. Вы на что-то подписались? Теперь компьютер в АНБ автоматически узнает ваше местоположение до конца вашей жизни. Отправили email? Ваш адрес только что попал на доску объявлений в Нигерии.

Это неправда, нам плевать и мы не пытаемся ничего с этим делать. Но это правда, потому что все сломано, ведь хорошего кода не существует, и все просто пытаются заставить работать то, что есть. Если вы работаете с интернетом, то ваша работа — надеяться, что последнее, что вы напишете, сможет прожить несколько часов. Тогда вы успеете съесть ужин и немножечко подремать.

Мы не были психами от рождения — мы такими стали

ОШИБКА: Попытка разобрать HTML с помощью простых выражений; Система вернула Ктулху.

Смешно? Нет? А как насчет такого диалога?

— Это называется arrayReverse?

— s/camel/_/

— Круто спасибо.

Так этот парень помог? Который верблюд (в оригинале camel)? Звучит как осмысленный ответ? Нет? Хорошо. Вы все еще можете найти Иисуса в себе. Значит, вы еще не успели провести так много часов своей жизни за чтением кода, что начинаете на нем говорить. Человеческий мозг не очень-то хорош для восприятия базовой логики, а тут вся карьера зависит ни от чего иного, как от очень-очень и очень сложной логики.

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

Деструктивное влияние на мозг демонстрируется языками программирования, которые пишут люди. Это программа:

#include
 int main( int argc, char** argv ) {
 std::cout 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-арта».

Последняя программа побеждает, потому что, разумеется, она работает. Вы бы хотели жить в мире вроде этого? Нет. Это мир, в котором вы можете выкуривать по пачке в день, и никто об этом даже не спросит. Конечно, он выкуривает пачку в день, а кто бы на его месте не курил? Рано или поздно каждый программист просыпается утром и видит мир и все связи в нем в виде фрагментов кода до тех пор, пока его сознание полностью не очнется. Разработчики рассказывают об этом другу другу так, будто нет ничего странного кислотных приходах вместо снов.

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

</rant>

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

Оставить комментарий

Комментарии | 30

Поиск