В ИТ я давно. Свои первые программы писал еще на Бейсике для «Агата» и первых PC-совместимых болгарских «Правец-16». В студенческие годы хотел стать программистом и писать компьютерные игры, но жизнь всё время выталкивала меня в сторону проектного управления. Тоже ИТ-шного, но это не программирование. Однако я всегда интересовался тем, в каком направлении развиваются технологии, иногда даже пытался восстановить свои навыки программирования, и наблюдения за этим привело меня к любопытным выводам.
Убожество возможностей современных веб-приложений бросается в глаза всем, кто хоть немного поработал с десктопными приложениями. Вывод качественной графики, насыщенность функциональностью, скорость разработки – все это не в пользу современных программных средств. Современная разработка программного обеспечения, особенно в web – это на 80% борьба с сформовавшимися в ИТ-индустрии техническими стандартами разработки и всего на 20% - разработка функциональности программ, то есть то, ради чего собственно эта разработка и затевалась.
Почему так происходит? Проблема в развивающихся web-технологиях, которые пытаются решить две задачи:
· Уйти от единой платформы разработки. Раньше была только Windows, сейчас десятки операционных систем. Браузер, работающий на этих системах, стал универсальным способом доступа к приложению с любого устройства.
· Обеспечить возможность неограниченного наращивания количества пользователей, которые получают доступ к приложению из любой точки мира. В старых архитектурах всегда был «зеркальный потолок» по количеству допустимых пользователей.
Web-технологии – мощная штука, объединившая мир, но какой ценой это далось? В старых клиент-серверных приложениях программист отвечал за все элементы системы – и за её внешний вид и за внутреннюю логику. Разработка системы напоминала строительство дома из бетонных плит – ты брал готовый блок-библиотеку с визуальными элементами, бросал эти элементы – кнопки, таблицы заголовки - в окно-форму, дописывал код обработчиков событий, подключал к таблице в базе данных на сервере и вуаля – через три-четыре часа форма была готова и работала. Это делал один человек на одном языке программирования, он полностью отвечал за результат и внешний вид.
Разработка такой функциональности сейчас на web-технологиях может занимать неделю или две, при этом в разработке будут участвовать не менее пяти человек – да-да, вы не ослышались. В отличие от строительства типового дома из блоков это напоминает сборку собора Василия Блаженного пинцетом из песчинок – долго и муторно. Прежде всего, нет одного программиста, который отвечал бы полностью за результат – теперь есть бэкенд-разработчики, которые пишут внутреннюю логику работы программы, и фронтенд-разработчики, которые модифицируют и полируют «морду» - внешнюю оболочку системы, с которой взаимодействуют пользователи из браузера. По сути, разрабатывается не одна, а несколько взаимодействующих между собой систем, а, как известно, когда есть два взаимодействующих элемента, то проблемы три – первый элемент, второй элемент и стык между ними. Современные библиотеки для разработчиков решают любые проблемы, кроме ускорения собственно процесса разработки – никто не дает готовых «блоков», из которых можно сооружать дом. На разделение единой логики системы на фронтенд и бэкенд, на стыковку их между собой уходит масса времени и сил, за выявление ошибок стыковки отвечают тестировщики. А еще неплохо сделать внешний вид приложения посимпатичнее и в едином стиле, и вот уже появляются дизайнеры, рисующие картинки кнопочек. Кроме того, так как каждый программист отвечает за свой участок, то нужен кто-то, кто отвечает за функциональность в целом – так в команде появляются аналитики, готовящие «чертежи» будущей системы. А потом всё, что по чертежам аналитиков сделали разработчики в своей песочнице и протестировали тестировщики, нужно передать пользователям – так появляются сетевые специалисты и devops-инженеры. Не успеешь моргнуть глазом – вот уже и образовалась приличная команда с хорошей зарплатой у каждого, которая борется и успешно побеждает все эти организационные и технические трудности. Только вот пользователь ничего этого не замечает, нужная ему функциональность разрабатывается в разы медленнее.
Скорость разработки – это вообще отдельная тема. Я участвовал в проекте по замещению старых приложений на новые на web-технологиях, при этом старые приложения активно использовались и поддерживались из-за постоянного изменения законодательства. Гримасы современной разработки: в доработке старых продуктов обычно участвовал один разработчик, три программиста были уже серьезной командой. При разработке аналогичного по функциональности нового продукта на web-технологиях в команде было пятнадцать человек (!), при этом старый продукт развивался быстрее, чем новый!
При этом собственно требования к написанию программ практически не изменились – те же переменные, циклы, массивы, я легко понимаю программный код на современных языках, хотя не занимался кодированием уже двадцать лет. Усложнилась организационная часть разработки – разница примерно такая же, как между индивидуальным исполнителем на фортепьяно и симфоническим оркестром. Если раньше разработка программ напоминала работу в небольшой фирме, когда программист и швец, и жнец, и на дуде игрец, то сейчас всё работает как в большой корпорации с кучей бюрократии, на борьбу с которой тратишь большую часть сил. Мне очень жаль современных молодых программистов, которые вынуждены вместо программирования – чистого творчества, которое и привлекало меня – заниматься запоминанием всех этих шагов по сборке кода и взаимодействию с другими частями приложений. Современная программа «Hello, world!» вместо простой демонстрации действительно превратилась в строительство нового мира.
Ну ладно, побрюзжал немного и будет. Изменения не остановить.
Следите за новостями в telegram-канале t.me/softprofy
Мой курс для профессионалов разработки программного обеспечения: profysoft.ru