Стереть и переписать все нафиг!

Какая традиционная первая реакция на явно старомодный или просто дрянной код или проектное решение? «Стереть к чертовой матери и написать заново на [подставить любимый язык]».

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

Вот и возникает волшебное слово «legacy» код.

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

Ну и что, что Фортран с common-переменными повсюду или С, ну что, что там код 80-х годов с функциями на десятки экранов без каких-либо зачатков unit-тестирования, и потрогать этот код просто страшно. Но трогать его не надо, а надо понять интерфейс и изолировать его.

Лично у меня подобное «прозрение» случилось только недавно, примерно аналогично как с unit-тестированием. Слово «legacy» код не должно синонимом «стереть и переписать все нафиг!», а должно быть знаком того, что надо сделать взвешенную оценку поддержки старого «тлеющего» кода против новой разработки. Любой код начинает тлеть сразу поле релиза, но когда он вам уже достался тлеющим – это другая история.

А корень парадокса в том, что пользователи не хотят вашу новую версию, переписанную с нуля на модном языке Х, они хотят проверенную версию, что далеко не всегда означает одно и то же.

Как пример, банки – это одни из консервативнейших потребителей программных продуктов. И их можно понять – фаза тестирования перед внедрением на боевую обычно длится месяцами и стоит приличных денег, а уж после того, как системы запущена, никто не будет ничего менять без веской причины. А слова «мы тут все переписали заново, пожалуйста, поставьте…» обычно игнорируются на слове «все».

В общем, если хотите рассматривать создание программных продуктов не просто как написание «идеального кода», а как бизнес, работа со старым кодом – это один из навыков, который придется освоить.


Оригинальный пост | Disclaimer

Комментарии