Ранний доступ: сниженные цены на инструменты до 1 июня 2026. Подробнее

Как я переписывал чужой код, который все боялись трогать

Пока без оценок
Как я переписывал чужой код, который все боялись трогать

Старый скрипт, три автора и ни одного комментария — и мой медленный путь к рабочей версии.

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

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

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

Сопротивление было не от кода — от людей. Бухгалтерия привыкла нажимать одну кнопку и ждать пятнадцать минут. Я ускорил до трёх — они не поверили, перезапустили три раза, получили три копии. Пришлось добавить защиту «уже запущено» и объяснить устно. Склад сказал: «раньше было непонятно, зато своё». Пришлось оставить старый вид выгрузки переключателем на первый месяц.

Как закончилось

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

Я до сих пор не фанат «всё сжечь и написать заново». В малом бизнесе слишком дорого ошибиться в день отчёта. Но фанат оставлять четыре тысячи строк каши тоже нельзя. Золотая середина — медленно, с журналом изменений, с тестовыми прогонами на копии данных, с уважением к тому, что «страшный» файл держал компанию на плаву. Когда меня просят «причесать наследие», я первым делом спрашиваю: кто нажимает кнопку и что для него считается нормой. Без этого любой рефакторинг — красивая ловушка.

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

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

Заказчик просил «чтобы любой отчёт за вечер». Я честно сказал: любой — через два месяца после каталога типовых. Сначала — пять отчётов, которыми пользуются каждую неделю. Остальные — по запросу. Иначе снова получим монстра. Он согласился, хотя вздыхал. Через полгода сам сказал: «Пяти хватает, остальное редко».

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

Были моменты, когда хотелось бросить. Строка 2100, переменная из трёх букв, влияющая на итог по региону. Я час смотрел, потом пошёл гулять, вернулся — нашёл опечатку в названии региона из старого справочника. Радость была тихая, без фанфар. Такие победы в чужом коде — не про героизм, про упрямство.

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

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

Главное, что я вынес: чужой код — это чужая память компании. Трогать память нужно с уважением. Переписывание — не спорт, а ремонт дома, где живут люди. Шумно, долго, зато не выгоняют на улицу в дождь. Если вас просят «причесать наследие», спросите себя: готовы ли вы три месяца быть аккуратным сантехником, а не пиротехником. Я не всегда готов — но после того файла на четыре тысячи строк стараюсь быть.

Была ли статья полезной?

0 комментариев
Войдите или зарегистрируйтесь, чтобы оставить комментарий.
Пока нет комментариев. Будьте первым!