- PVSM.RU - https://www.pvsm.ru -

Технический долг — один из самых популярных сегодня терминов. Люди говорят: «Мы быстро развиваем свой MVP, минимизируя технический долг!» Они говорят о техническом долге, чтобы звучать круто или выделиться.
А я просто смеюсь, ведь всё рано или поздно превращается в технический долг.
Вся моя карьера теперь стала техническим долгом или кодом, который перестали поддерживать.
И если вы не верите, что вся ваша карьера — это технический долг, то, возможно, поймёте это после прочтения статьи. Я расскажу о том, что изменилось за мою двадцатилетнюю карьеру.
Я начал свою карьеру как разработчик на Visual Basic 6. С 1999 по 2003 год я создал множество разных приложений. Думаю, можно с уверенностью сказать, что всё, написанное на Visual Basic 6, по современным стандартам стало техническим долгом или уже давно было заменено. Да здравствует «on error resume next!»
Долгое время я занимался разработкой классических active server pages (ASP). Немного я побыл специалистом по разработке веб-сайтов, работавших в Internet Explorer 6 и Netscape Navigator. И в моём резюме эта информация больше не имеет никакого веса!
Visual Basic, ASP, IE6 и Netscape — это уже давно забытые технологии.
Кроме Visual Basic 6, есть множество языков программирования, которые за двадцать с лишним лет впали в немилость. Есть большая вероятность того, что если вы писали на одном из этих языков, то кто-то уже пытается разобраться, как переписать этот код, потому что для этих языков сложно найти программистов: Perl, Delphi, Fortran, FoxPro, ColdFusion.
Существуют ли всё ещё на них приложения? Да. Можно ли нанять людей, чтобы разрабатывать их? Это сложно. В большинстве случаев, такие компании вынуждены модернизироваться и избавляться от старых приложений.
В начале 2000-х люди думали, что Adobe ColdFusion находится на пике популярности. Помните его небольшой скачок к звёздному статусу?
Ruby on Rails находится в опасности попадания в этот список. Он утерял популярность и для него сложно найти разработчиков. То, что когда-то сделало его уникальным, теперь есть в других языках.
Языки программирования приходят и уходят. Разработчики не хотят осваивать навыки, не имеющие спроса. Вопрос всегда заключается в равновесии спроса и предложения!
Разработчики быстро бегут с тонущего корабля и всегда стремятся указать в своём резюме новую популярную технологию.
Одно из первых моих приложений использовало элементы управления ActiveX в Internet Explorer 6. В то время они требовались для выполнения печати и других небезопасных программных трюков. В те времена PDF были не так распространены, и печать из браузера сама по себе превращалась в отдельный кошмар.
Апплеты Java тоже когда-то были громкой технологией. Они были медленными, а для установки на компьютер подходящей версии Java всегда приходилось потрудиться. Я никогда не забуду кошмаров работы с сетевыми файрволлами, требовавшими апплетов Java. Я не скучаю по этим кошмарам и рад, что они ушли в прошлое.
И, разумеется, все мы помним Macromedia/Adobe Flash! Когда-то он был любимцем всего Интернета. Появлялись бесчисленные игры на Flash, множество ПО создавалось во Flash на ActionScript. Сегодня продукт под названием CheerpX позволяет запускать старые Flash-приложения при помощи WebAssembly.
Microsoft выпустила конкурента Flash под названием Silverlight. На самом деле, это потрясающий фреймворк для разработчиков на C#. Моя компания разработала несколько удивительных продуктов на основе Silverlight.
Но как мы все знаем, Apple покончила с Flash и Silverlight, отказавшись от их поддержки в своих браузерах.
Вот скриншот финансового калькулятора, который мы разрабатывали на Silverlight в VinSolutions более десяти лет назад. Silverlight уже давно в прошлом, и компания переписала весь код на JavaScript, но он по-прежнему такой же крутой, как и старая версия!

В 2004 году я создал мобильное приложение. Это время уже вспоминается с трудом, тогда ещё не существовало ни iPhone, ни Android. Я разработал приложение для инвентаризации автосалонов под КПК Compaq. Оно было написано на C# для .NET Compact Framework для работы в Windows CE.
У этого КПК была камера на один мегапиксель. При облачной погоде, когда не было сильного блеска, фотографии даже получались умеренно ужасными. Как же изменились технологии! В 2005 году это приложение было на передовом рубеже технологий, а теперь давно уже покоится на кладбище.

Swift — ещё один превосходный пример того, как быстро меняются инструменты разработки. После выпуска компанией Apple языка Swift стало сложно найти причины дальше писать на Objective C. Я уверен, что есть случаи, когда он по-прежнему нужен. Но на Swift гораздо проще вести разработку и он стал серьёзным эволюционным шагом вперёд.
Я бы сказал, что все написанные на Objective C приложения, скорее всего, стали теперь техническим долгом.
После написания безумных встроенных скриптов для сборки веб-приложений я с радостью начал использовать новые веб-формы ASP.NET. Их управление на стороне сервера существенно облегчило разработку. Их задача заключалась в том, чтобы максимально упростить разработку веб-приложений на Visual Basic 6. И по большей части это удалось! Можно было создавать многократно используемые компоненты UI на стороне браузера для рендеринга в браузере. Точно так же, как мы это сегодня делаем на стопроцентном JavaScript.
WebForms не были идеальными, но стали существенным улучшением. Они отлично развивались, пока не появился Ruby on Rails и не популяризировал фреймворки MVC (Model-View-Controller) для разработки веб-приложений.
MVC быстро превратили все разработанные нами на WebForms приложения в устаревший код. С уверенностью можно сказать, что всё, написанное на WebForms, превратилось в технический долг. (Однако та же идея возвращается к нам в виде Blazor [1].)
И прежде чем мы успели спохватиться, каждый язык программирования начал поддерживать фреймворки MVC. Мы начали писать всё новое на ASP.NET MVC. Он был везде, в том числе в Django, Laravel, Symfony, Spring и так далее.
Перенесёмся в настоящее: с тех пор MVC вышел из моды. Сегодня всё пишется на React, Angular, Vue и других фреймворках.
А до них у нас были другие Javascript-фреймворки. Наша компания Stackify использовала достаточно популярный фронтенд-фреймворк Knockout.
Помните ли вы хотя бы один из этих фреймворков? Knockout, Ember, Aurelia, Meteor, Backbone, Handlebars…
Если вы работали с какими-то из них, то могу поспорить, что теперь этот код считается техническим долгом и попал в немилость. Первое поколение фронтенд-фреймворков проиграло React и Angular.
В 2015 году на сцену ворвался созданный Google фреймворк Angular. Он быстро стал самым популярным фронтенд-фреймворком.
В 2016 году произошёл крупный апгрейд Angular, который утерял обратную совместимость.
Понимаете, что это значит? Всё, написанное на оригинальной версии, теперь стало техническим долгом. В нашей компании у меня есть проекты на старой версии Angular, которые превратились в крупный технический долг, требующий обновления.
До того, как REST API и JSON стали стандартами де-факто, одной из альтернатив был SOAP [2] (simple object access protocol). Он упрощал вызов веб-сервисов и автоматически кодогенерировал прокси-классы для корректного вызова сервисов. В основном он использовался Windows Communication Framework (WCF) поверх XML.
Он работал потрясающе… до определённого момента. Одна из самых трудных проблем в моей карьере заключалась в том, чтобы понять, как использовать сертификаты безопасности между моей компанией и другим поставщиком по WCF и SOAP. SOAP и WCF давали большие обещания, но со временем их поддержка превращалась в кошмар.
О SOAP и WCF я совершенно не грущу. Microsoft решила больше не поддерживать WCF в .NET Core. Теперь предпочтительны технологии наподобие REST, gRPC и GraphQL. Однако проект сообщества создал CoreWCF [3], чтобы обеспечить его работу.
Со временем типы технологий для вызова веб-сервисов изменились. Старые способы по-прежнему работают, однако большинство разработчиков, скорее всего, предпочтёт отправить их на пенсию.
Ещё одна распространённая проблема заключается в изменениях основных версий языков, будь то Ruby, PHP, .NET или другие. Обычно они требуют больших изменений в коде или даже его переписывания.
Когда вышел .NET Core, он стал более новой, легковесной и быстрой версией .NET, спроектированной для работы в Linux. Простой код на C# портировался на него довольно легко, но в реальных приложениях никто не использует только простой код.
Однако в сложных корпоративных приложениях при движении по пути апгрейда возникает множество потенциальных проблем. Это становится крупным техническим долгом, который необходимо устранить. В противном случае вы окажетесь привязанными к древней версии языка.
Такие апгрейды основных версий со временем становятся большими проектами по устранению технического долга.
Одна из самых больших трудностей нашей компании Stackify заключалась в том, что мы оказались привязаны к старой версии Elasticsearch.
В какой-то момент разработчики этой системы внесли существенные изменения в способ её работы, которые были не полностью обратно совместимы. Мы активно использовали эту систему, и вся работа по апгрейду превратилась в крупномасштабный проект по устранению технического долга.
Нам постоянно приходилось идти против течения, и в результате мы остались далеко позади. Это ещё один пример того, как реальные проекты с техническим долгом могут наносить огромный ущерб компаниям.
Наша компания создавала собственные библиотеки трассировки/профилирования для шести языков программирования. Для их реализации приходилось выполнять невероятный объём работы.
Что ж, теперь появилась OpenTelemetry [4], сделав всю нашу работу бесполезной.
Зачем поддерживать собственную библиотеку, если можно воспользоваться опенсорсным продуктом, ставшим стандартом отрасли? Наша компания постепенно работает над тем, чтобы прекратить поддержку профилировщика .NET, в разработке которого я участвовал.
С течением времени вы видите, как почти всё созданное вами умирает и заменяется по различным причинам. В противном случае ваша работа будет основана на устаревшей технологии.
Множество приложений, которые я создал на ранних этапах моей карьеры, было убито, потому что разрабатывавшие их компании кто-то купил или они решили использовать совершенно другую технологию.
Срок жизни большинства ПО ограничен, и он гораздо меньше, чем вы предполагаете. Весь код постепенно становится техническим долгом, который все хотят переписать более современным образом. Или же существенно меняются потребности бизнеса.
Разумеется, в корпоративном мире выше вероятность того, что какие-то внутренние приложения будут использоваться практически бесконечно. Управляющая железными дорогами компания или банк по сорок лет используют одно и то же ПО, работающее на мейнфреймах.
Я предположу, что WebAssembly постепенно захватит весь современный мир фронтенд-разработки, и мир ПО эволюционным образом превратится в совершенно иной.
При разработке новых проектов людей всегда волнует минимизация технического долга. И я это понимаю. Есть баланс между работающей программой и стремлением к её совершенствованию.
Однако ничто не является техническим долгом только потому, что оно неидеально. Нет ничего идеального. Со временем то, что было идеально сегодня, перестанет им быть в будущем. Учитесь соглашаться на нечто меньше, чем идеал.
Другая сторона технического долга заключается в том, что теперь всё постепенно портится со временем. Или ПО имеет существенные проблемы с апгрейдом до последних версий языка, или технология теряет популярность, потому что появились новые способы реализации. Удачи вам с наймом людей под старые технологические стеки.
Всё со временем превращается в технический долг или проекты клонятся к своему закату. Если вам сильно повезёт, то ваш код выживает достаточно долго, чтобы стать техническим долгом кого-то другого.
По прошествии достаточного количества времени весь ваш код будет удалён.
Автор:
ru_vds
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/385048
Ссылки в тексте:
[1] Blazor: https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor
[2] SOAP: https://en.wikipedia.org/wiki/SOAP
[3] CoreWCF: https://devblogs.microsoft.com/dotnet/corewcf-v1-released/
[4] OpenTelemetry: https://opentelemetry.io/
[5] Image: http://ruvds.com/ru-rub?utm_source=habr&utm_medium=article&utm_campaign=perevod&utm_content=itogi_dvadcati_let_raboty_texnicheskij_dolg_i_nepodderzhivaemyj_kod
[6] Источник: https://habr.com/ru/companies/ruvds/articles/738316/?utm_source=habrahabr&utm_medium=rss&utm_campaign=738316
Нажмите здесь для печати.