"Переписать все к х#ям" или ад рефакторинга
Прочтите эту статью до того как начнете переписывать ваш проект с нуля. Возможно сие спасет вашу жопу.
Так бывает, что посещает «души волнение» желание распилить тупой пилой некоторые проекты, вместе с авторами — настолько там все внутри косо и криво.
Да, это п#здец разумная причина для рефакторинга.
Но помимо случаев лечения «пилой и динамитом», бывает и другое:
Проект нормальный, код чистый простой и понятный. Но не модный.
Не на том языке, не на нужном фреймворке, не на модных в этом сезоне технологиях. «Морально устарел», «дедовское легаси», «старческий кринж» — вот это все. Зумеры пугаются, одним словом.
И если вдруг в руководстве модники победят инженеров — начнется разнос и распил вполне живого и успешного проекта.
Да, так тоже бывает когда есть много денег.
Ниже я опишу несколько эпических примеров «полного переписывания с нуля», когда «хотели как лучше» и слили огромный объем работы в никуда.
Поскольку все почему-то считают программистов продвинутыми любителями технологий будущего и новинок вообще — примеры ниже будут только из инструментов для них.
Чтобы вы сами поняли насколько все плохо в мире обычного софта для «массового телезрителя», если даже программисты не очень хотят иметь дело с новым говном.
Perl 6 (Raku)
The Raku design process was first announced on 19 July 2000, on the fourth day of that year's Perl Conference,[10] by Larry Wall in his State of the Onion 2000 talk.[11]
Я познакомился с перлом где-то в 2004м и это была все та же 5я версия, которая продолжается до сих пор:
Perl 5.6 was released on March 22, 2000.
Сейчас на дворе 2023й, прошло двадцать три года — ну и где же мой 6й Перл? Где-где, в земле:
As of 2017, only the Rakudo implementation is under active development. No implementation will be designated as the official Raku implementation; rather, "Raku is anything that passes the official test suite."[21]
Если бы Perl 6 был живым человеком — он бы уже закончил ВУЗ и вышел на первую работу, представляете?
Круче только GNU Hurd, но там хоть результаты есть.
А что же случилось со «старым» 5м перлом?
Похоронная команда к нему так и не пришла, так что он живее всех живых:
5.36.0[2] / 28 May 2022; 7 months ago 5.34.1[3] / 13 March 2022; 10 months ago
Python 3
Главный конкурент Перла, продажная шлюха девка датасайентистов, услада админов и объект кучи шуток про «удушение одноглазых змей» — точно также не избежал заразы «переписывания с нуля».
Python 2.0 was released on 16 October 2000, with many major new features.[48]
Python 3.0, released on 3 December 2008
Что это означает? Что змеюк в декабре 2008го стало две и развивать пришлось обе, параллельно:
Releases of Python 3 include the 2to3
utility, which automates the translation of Python 2 code to Python 3
Да, они пытались. Нет не помогло:
Python 2.7's end-of-life was initially set for 2015, then postponed to 2020 out of concern that a large body of existing code could not easily be forward-ported to Python 3.[51]
Собственно я сам проходил весь этот процесс миграции петоновского проекта с 2.х на 3.х. Поэтому больше не верю в людей в обратную совместимость легкими средствами.
12 лет параллельной разработки, с поддержкой «устаревшей» версии, патчами и бекпортами.
Официально у команды разработки петона все же получилось:
2.7 версия действительно больше не поддерживается, скачать с сайта по большой кнопке не дают и везде пишут страшное слово «Deprecated».
Но вот в репозиториях 2.7 все также есть:
А значит 2.7 петон на 2023й год все также собирают, проверяют и выкладывают. Причем делают это официально, с официальной поддержкой.
Как то так наверное и выглядит ад для программистов:
вечное переписывание с нуля, с параллельным бекпортом фич в текущую версию.
Java 1.8 и все все все
Жаба — уникальный язык, единственный язык программирования, который с самого начала был спроектирован, а не просто написан.
Как раз где-то до 1.8 версии Java считалась архитектурным шедевром, примером и эталоном ПО как архитектурной концепции.
А должность «Software Architect» долгое время подразумевала именно джаву и решения на ней:
Слышим слово «паттерн» — подразумеваем джаву.
Вообщем когда-то это было не про "batteries included" а про серьезное проектирование и архитектуру.
Что случилось
Случилась гонка вооружений с Microsoft (с дотнетом), ради места на Олимпе второй ступеньке у трона Си, рядом с плюсами конечно. Затем еще случилась покупка-продажа Sun-Oracle и последующее изменение повестки.
На сегодня дела обстоят как-то так.
Вообщем начиная с версии 1.8 решилизабитьне акцентировать внимание на обратную совместимость, сменить номера версий и делать выпуски раз в полгода с каким-то диким количеством нового сахарного синтаксиса.
А очень многое из внутренних частей подверглось заразе переписывания с нуля.
до версии 1.8 включительно, джависты на память различали фичи каждой версии. Когда именно были добавлены генерики или «try-with-resources» знали практически все и спокойно рассказывали на собеседованиях.
С 1.8 и поныне — не знает никто вообще. Один сплошной темный лес.
Вообщем теперь история версий и заметок к релизам в джаве стали напоминать новую часть «Игры Престолов» и конца и края этому нет.
Java 8 was released on March 18, 2014,[173]
но жестокая реальность опять обломала рога фантазерам:
Java SE 8 Update 351[255] 2022-10-18 New features, changes, 95 bug fixes.[256]
Java SE 8 has gone through the End of Public Updates process for legacy releases. Oracle will continue to provide free public updates and auto updates of Java SE 8 indefinitely for Personal, Development and other Users via java.com.
Вообщем «они просто хотели чтобы их любили»:
8 лет непрерывной разработки старой версии, чехарда с новыми версиями и зоопарк релизов с разными сроками сопровождения.
А все из-за невыносимого желания «переписать все с нуля» и сделать лучше.
Думаю никого не удивит что ИТ-сообщество неохотно приняло все эти пляски с бубном крупные изменения, многие вендоры не торопились поддерживать новые версии джавы, еще большие — забили на сертификацию.
Что вообщем-то пошатнуло популярность языка.
Конечно я не собираюсь присоединяться к упадническим настроениям и рассказывать тут что "жаба умерла", все далеко не так плохо и печально.
малосмысленная попытка «переписать все с нуля» и «сделать еще лучше» — как минимум пошатнула репутацию проекта. Внесла смуту в головы клиентов и заставила очень многих сомневаться в своем светлом будущем.
Печальные выводы
Я специально взял примеры из средств разработки — из самых наивозможно высокотехнологичных программных продуктов для инженеров:
Нет софта сложнее чем компилятор.
Чтобы показать, чего может стоить провальная попытка «переписать все с нуля» даже в стерильных условиях бесконечных ресурсов и максимальной лояльности.
Но если что — в сети полно подобных статей про более близкие к обывателю проекты.
вас могут не понять даже в суперлояльной аудитории айтишных фанатиков, которые на ваш продуктдрочатмолятся, еще вчера без вопросов принимали уринотерапию от вашей дорогущей техподдержи и ждали апдейтов сильнее чем выхода новой серии любимого ТВ-сериала.
А обосраться с переписыванием и загубить успешный продукт может даже огромная корпорация с бесконечным бюджетом.
Вообщем я лично бы многократно подумал, прежде чем пытаться «переписать с нуля» успешный продукт:
стабильность и репутация — не те вещи, которыми стоит разбрасываться в наш век.