Один из лидеров IT-сообщества рассказал о легаси-системах

Сегодня лесаги-код — животрепещущая в IT-мире тема. Что это, какое место занимает в индустрии, как с ним работать и какие вызовы он бросает лучшим разработчикам из лучших? В этих вопросах нам помог разобраться один из лидеров IT-сообщества Владислав Авдеев, за плечами которого более 10 лет опыта в финтехе, космической индустрии и науке.

— Что представляет из себя "легаси" и как вы его видите?

— Индустрия довольно четко определяет основные критерии легаси: устаревший технологический стэк, несоответствие легаси современным требованиям, устаревшие подходы к разработке ПО, плохая или отсутствующая документация.

— Но возникает и ряд философских вопросов: когда именно современный программный продукт становится легаси, может через какое-то количество лет? Если IT-система грамотно написана на старом, не поддерживаемом сейчас языке программирования, но удовлетворяет всем требованиям — это легаси? А если завтра группа хакеров найдет серьезную уязвимость в последней версии операционной системы, превратится ли ОС за один день в легаси из-за несоответствия требованиям безопасности?

— Я считаю, что легаси — это процесс, которому подвержено любое ПО начиная с самого релиза, а иногда еще на этапе разработки. Поэтому задачи, связанные с легаси, очень разнообразны: от "актуализировать несколько строк кода, т. к. обновился фреймворк" до "последний раз программист был здесь 20 лет назад".

— У легаси действительно своя философия! Как часто в своей работе вы сталкиваетесь с ним?

— В той или иной степени — практически на каждом крупном проекте, поскольку я часто глубоко погружен во все аспекты разработки. Периодически у меня бывают очень крупные проекты, цель которых — или полностью переписать важную для бизнеса легаси-систему, или сделать рефакторинг — актуализировать ее.

Как правило такие проекты одни из самых сложных. Иногда приходится иметь дело с древним кодом на устаревших 30 лет назад языках, который, судя по объему, вычисляет инфляционную модель вселенной. Тогда приходится собирать команду опытных разработчиков. Но любые проблемы, связанные с легаси, решаемы при должном подходе. Я считаю, что серьезный успешный опыт работы с легаси — это отличительная черта senior-разработчика.

— Правда ли, что разработчики стараются избегать работы, связанной с легаси и почему? Избегаете ли вы такие проекты?

— Так же, как вы предпочитаете работать на современном ПК, так и разработчики предпочитают работать с современным стеком. Кроме того, работа с легаси — это серьезный челлендж, который требует особых навыков. Это основные причины, которые могут вызывать отторжение у разработчиков. При этом сложные легаси-проекты часто по силам только очень незаурядным специалистам, но такие профессионалы могут позволить себе выбирать среди множества других проектов и не часто останавливаются на легаси. В то время как junior, middle и даже некоторые senior-разработчики не имеют нужных знаний и опыта.

Что касается меня — я не избегаю проектов, связанных с легаси, но подхожу к ним избирательно: некоторые из них могут бросить хороший вызов моему опыту или же дать возможность реализовать инновационный подход или идею, которые я давно хотел воплотить. А избегать стоит проекты с неопределенными требованиями и проекты, нарушающие нормы этики, но это никак не связано с как таковым легаси.

— Чем же отличается процесс разработки применительно к легаси и какие методы вы используете?

— Глобально любой процесс разработки ПО итеративен и выглядит похоже, но в каждом направлении есть особенности. Работу с легаси предваряет тщательный анализ кодовой базы, а также сбор имеющейся документации и её дополнение. В некоторых случаях часть разработки может вестись на языке, используемом легаси-системой: например, для покрытия ее тестами, если по какой-то причине другие варианты не подходят. Многое зависит и от задачи: полностью переписать легаси всегда сложнее, но в ряде случаев — это наиболее правильное решение, нежели рефакторинг.

Говоря о методах, я предпочитаю современные автоматизированные подходы там, где это возможно. Чаще всего под каждый крупный легаси-проект я разрабатываю отдельные инструменты автоанализа кодовой базы, которые представляют из себя парсеры и наборы скриптов для составления схематичного представления о проекте, отдельных его частях и зависимости этих частей друг от друга. Такой же подход я практикую для переписывания легаси, но здесь он выглядит на порядок сложнее, т. к. речь фактически о разработке трансляторов кода с одного языка программирования на другой. Создание таких инструментов для автоматизации требует существенного времени, но такой подход в разы ускоряет работу над большим проектом. Кроме того, такая работа интеллектуальна и увлекательна. В дополнение, я считаю применение AI-технологий наиболее перспективным подходом в таких задачах и, при случае, экспериментирую с обучением нейросетевых моделей. Но у этого подхода все еще остаются нерешенные проблемы, которые делают его малоэффективным.

— Насколько плох ручной подход и почему нельзя использовать какие-то готовые решения или опыт с других проектов?

— Ручной подход возможен и, к сожалению, к нему все еще часто прибегают — это тоже причина неприятия легаси разработчиками. В небольшой степени ручные подходы неизбежны независимо от применяемых методов, но если говорить о моих самых "тяжелых" легаси-проектах на 200-250 тысяч строк кода, то полностью ручная работа заняла бы долгие месяцы и ни один грамотный специалист просто не взялся бы делать это таким образом. Это противоречит самой сути программирования: всё, что может быть автоматизировано, должно быть автоматизировано.

Существуют, разумеется, и готовые трансляторы кода, и уже имеющиеся наработки с других проектов. Но всё это редко удается удачно использовать из-за упомянутого разнообразия легаси, который может представлять из себя код, написанный на десятках языков и иметь множество уникальных архитектурных особенностей. Здесь один легаси проект другому — рознь. Это же является одной из причин, по которой и применение нейросетевых технологий пока недостаточно эффективно, поскольку они требуют обширной и, что самое главное, качественной выборки данных, что легаси-код по определению редко может обеспечить.

— Как вы видите будущее легаси кода?

— Насколько быстро развивается индустрия, настолько же быстро она "обрастает" легаси. Но легаси — это не только бремя, но и ценное наследие индустрии. Несмотря на то, что современные подходы к разработке уменьшают его негативное влияние и код сейчас устаревает значительно медленнее, мы не можем легко отбросить это наследие, поскольку во многом оно — основа наших достижений. Мы находим все более эффективные способы работы с легаси, и AI-технологии очень скоро проявят себя и здесь. Легаси — это неизбежный компонент нашей индустрии, и мы учимся извлекать из него уроки, чтобы становиться еще более эффективными и инновационными.