Как стать автором
Обновить

Комментарии 27

Большое спасибо.
Надо было назвать «Мотивирующие банальности про Legacy». Действительно мотивируют.
А мне вспомнилось
Where there's muck, there's brass

Pretty much any job that you can get paid for includes dealing with one gnarly problem.
Отличная попытка, legacy, но нет!
Легаси отличается от говнокода тем, что «работает — не трогай», и тем что легаси уже перенесло несколько итераций спешных переделок по измененным требованиям.
Очень условно.
А сколько именно итераций должно быть? 1 итерация и будет легаси, или надо 2? А если было 10 итераций, но все переделки не были спешные, а в обычном рабочем процессе, то не легаси? Это субъективное восприятие.
Дело, конечно, не в количестве итераций как таковых, и даже не в спешности — а в том, было ли время ликвидировать технический долг.
Технический долг = говнокод. А дальше банальность №5.
Фактически достаточно было написать «банальность №5» и всё. Остальное — пережёвывание того же самого, только с разных сторон.
Список банальностей собран на основе обратной связи от разработчиков, когда они аргументируют свое нежелание работать с легаси-кодом, вроде «это не интересно, там нечему научиться и т.п.». Так что полагаю что было бы недостаточно.
у нас сотни мегабайт кода, почти никакого ООП и функциональное программирование

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

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

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

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

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

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

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

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

У меня за 2 года весь legacy пропал
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации