Знаете, для первой серии постов я долго выбирал тему, которая будет интересна максимально большому количеству людей. Поэтому главный критерий был примерно таков: мой опыт и мои знания в этой теме должны быть минимально искажены моим стеком технологий. Так что "легаси" (вы уж извините, я иногда, когда очень лень переключать раскладку, буду писать это слово по-русски) - оказалось идеальным вариантом. Да и близким каждому разработчику, так что вперёд, в мир наследуемых систем, кривой архитектуры и говнокода.
мммм... Legacy... Много Вы знаете людей, которые отказались от наследства? Навряд ли. Так почему подавляющее большинство разрабов относится к легаси, как к кредитам почившего бати-лудомана? Большинство настолько подавляющее, что сами термины "легаси-код" и "легаси-система" давно и прочно имеют негативную оценку. Всё просто: нам нравится работать с тем, что мы создали сами. Вот этими пальчиками клац-клац по клавиатуре.
С системами, которые мы знаем от и до.
С кодом, который мы видели и читали много раз.
С архитектурой, которую мы сами проектировали.
И в оправдание этому мы придумали страшные метрики:
🔘трудноподдерживаемая
🔘устаревшая
🔘не имеющая достаточной документации
Чувствуете это на языке? Каждый из этих пунктов можно закончить словосочетанием "для нас". Пожалуй единственное объяснение через метрику, лежащую вне субъективного, ввёл Физерс в своей книге (да блять, прикиньте, про это написана книга, причем не одна) "Эффективная работа с устаревшим кодом", определив, собственно, легаси как
код, недостаточно покрытый тестами.
Вот это объективно: мы в незнакомой системе можем поменять что-то, не зная к чему это приведёт, и, не имея средств этого проверить, вкупе со всеми остальными факторами, это приведет к нарушению работы системы. И в такой ситуации будет охренительно хорошо, если система где-то упадет в ошибку, а не продолжит тихо и спокойно делать свое дело, но теперь не правильно.
Вы легко можете найти тексты про legacy с заголовками из различных вариаций на тему "казнить нельзя помиловать", я же выбрал отсылку к Эли Лопиану (гендир Typemock - разработчика инструментов для тестирования), который описал legacy как
код, который разработчики боятся менять
Нет. Не боимся. Жаждем. Где ставить запятую в знаменитой амфиболии - зависит не всегда от разработчика. А вот желание что-то переписать, будем честны - присутствует всегда.
И да, я сознательно подменил смысл, заключенный в слове "менять", а вы даже не заметили. Понятно, что этот пост написан с изрядной долей преувеличения и упрощения. Я не думаю, что необходимо разжевывать каждому понятие legacy, как это делали до меня куча авторов с явно более крутой экспертизой. Я всего лишь хочу посветить фонариком в те места, куда мы не часто заглядываем. Привыкайте, это обычный для меня литературный прием. Имею блять право, не учебник пишу. А суть применения этого приема сейчас - настроить Вас на то, что legacy - не есть само собой разумеющееся зло. Нет, когда его много - это тоже не есть хорошо. Просто давайте попробуем в дальнейшем понять, мы переписываем систему с нуля - и это обоснованное требование бизнес-процесса или все таки просто нам так хочется. И какие есть альтернативы.
#медведьразмышляет #legacy
