Pull to refresh

Comments 27

Большое спасибо.
Надо было назвать «Мотивирующие банальности про Legacy». Действительно мотивируют.
Легаси отличается от говнокода тем, что «работает — не трогай», и тем что легаси уже перенесло несколько итераций спешных переделок по измененным требованиям.
Очень условно.
А сколько именно итераций должно быть? 1 итерация и будет легаси, или надо 2? А если было 10 итераций, но все переделки не были спешные, а в обычном рабочем процессе, то не легаси? Это субъективное восприятие.
Дело, конечно, не в количестве итераций как таковых, и даже не в спешности — а в том, было ли время ликвидировать технический долг.
Технический долг = говнокод. А дальше банальность №5.
Фактически достаточно было написать «банальность №5» и всё. Остальное — пережёвывание того же самого, только с разных сторон.
Список банальностей собран на основе обратной связи от разработчиков, когда они аргументируют свое нежелание работать с легаси-кодом, вроде «это не интересно, там нечему научиться и т.п.». Так что полагаю что было бы недостаточно.
у нас сотни мегабайт кода, почти никакого ООП и функциональное программирование

Вы хотели сказать "… и структурное программирование"? В статьях, претендующих на ломание устоев, такие ошибки недопустимы!

Имхо, выделенные жирным «банальности» выглядят как заголовки. Лучше было бы или расположить их перед соответствующими рассуждениями, или пометить чем-то вроде «Резюме: бла-бла-бла».

Короче, лично мне кажется, что эта статья олицетворяет legacy-код (и да, к ней же самой применимы описанные в ней же принципы) :)
Скорее не функциональное и не структурное, а процедурное программирование.
Проблема не в легаси, а в кривой обучения. Когда пишешь сам с нуля, то постепенно понимаешь что и как. А вот с легаси надо сразу охватить кучу вещей, про которые знает только прошлый автор. Еще хуже, когда нельзя улучшать чужой легаси код, и тебя заставляют писать плохо всегда.
Никогда не понимал, что плохого в легаси. Легаси-проект, который надо дорабатывать, обладает целым рядом важных свойств, главное из которых — он действительно кому-то нужен (а иначе его бы не дорабатывали годами). У него есть живые пользователи. Ваш труд не пропадёт зря. Более того, код легаси проекта — это рабочий код. Сколько бы там теоретики программирования не разливались соловьями о паттернах и архитектурах — они не стоят ничего, пока являются воздушными замками, а код легаси проекта — вот он, бежит в железе, перелопачивает боевую базу, держит нагрузку в N соединений в секунду и т.д.
Я бы предложил разделить legacy на живой и мёртвый.
Вы говорите о живом, который работает, выполняет полезное действие.
А есть мёртвый, который никогда толком не работал, сделан по мутному ТЗ и вот тебе нужно его переделывать. В гос. и учебных учреждениях такое часто бывает.
С первым работать можно и даже интересно, а со вторым — душевные страдания.
У каждого свое понимание с каким проектом хочется работать. Но как водится, legacy это страдание, что бы вам не говорили.
Для меня legacy — это что-то вроде археологических раскопок. Можно долго скучать, а потом найти что-то интересное. И вот такие неожиданности и подогревают интерес к legacy коду.
Согласен, из другой области человеческой деятельности даже трудно подобрать аналог этому.
Статья — сплошной ППКС, можно разбирать на цитаты.
Задумаетесь, и поймете, что знаете и более оптимальное решение, просто потому что неоптимальное за вас уже написали, и вы увидели его в действии, и теперь то вы знаете, как сделать лучше.
Апплодирую стоя!
Случалось ли с вами, что открывая проект за давностью нескольких лет, вы видите код и чувствуете легкое дежа-вю? Как будто из тумана постепенно начинают проявляться очертания чего-то до боли знакомого, почти родного.
Я недавно нашел старинные бэкапы своего копьютера, когда еще учился в школе и писал что-то на Дельфи. Заглянул в исходники, и правда, некоторые части написаны просто гениально и даже сейчас не сразу понимаешь как оно все работает. Отличное чувство.

Обожаю прикасаться к чему-то законсервированному старому.
Возможно кто-то в душе археолог и историк, а кто-то изобретатель. Кто-то обладает усидчивостью необходимой для анализа, разбора и улучшения не новой, но востребованной программы, а есть другая крайность — у кого-то хватает терпения только свой код терпеть :) Все мы разные.
Любой вчерашний суперпроект становится legacy. А любой долгоживущий (даже свой личный) проект обрастает костылями и через некоторое время даже себе кажется написанным менее красиво, чем хотелось бы — а порой и менее искусно, чем сам же сейчас можешь.

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

Только в том взросление (в любом деле) и состоит, что каждый раз (сегодня, завтра, да и вчера) приходится иметь дело с тем, что есть, а не с тем, что хочется. И мастерство есть способность улучшать шаг за шагом.
Самое сложное в работе с легаси — отбиться от желания все немедленно переписать и попыток назвать авторов какого-то куска кода идиотами. Я, конечно, не беру во внимание какой-то совсем уж говнокод. У меня было достаточно случаев, когда переписывался какой-нибудь казалось бы костыль, но потом, со временем, приходило понимание, почему этот участок был написан именно так, а не иначе. Он возвращался на свое место с масштабным комментарием, завещаниям потомкам, чтобы они не бросались сломя голову «делать красиво». А если есть возможность спросить что-нибудь у авторов, так это вообще прекрасно: попадались моменты кода с очень интересной историей. Всегда полезно помнить, что, возможно, какой-то кусок написан именно так неспроста.

Ну и в конце концов, когда код пишется не по классическому «водопаду», а итеративно, с уточняющимися требованиями и приходящими фичами, то результат всегда отличается от начального ТЗ. Легко спроектировать уже реализованый проект, но не так просто развивать его долгое время.
«Legacy» это не всегда что-то работающее уже давно и от того интересное само по себе (тут я поддерживаю автора и комментаторов), но очень часто под этот термин попадет никогда не выходивший в паблик код «индусов» (я это как собирательное понятие использую), которые вымотали бюджет заказчика, сказали ему же, что там готово все на 95% и осталось только прикрутить логин — вот за такое браться не стоит априори, как мне кажется.

Ну и зависит от вида работ — если это старый проект, но который мы развиваем — редизайн, новый функционал и т.д. — это может быть очень интересно. А если это поддержка — неспешный фикс багов, переименование кнопок под новое полиси из отдела маркетинга — то такое может быть болотом, в котором какое-то время будет полезно поработать начинающим, а для остальных — тоска и уныние.
У меня сейчас идет проект, который был именно legacy — да, развивать интересно, еще интереснее выкидывать куски г**кода (торопился человек — учился языку) и делать правильно вместо этих кусков.

У меня за 2 года весь legacy пропал
Sign up to leave a comment.

Articles