[Перевод] Программирование — отстой

Перевод делался для инвайта на хабр, но они там не очень любят переводы, поэтому выкладываю сюда. Оригинал статьи — Programming Sucks. Питер Уэлч (автор) разрешил мне опубликовать перевод только если я укажу ссылку на его книгу: And Then I Thought I Was a Fish, но я сказал, что я не собираюсь указывать ссылки ни на какие книги и опубликую так, как я хочу

Программирование — отстой

Написано 27-го числа месяца апреля в году 2014. Было воскресение.

Те из моих друзей, кому по работе приходится поднимать вещи тяжелее, чем ноутбук и чаще, чем два раза в неделю, однажды пользовались случаем и вставляли в разговор что-то типа: «Бро (это обязательно начиналось с „Бро“), ты не напрягаешься на работе. Вот я только что отработал 4700 часов в неделю, копая отвёрткой туннель под Мордором»

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

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

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

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

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

Любой код — плохой

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

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

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

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

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

Темнота будет всегда

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

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

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

— Что за нафиг? — произносите вы вслух, и начинаете искать проблему. Вы обнаруживаете, что когда-то давно какой-то идиот решил, что, так как другой идиот решил, что 1/0 должно равняться бесконечности, то он может использовать это как сокращение для термина «Бесконечность» и упростить свой код. Потом пришёл не-идиот и справедливо решил, что это как-то по-идиотски, — о чём должен был подумать изначальный идиот, — но, так как тот не подумал, не-идиот решил стать козлом и поменял поведение на критическую ошибку в своём новом компиляторе. Потом он решил, что никому не расскажет, что это была ошибка (он же козёл), и теперь все ваши снежинки пахнут мочой, а вы даже не можете найти кота.

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

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

Куча работы проделана в интернете, но интернет это тот ещё ад.

Помните тот фрагмент про людей и плохой код? Интернет — это то же самое, только в миллиард раз хуже. Вебсайты (которые по сути — расфуфыренные тележки для покупок с максимум тремя динамическими страницами) поддерживаются командами людей круглые сутки, потому что правда в том, что что-то ломается всегда, везде и для всех. Прямо сейчас некий работник Фейсбука получает десятки тысяч сообщений об ошибках и, высунув язык, пытается исправить проблему раньше, чем вся система улетит в тартарары. В офисе Гугла сидит команда, не спавшая три дня. Где-то ещё программистка баз данных сидит в окружении пустых банок Маунтин-Дью, а её муж думает, что она уже умерла. И если эти люди остановятся, мир сгорит в огне. Большинство людей понятия не имеют, чем заняты системные администраторы, но поверьте мне, если они все решат сделать перерыв на обед в одно и то же время, то они даже не успеют дойти до пиццерии, а у вас уже закончатся патроны, чтобы отстреливаться от банд бродячих мутантов, охотящихся за вашими консервами.

Нельзя перезагрузить интернет. Триллионы долларов зависят от хрупкой паутины негласных соглашений и «пока сойдёт»-кода с комментариями вроде «TODO: ПОЧИНИТЬ ЭТО, ЭТО ДИКО ОПАСНЫЙ КОСТЫЛЬ, НО Я НЕ ЗНАЮ В ЧЁМ ПРОБЛЕМА», написанными десять лет назад. Я даже не заикаюсь про все те армии людей, которые взламывают различные части интернета, чтобы за кем-то шпионить. Или получать деньги. Или просто потому, что им скучно. Слышали про форчан? Форчан в состоянии уничтожить вашу жизнь и бизнес лишь потому, что сегодня утром они решили, что вы им не нравитесь. Мы уже давно не переживаем по поводу форчана, потому что плюс-минус бомба не делает погоды, когда вокруг идёт ядерная зима.

В интернете обычное дело сказать: «Смотри, эта штука работает. Иногда. Если правильно применять технологию». Фигак! — теперь это часть интернета. Кто угодно с парой сотен баксов в кармане и компьютером может стащить кусочек интернета, запихнуть в него сколь угодно кошмарные фрагменты кода и потом прикрепить свой маленький кусочек к кучке больших кусков, и всё станет ещё чуточку хуже. Даже хорошие программисты забивают на чтение таинственных спецификаций, потому что люди, которые их написали, были наняты, чтобы создавать единорогов. Так что каждый проводит половину времени, борясь с фактом, что ничто ни с чем не совместимо или вообще не имеет смысла и может сломаться в любой момент, и мы просто пытаемся прикрыть это и надеемся, что никто не заметит.

Вот секретные правила интернета: через пять минут после того, как вы первый раз в жизни открыли веб-браузер, у школьника из России уже есть ваш номер социального страхования. Вы где-то зарегистрировались? Компьютер в NSA отныне отслеживает ваше физическое местоположение до конца вашей жизни. Отправили письмо? Ваш электронной адрес ушёл на доску объявлений в Нигерии.

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

Мы не психи по природе, но мы сошли с ума в процессе

Ошибка: Попытка разобрать HTML с помощью регулярных выражений; система вернула Ктулху.

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

— Она называется arrayReverse?
— s/camel/_/
— Клёво, спасибо.

Ну что, тот парень помог? Ну, тот, который с «camel»? Это похоже на осмысленный ответ? Нет? Отлично. По крайней мере, вы ещё можете найти Господа. Вы ещё не провели настолько много времени, читая код, что начали на нём говорить. Мозг человека не особо предназначен даже для базовой логики, а тут вся карьера состоит из того, чтобы работать с очень, очень сложной логикой. Вам нужно разматывать огромные цепочки абстрактных событий и требований, чтобы обнаружить в конце пропущенную запятую. После целого рабочего дня вы приходите в состояние лёгкой афазии — это когда вы смотрите на лица разговаривающих людей и не понимаете, закончили они или нет, потому что не видите точки с запятой. Вы окунаетесь в мир абсолютной бессмысленности, где единственное, что имеет значение — это когда короткие наборы чисел входят в гигантский лабиринт символов, а с другого конца лабиринта выходят другие наборы чисел или фотография котёнка.

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

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    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-арта».

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

</нытьё>

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

Share
Send
Pin
15 comments
lexszero

«triggering acid trips» — это таки не «падать в яму с кислотой»

Руслан Бес

Точно! Я как «acid traps» прочёл, и мой мозг, заточенный на РПГ, представил совершенно иную картину. Спасибо, исправил.

Роман

Это не перевод: это калька с английского. Читать текст решительно невозможно. Сначала думал скинуть ссылку коллегам, но к концу второго абзаца понял, что лучше ничего не скидывать, чем такое. Вся выразительность и органичность исходной статьи убита под корень: мозг спотыкается на каждой фразе.
Совет Руслану: такой текст надо переводить так, чтобы это читалось, словно он написан русским человеком. Попробуй непредвзято прочитать его от начала до конца, представив себя человеком, видящим статью в первый раз.
ЗЫ: и, пожалуйста, не обращайся к читателю на «Вы». Автор не скрывает, что изо дня в день стрижет лобковые волосы Дьяволу, не должно быть тут никаких «вы».

Руслан Бес

Критика принимается. Я не профессиональный переводчик, но оригинал настолько понравился, что я очень захотел его донести, тем более, что я отлично понимаю, что́ имеет ввиду автор.
Вероятно после нескольких часов работы с текстом мозг уже знает, что должен увидеть и «привыкает» к тексту (Левая отмазка). Спасибо за совет, буду в будущем давать статье «отлежаться». Попробую и эту перечитать и аккуратно улучшить.
C «вы» и «ты» всё сложнее. Полностью «вы» — нельзя из-за фрагмента про туалет. Там обстановка такая, что читатель должен почувствовать себя на месте автора, и «ты» используется именно для создания «эффекта присутствия». Полностью «ты» — тоже плохо, потому что создаёт излишнюю фамильярность (особенно видно во фрагменте про проект моста) и к тому же требует указания пола читателя («ты закончил» / «ты закончила»). В общем случае я остановился на варианте «вы» с маленькой буквы именно потому, что это компромиссная форма. Не «Вы» уважительное, но и не «ты» фамильярное.

Александр

спасибо за перевод! (чтобы разбавить хейерство в комментариях)

Den

Неправильный перевод: «падать в яму с кислотой».
Правильный перевод: «словить кислотный приход».

...и множество прочих ошибок.

Руслан Бес

Спасибо, исправил (лоханулся и прочёл как acid traps).

appetite

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

Constantine

Думаю, acid в данном случае — «наркотический», а не «кислотный».

Руслан Бес

Приходы от разных наркотиков различаются.

Захар Кириллов

Спасибо за перевод, Руслан.
Горе-критиканы могут сделать свою версию.

Timur

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

Aldekein

В детстве в моей спальне был туалет. -> не туалет, а кладовка =)

Спасибо за перевод, я собирался сделать его сам, настолько понравился рассказ.

olekhy

(y) спасибо сто раз, я не знаю англиский.

AK

прочел перевод и удалил твит. стыдно делиться такими переводами.

Александр

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

Роман

Великолепно, спасибо за перевод

Lalka

для орангутангов

Обезъяны называются «орангутаны». «орангутанГ» — устаревшая форма.

Руслан Бес

исправил, спасибо

ijin

Те из моих друзей, кому по работе приходится поднимать вещи тяжелее, чем ноутбук и чаще, чем два раза в неделю, обязательно воспользуются случаем, чтобы вставить в разговор что-то типа: «Чувак, (это обязательно начиналось с „Чувак“), у тебя халявная работа.

и просят коллегу проработать над той одной из них, но в его руках она тает.

Благодаря профессионализму, вы решаете эту проблему всего за шесть часов (а не теряете работу).

программисты знают, что компьютеры — это имунодефицитные свихнувшиеся дети

Много работы выполняют в интернете, но интернет — это тот еще ад.

Your comment
won’t be published

HTML will not work

Ctrl + Enter
Popular