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

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

Затягиваясь сигареткой, начальник рассказал страшную историю о том как предыдущий ведущий программист, тянувший на себе весь основной софт компании (кстати в Москве наша компания была практически монополистом в своей области) уволился, и что если срочно не подхватить разработку стратегически важных софтин, то конкуренты "сожгут наши дома, изнасилуют наших женщин и заберут наши драгоценности" (цэ). Этот рассказ перемежался с заявлениями, что вся страна сейчас смотрит на меня и что с деньгами меня не обидят. Я тогда задумчиво смотрел на заснеженную Москву и рисовал в воображении свои достаточно радужные перспективы. Много позже выяснилось, что страна не только смотрит с нескрываемым презрением и ненавистью, но и с удовольствием кидает в меня камни. Пока же все выглядело весьма радужно....

Иллюзии развеялись, когда увольнявшийся лид отработал последние две недели, а мне предложили сделать первую доработку. Доработка сводилась к изменению нескольких символов в маске, по которой отсеиваются файлы. Эта доработка заняла один день. Тогда я списал это на полное (действительно полное) отсутствие комментариев, незнание системы и чудовищный код этой самой системы. Со временем эта ситуация нисколько не изменилась. Процесс внесения доработки состоял из двух частей - медитация над кодом, расширение сознания (на это уходило до 99% всего времени, затрачиваемого на доработки) и последующее прицельное метание костыля. Или костылька. Да, кстати, любая доработка была либо костыльком, либо костылём, либо костылищем. Доработка никогда не была просто доработкой, это всегда было выдирание зубов через задний проход. Причем примеряться к зубу приходилось несколько часов, а выдирание занимало несколько минут. Однако такие темпы оказались неприемлимы. Всего за несколько недель сотрудники суппорта и отдела тестирования протоптали дорожку к моему рабочему месту. Протерли ковролин до самого бетона. Им пришлось ходить пешком, не потому что со мной было приятно беседовать или потому что они прониклись ко мне симпатией, а потому что я очень скоро просто перестал брать трубку, т.к. все время уходило на правку ошибок. Процесс внесения доработок был похож на битву с гидрой, когда я лихим ударом забарывал один баг, а на их месте появлялись ещё два.

Чем больше я влезал во внутренности этой системы, тем больше я понимал, что её понять невозможно. Все благие начинания были загублены чудовищной реализацией. Однажды я прочитал эту статью и сразу же по памяти назвал все места с тем или иным антипаттерном. Я все перечисленные антипаттерны нашел в своем проекте. Но это меня уже нисколько не удивило, т.к. на языке давно вертелось определение поддерживаемой системы. К лету я уже мог весьма точно описать архитектуру одной емкой фразой - куча говна. Фактически вся система представляла из себя один большой God Object, превращенный ужасной реализацией в кучу говна. Позднее я даже нашел в соответствующей литературе подходящий антипаттерн. Спасала положение одна недокументированная фича этого антипаттерна - в любой момент, в любое место программы можно прикрутить любую функциональность. Точнее не прикрутить а насрать. Рядом насрать новую функциональность. Т.к. любая попытка сделать что-то по-нормальному потерпит полное фиаско независимо от уровня программиста. Получался бесконечный (хоть и и с душком) ресурс подверженности изменениям. На западе лучшие умы ломают головы над тем как сделать программы более расширяемыми, модульными, дешевыми для внесения изменений. В России давно решили эту проблему. Не надо никаких знаний и паттернов. Даже высшего образования зачастую не требуется. Надо просто навалить большую кучу г... кхе-кхе кода. И вуаля! Его можно расширять в любом направлении. Правда ситуацию портит один нерешённый вопрос - как то что мы нарасширяли поддерживать? Однако лучшие умы России уже бьются над решением этой проблемы. Толпы быдлокодеров обязательно должны найти ответ на этот вопрос. Придется разбираться самостоятельно, Запад нам не помощник, т.к. про такие проблемы там никто не осведомлен. Да, мы всегда шли своим путём. Скоро должны подключиться и хохлокодеры из Вiльнiй Украiны. Все вместе точно сдюжат. Или забьют и пойдут к индусам клянчить на аутсорс проекты, которые последним зааутсорсили буржуины.

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

PS

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

Добавить комментарий


Защитный код
Обновить