Ох, как же тяжело быть программистом


Расскажу я былину в назидание начинающим программистам.
На заре своей программисткой карьеры я узнал такую мудрость:

Программируй так, как если бы человек, который будет поддерживать твой код, будет брутальным психопатом и будет знать, где ты живёшь. © Martin Golding

evil_programer
А всё потому что написанная однажды твоя программа будет ещё переписываться много раз. И скорее всего не тобою…
И я начал чётко следовать этому правилу и стараться писать код хорошо.
Время шло и я узнал следующую правду жизни:

Как бы ты не старался, тебе потом будет стыдно за этот код и даже будет хотеться переписать.

Чёрт побери, и ведь правда! Всем программистам стыдно.
Смотришь на свой код трёхмесячной давности и думаешь: «Блин, ну как я так мог кодить?»
Как я программировал три года назад

Как же с этим жить? Но вот на одной конференции я узнал спасение:

Плохой программист пишет в день 200 строчек кода а хороший программист удаляет в день 200 строчек

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

И вот я переколбасил код думая что я сделал «рефакторинг», ну ничего что без тестов, но работать должно. И вместо написания своего CSV парсера нашёл в интернете и подключил к проэкту какой-то чужой, который ещё и Excel файлы шарит парсить, и в БД сразу записывать и кофе варить и ракеты запускать.
Я удалил не 200 а 400 строк! Йуху! Какой же я крутой 🙂

И в припрыжку понёс показывать это всё архитектору на ревью.
А он глянул и сразу дал мне по шапке: «А это что за библиотека? А ты уверен что в ней нет багов? А класс этот ты зачем поменял? А ты тесты написал? А ты уверен что после твоего рефакторинга оно будет работать как прежде?».
И рассказал мне программисткий анекдот:
Работает - не трогай

И ты так и продолжаешь работать на проекте постоянно дописывая костыли и накапливая технический долг.
И вот наступает такой момент когда прибегает к тебе проджект менеджер и говорит «там заказчику нужно срочно поменять стратегию начисления скидок к рождественским продажам. За сколько можешь сделать?».

А ты хрен его знает даже что отвечать — там такой код уже непонятный, всё в костылях, писался десятью индусами и те уже поувольнялись.
— Ну за два-четыре дня. Наверное.
— Отлично! Два дня, так и скажу заказчику.
И убежал.

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

Любой код без автотестов сразу становится legacy: никому непонятный, хрупкий и почти неизменяемый, и все уже через неделю забудут что он делает и как. И совершенно неважно, насколько хорошо он написан, объектно-ориентирован или инкапсулирован. С помощью тестов мы можем быстро и под полным контролем изменить поведение нашего кода. А без них мы на самом деле не знаем, становится ли наш код лучше или хуже
© Майкл Физерс, Эффективная работа с унаследованным кодом

Посидел, поглядел в монитор час.
Нет, всё равно непонятно. Как оно, блин, вообще работает? Я убил бы того кто это писал, вот бы узнать где он живёт… и бензопилой… или лучше в кислоте его…
Пойду кофе заварю.
Вернулся, посидел ещё часик.
Скучно. О! Новый имейл.
Потом ещё часик.
А что там в твитере пишут?
Потом ещё часик.
Зайду-ка я на хабру, может чё интересного почитать.
…ещё часик.
Так, ладно. Нифига не понятно, пора домой.
loop of procastination

Следующий день проходит примерно также. И вот заходит к тебе проджект менеджер, а у тебя на весь монитор башорг:
— Нушотам, сделал?
— Та я это… там непонятно..
— Блин, ты же обещал за два дня сделать! А ты башорг читаешь!
— Ну… за два-четыре…
— Да продажи уже начнутся через два дня! Короче у тебя дедлайн до завтра. Иначе уволю нафиг, бездельника.

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

вероятность успеть к дедлайну имеет биномиальное распределение

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

И всё? Вот это вот я три дня ковырялся чтобы одну строчку исправить? Блин, я программист а кода даже как-то и не пишу. И новая истина которая открылась тебе гласит:

Большую часть времени программист читает код, а не пишет.

Блин, это совсем не романтично 😦

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

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

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

А ошибка оказывается происходит когда пользователи цену указывают с центами. И вдруг ты понимаешь — а ведь в США десятичный разделитель не запятая, а точка! И ты вбивал $5,50 и у тебя работало, а американцы вбивают $5.50 и получают ошибку. Но ты об этом ну вообще даже не мог подумать, и отдал не до конца протестированный код и который ну просто обязательно и завалился. Это было неизбежно, потому что есть Закон Мерфи который гласит:

Если что-то сделано так что может поломаться, оно обязательно поломается

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

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

Но время идёт, потихоньку ты учишься делать рефакторинг правильно и быстро, средствами IDE, покрывая тестами, в заранее выпрошенное у заказчика время.
Но работа тебя постепенно перестаёт переть. Это уже совсем не тот драйв который ты испытывал когда писал Змейку на втором курсе.
Какое-то унылое ковыряние в XML конфигах, баг фиксинг, чтение документации, разговоры с коллегами.
А при этом прогресс не стоит на месте, и вот выходит новая версия библиотеки, где добавился новый функционал а старый будет удалён. И тебе нужно посидеть попробовать её, прочесть книжку, попробовать пописать код. Но это не в рабочее время, естественно.

Нужно бежать за прогрессом чтобы оставаться на месте

Как быть? После работы дома ещё начинаешь себе pet project, так, чисто для души.
Жена недовольна — муж приходит с работы и снова за компьютер и в наушники. Сначала бесится, а потом рожает тебе ребёнка чтобы ей скучно не было. Теперь дома детские визги вообще не посидеть кодить — и начинаешь засиживаться на работе до одиннадцати.
А что делать? Как-то же обучатся нужно.
И постепенно твоя производительность снижается и устанавливается на определённом уровне, и тебе открылась следующая истина:

все работники креативной специальности: маркетологи, художники, музыканты, программисты — никогда не могут работать больше, чем четыре часа в день.
© bobuk

Но вот случается чудо, и заказчику нужно написать новое приложение. У вас есть возможность написать проект самим с ноля! Не какого-то старого монстра фиксить костылями, а начать с чистого листа.
Тут вы сразу же восторженно рисуете UML диаграммы, схему БД и выбираете стект технологий: что там сейчас самое модное? MongoDB, AngularJS, Scala? Ну и конечно же сразу нужно всё писать для Cloud! А теперь попробуем со всем этим взлететь…
а теперь со всем этим взлетим!

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

Как это не прискорбно, но следующее открытие:

Начали в стиле «Хай-тек». Закончили в стиле «Нехай так».
© Dmitriy Efimenko

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

Именно поэтому, вообщем-то, хороших программистов не так много. И именно поэтому им платят относительно неплохо (а на самом деле ещё и сильно недоплачивают).

Но однажды ты почувствуешь спокойствие и Силу Джедая. Как к этому прийти обязательно посмотри этот коротенький и чудный рассказа Андрея Солнцева:

UPD Похожая статья В поисках идеального программиста


Не поленитесь, и почитайте ещё несколько очень важных моих статей для начинающих программистов, студентов и джуниоров.
Также не забудьте вступить в группу IT Juniors куда я пытаюсь собирать ссылки на другие полезные статьи для вас и анонсы курсов и интернатуры в компаниях.

Один комментарий

  1. Ivan

    Лучше уж молодежь заранее знает про трудности профессии 🙂 Я, кстати, не считаю наличие этих всех ограничений поводом говорить «тяжело» 🙂 Ограничения добавляют точности действиям, а там дальше немножко естественного отбора и если ты еще в профессии — значит успешно со всем справляешься 🙂

    Не боги горшки лепят 🙂

  2. TriFace

    Про мудрые выводы в статье:

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

    Добравшись до аэропорта, Джонни Ларч предъявил билет женщине за стойкой, и она попросила у него водительские права.

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

    Она попросила его говорить потише.

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

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

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

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

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

    — Да нет, ты что, меня не слушал? Говорю тебе, мужик, — настаивал Джонни Ларч, — не зли этих сук в аэропорту.»

  3. parMaster (@parMaster)

    Я 5+ лет работал программистом — и в маленьких и в больших конторах. Сейчас я, можно сказать, менеджер, уже 2+ лет. Так вот, хочу сказать, что если вам тяжело работать программистом, то вы либо делаете что-то совсем-совсем неправильно, или вы запутались в определении понятия «тяжело». В айтишной компании, программист, в данный момент — это самая удачная позиция из всех возможных, а по сложности, я бы сказал, находится в нижней трети. А еще если вы хороший программист, то ваш телефон обрывают рекрутеры которые предлагают вам переехать в Таиланд и рубить по 60К в год. Так что харе хныкать и пиши код блеать!

    • Just so you code

      после 10+ работы программистом из них 4 в канаде… по сложности, я бы сказал, находится в нижней трети ты можно сказать работал … и можно сказать менагер… а реально — вы либо делаете что-то совсем-совсем неправильно, или вы запутались в определении понятия «тяжело» И да. переехать в Таиланд и рубить по 60К это около ;1500 USD … кхе .. если для вас єто много то ваше понятие «тяжело» и можно сказать, менеджер сразу легко опредилить… для сравнения в среднем в канаде нормальный (не старший) программист имеет в 2 недели после налогов.. а так и 100 в год бывает ..

      А по статейке знакомо так .. жизненно

  4. Уведомление: QA дайджест #6 | Rostyslav Bulyga
  5. Татьяна

    Я прогю 10 лет, писала всякое и на всяком. У меня упадок, потому что однажды, пару лет назад, я дошла видимо до своего потолка. И выше прыгнуть не получается. Все мои коллеги меня лучше и талантливее, а я тупая посредственность. Недавно повысили зп, не понимаю, почему, тупее чем я нет никого в отделе. Может это потому, что я девушка. Хотя не буду оскорблять женщин, многие были бы намного лучше меня. Я потеряла смысл жизни, ведь в чем смысл, если у меня не получается хорошо выполнять то, что я люблю делать. Уйду в декрет с горя, пусть меня раздавят кастрюли и пеленки, раз я не могу быть программистом, мое место на кухне.

    • stokito

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

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

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

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

      Это одна из причин почему не так много народу могут работать в этой области. Это психологически огрооооомный такой груз.
      И кстати пол тут не причём практически. Хотя нам, пацанам полегче потому что нас растят в жёсткой конкуренции, соревнованиях, драках, отказов от женщин и для нас проигрывать не сдаваться и продолжать привычное дело.
      А вот если бы я был женщиной я бы тоже наверное думал «а ну это просто потому что я баба». Но мне не повезло, и свою тупость своим полом я не могу оправдать 😦

      А в декрет уходить конечно стоит — радость материнства это то что наполняет жизнь смыслом.

      Вообще не постесняйтесь и напишите мне в скайп stokito, может я смогу проконсультировать и посоветовать как выйти из тупика.

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