общение, legacy и разработка на заказ
Винтовка — это праздник «Остров мёртвых» Арнольд Бёклин .
Now playing CyberMafia: Hard Code
TL;DR: Иногда самый важный навык разработчика — это не техническое мастерство, а умение эффективно общаться с людьми. Технические проблемы часто являются лишь симптомами человеческих действий, и их решение требует ведения диалога с коллегами и заказчиками, а не просто отладки кода.
Your weapon is a customized text editor. Your enemy is the silent, creeping entropy of legacy systems. A client’s digital storefront—a patched-together monument of deprecated frameworks—is hemorrhaging ball of worms. The cause? Unknown. The budget for a real fix? Zero. The plea? “It worked yesterday.” You take the job. The abyss stares back.
Close your eyes, look deep in your soul
Step outside yourself and let your mind go
Frozen eyes stare deep in your mind as you die
Close your eyes and forget your name
Step outside yourself and let your thoughts drain
As you go insane, go insane
Slayer: Seasons in the abyss
Трепетный внутренний мир
The pathological love for new projects, clean slates, and the scent of fresh frameworks. • A passionate devaluation of others’ labor coupled with a desire to create one’s own beautiful chaos and technical debt. Присмотритесь к коллегам, загляните внутрь себя, прислушайтесь, понаблюдайте. Если вы работаете в IT, изучаете языки программирования или что-то кодите для себя, вам знакомо ощущение, общее для индустрии: патологическое стремление к новизне и страстное, почти ритуальное, обесценивание чужого труда.
Все мы любим делать что-то с самого начала, боязнь чистой страницы — это не про нас, мы любим насрать в середине комнаты ощущение прямой чистой дороги, разворачивающейся перед нами и манящей за горизонт. Каждый хочет прийти в свеженький проект с запахом свободы и новых фреймворков, чтобы воодушевлённо заполнить его хаосом технического долга в соответствии со своими представлениями о прекрасном, в полной мере пользуясь свободой воли.
The “Smart” Facade: The industry’s obsession with theoretical knowledge (algorithms, TDD, CI/CD, design patterns) that often feels disconnected from reality.
На курсах, в книжках и видео про разработку рассказывают что надо знать теорию, алгоритм Дейкстры, задачу об укладывании рюкзака, «O большое», стопятьсот сортировок, TDD. Докеры и кубернетисы, нормализация, CI/CD, DevEx, код-ревью, интеграционное тестирование. Фреймворки такие и сякие, мета-фреймворки и фреймворки для тестирования, PEP8, рекурсии и вред вложенных циклов, D.R.I. DRY, KISS и т.д.
Сидят такие, шевелят бровями многозначительно и говорят на умном.
Pig faced reality
The Inevitability of Legacy: As soon as code is written, it begins to accumulate technical debt. This is not an anomaly but the “natural state of digital matter.” • Survival of the “Ugly”: A key, counter-intuitive insight is that these messy, poorly-architected systems often not only survive for years but are also profitable. Profit is born not in spite of the chaos, but within it. • Vivid Examples of Chaos Когда помимо разработки с нуля берёшься за поддержку или помощь в мелких задачках на проектах, которые за две копейки двенадцать лет назад разработал вскорости пропавший без вести студент-алкоголик (или какая-нибудь известная студия), сталкиваешься с удивительными моментами.
Продираешься сквозь джунгли искалеченных художниками с жёсткими дедлайнами open-source систем управления (если что-то проприетарное, то там может быть и ещё страшнее), вороньи гнёзда библиотек, использующихся не по назначению, скомканные спагетти надёрганного с форумов и Stack Overflow кода как-то приспособленного для выполнения задач, смысла в которых нет уже много лет, восхитительные проверки в стиле «если дата новости больше такой-то then return false»), хранение всего на свете в одном json-поле etc ad nauseum.
Удивление охватывает когда понимаешь что вся эта конструкция успешно эволюционирует годами и, что контринтуитивно, приносит прибыль тем, кто такие системы эксплуатирует (и, наверное, тем, кто такие системы разрабатывает).
За годы в индустрии успеваешь:
- увидеть проекты на Laravel, которые зачем-то одновременно используют MongoDB, SQLite и MySQL (при этом без единой миграции и для сайтика, который продаёт один товар в месяц);
- наблюдать сравнительно большие объёмы кода на Django, где всё лежит в одной папке и многие десятки моделей описаны в одном единственном файле, а пути настроены из двадцати разных мест, и где-то внутри там лежит блог, сделанный (разумеется) на WordPress такой версии, которая была актуальна пару зимних олимпийских игр назад;
- остекленевшими от ужаса глазами наблюдать каталог товаров, который экспортируется в dbf чем-то, до сих пор работающем под DOS (что потом ты своими руками берёшь, переводишь в UTF->CSV->SQL и тоже куда-то в другое легаси вливаешь с регулярностью автоматичненько).
И это не говоря уже о пресловутом «битриксе в докере». Всё это реальные примеры из практики. Можно долго перечислять курьёзы типа сайтов, многократно повторённых сначала на нескольких версиях того же Wordpress или Joomla, потом на Drupal, потом на чём-нибудь самописном или покупном, потом на Django или Fastapi, а затем — в виде отдельного фронтенда на Nuxt, который отправляет почту и логирует заказы через кусочек позпрошлой версии проекта на базе Laravel.
Вдумчивый читатель может задаться вопросом: предположим, что я опытный и сразу всё делаю на чистовик и без ошибок и настолько надменен, что сам себе верю. Как я могу столкнуться с таким проектом?
Однажды тебе пишут и просят посмотреть что-то, что ты когда-то помог починить, или, наоборот, что-то, что ты не делал, но пожалуйста, очень надо, бюджета на рефакторинг нет: «всё работало ещё вчера, наверняка какая-то мелочь, ерунда, запятую пропустили, посмотри, пожалуйста…» Если ты pussyboy разумный трус или просто не хочешь жечь нервы за копейки, то скажи, что у тебя завтра зачёт по алгебре дедлайн и БЕГN!!1
Всё же, если ценно не только чтобы буквы на экране красиво светились, но и чтобы отношения с заказчиком укреплялись, то и решать надо не задачу с кодом, а задачу с людьми — словами через рот.
Мир состоит из легаси, как только ты что-то сделал, ты сразу породил технический долг. С этим ничего не поделаешь, с этим надо жить и комфортно взаимодействовать.
Чтобы не тонуть в море бессмысленности, которая сделана неизвестно кем, но как-то работает и приносит реальную прибыль, важно уметь общаться с заказчиком, коллегами, подрядчиками и всеми остальными стейк-холдерами. 100% кто-то что-то накрутил и не признается никогда, поэтому лучше сразу сравните два бэкапа чтобы понять что именно добавилось/изменилось. Если сравнить нельзя, вежливо и незаметно опросите всех, у кого есть доступ к базе данных, коду или административному интерфейсу. «Да, я понимаю, что вы ничего не трогали, но может быть, вы что-то нажали, а потом вернули всё как было?» «Ну конечно, вы никаких изменений не вносили, это само собой, но вдруг, поставили какой-нибудь модуль, или что-то в настройках посмотрели» Иногда пара таких вопросов могут спасти вам пару дней, а иногда пару недель.
Легаси — не ошибка системы, а её конечная форма. Естественное состояние цифровой материи — расползаться по швам, обрастая костылями, пока не превратится в тёмный, неподвижный лес, где обитают лишь призраки прежних намерений. Ты не чинишь, ты ведёшь раскопки: каждая строчка — это артефакт, каждый хак — свидетельство чьей-то паники. Прибыль рождается не вопреки хаосу, а прямо внутри него. Никто ничего не трогал. Всё работало ещё вчера. Самое время понять, что главный инструмент в сложившейся ситуации — не прокачанный текстовый редактор, а тугая струя вежливых вопросов и контакты людей, по которым её можно выпустить.
Now playing the Exploited: Chaos is my life
P.S. Легаси — это не баг, это фича. Фича под названием «реальность».