Многие программисты считают себя своего рода художниками. Портал Computer Weekly предложил экспертам сформулировать, что значит быть современным разработчиком ПО.
Создавая приложения, производя инжиниринг данных и сервисов для ПК, мобильных устройств, облаков и IoT, разработчик становится художником. Клавиатура — его палитра, командная строка — мольберт и холст.
В живописи выделяют несколько жанров: классика, абстракционизм, пост-модерн, ренессанс. Так и в программировании существуют различные области, категории и подвиды, такие как водопад, Agile, SCRUM, парное программирование, быстрая разработка (RAD), а теперь еще и создание приложений сотрудниками бизнес-подразделений без программирования или с минимальным его объемом (no/low-code).
Некоторые углубляются в эту классификацию и выделяют различные виды программирования в зависимости от типа языка (декларативный, конкурентного программирования, программирования потоков данных, функциональный и т. д.). Другие классифицируют их по типам целевого использования программ: ПК, мобильные устройства, встроенное ПО.
Еще более усложняя выделение категорий ПО, современная практика разработки часто ассоциируется с такими подходами, как нативно-облачный (cloud-native), ориентированный в первую очередь на облака (cloud-first) и многооблачный (multicloud).
Некоторые считают, что современная практика разработки ПО включает управляемый данными анализ больших данных и что ей присуще использование ИИ и машинного обучения.
Существует научная школа, которая классифицирует современную разработку программного обеспечения как в первую очередь ориентированную на сервисы и масштабируемую через Интернет, что позволяет разработчикам создавать код, который может развертываться в объединенных сервисных сетях. Другие разработчики стремятся создавать многократно используемые компоненты и системы, представляющие собой базовые элементы новых приложений.
Сегодня имеется особый сегмент рынка корпоративного ПО, в котором работают специалисты по модернизации приложений, как они себя называют. Эти поставщики программных инструментов сосредоточили внимание на миграции унаследованных приложений, написанных для мейнфреймов или до появления облаков. Они тяготеют к микросервисам, виртуальным машинам, контейнерам и Kubernetes.
Архитектура современного ПО
Компания Volterra выпускает распределенную облачную платформу для развертывания, подключения, защиты и запуска приложений и данных в многооблачных и периферийных средах. Ее учредитель и генеральный директор Анкур Сингла считает, что в ближайшем будущем роль микросервисов в разработке приложений будет увеличиваться. По его мнению, резко возросшее распространение Kubernetes и ряд других факторов обусловливают рост популярности микросервисов в 2020 г. и в дальнейшем.
«Микросервисы являются частью ДНК Kubernetes. Это главный метод разработки и развертывания приложений при использовании Kubernetes, — сказал он. — В связи с распространением Kubernetes технические игроки выпускают наборы инструментов и системы с открытым кодом, которые решают проблемы микросервисов и в конечном счете позволяют другим организациям применять их должным образом».
В качестве примера Сингла привел проект с открытым кодом Dapr, который недавно запустила Microsoft. Это переносимая, управляемая событиями среда исполнения, позволяющая разработчикам легко создавать устойчивые микросервисы с запоминанием и без запоминания состояния, которые запускаются в облаке и на периферии и допускают использование разнообразных языков и систем разработки. Ряд стартапов, сообщил Сингла, также наращивают усилия для решения этих проблем.
Написать однажды и развертывать на любых устройствах
По данным компании Nginx, разработавшей одноименный веб-сервер с открытым кодом, современным следует считать приложение, поддерживающее множество клиентов. Клиентом может быть интерфейс пользователя на базе библиотеки React JavaScript, мобильное приложение, работающее под управлением Android или iOS, или клиентское приложение, которое через API подключается к серверному приложению.
«От современных приложений ожидают, что они справятся с обслуживанием неограниченного числа клиентов, которые потребляют предоставляемые приложением данные и сервисы, — сказал Крис Стетсон, главный архитектор и старший директор Nginx по инжинирингу микросервисов. — Современное приложение предоставляет API для доступа к таким данным и сервисам. API является единым для всех, а не индивидуальным для каждого клиента, получающего доступ к приложению. API доступен по протоколу HTTP(S) и предоставляет доступ ко всем особенностям и функциональности, доступным через графический интерфейс пользователя или интерфейс командной строки».
Способность крупных компаний разрабатывать новые продукты и сервисы на базе ПО предполагает многочисленные эксперименты и итерации. Старые ИТ не подходят новым компаниям, которые стремятся воспроизвести успех интернет-гигантов. Следовательно, имеется потребность в более активной обратной связи с клиентами и пользователями в процессе разработки ПО. А это, в свою очередь, предполагает создание приложений, ориентированных на обслуживание клиентов.
Многодисциплинарные команды
Разработка современных приложений все больше сосредотачивается на сроках окупаемости инвестиций. Крис Бейли, главный архитектор программного решения IBM Cloud Paks for Applications, сказал, что разработчики должны не только нацеливаться на быстрое создание приложений, но и добиваться, чтобы ПО представляло реальную ценность для пользователей и бизнеса.
По его мнению, команды разработчиков должны стать многодисциплинарными и более самодостаточными, снизив зависимость от результатов и графика работы других команд. Им следует также использовать методы разработки, управляемой поведением (behaviour-driven development, BDD) и тестированием (test-driven development, TDD), чтобы ПО отвечало запросам пользователей и критериям высокого качества.
Бейли сказал, что команды разработчиков осуществляют непрерывную интеграцию, чтобы повысить скорость разработки и обеспечить непрерывную проверку качества как элемента процесса разработки. Кроме того, они осуществляют непрерывную доставку ПО в виде релизов для ограниченного круга пользователей (canary releases) с целью снижения риска, непрерывной проверки и повышения устойчивости.
Как считает Бейли, современные методы разработки включают написание легко управляемого кода. Это означает непрерывную проверку его работоспособности, обозримость кода и операционные средства управления, которые после развертывания приложений позволяют легко управлять ими и их использованием.
Разработка приложений тесно связана с управлением изменениями и с разнообразием мыслей широкого круга людей. Когда-то ПО разрабатывалось для обслуживания общих бизнес-функций и выпускалось в виде единого монолитного приложения, которое устанавливалось в центральной системе. Доступ к нему осуществлялся с простых терминалов. В наши дни предпочтительная архитектура нового ПО часто состоит из множества компонентов, которые могут устанавливаться на разных серверах или даже в разных облаках.
Клиентские приложения должны работать на любых устройствах. Кроме того, разработчиков побуждают создавать привлекательные пользовательские интерфейсы. С точки зрения конечного пользователя, клиентские и серверные приложения должны обеспечивать обслуживание на высоком уровне.
Любая компания способна создать набор лучших сервисов и инструментов разработки, но это не гарантирует ей успеха, заявила Кэтрин Вонг, директор по продуктам и исполнительный вице-президент по инжинирингу компании Domo, которая специализируется на облачных инструментах бизнес-аналитики, визуализации и интеграции данных.
«Если бы все было так просто, гораздо больше стартапов добивались бы успеха», — сказала она. Разумеется, есть множество причин, обусловливающих трудности создания и масштабирования ПО. Для успеха нужны коллективные усилия.
«Для большинства из нас разработка ПО является коллективным делом, — продолжила Вонг. — В наших командах давно существуют четко распределенные функции. Это инженеры различных специальностей, архитекторы, менеджеры продуктов, специалисты по качеству, дизайнеры, менеджеры проектов и технические писатели. Все эти функции по-прежнему нужны. Но как нам добиться разнообразия мыслей и опыта? Как научить команды эмпатии и улучшить обмен информацией между ними? Это стало важнее, чем любой специалист независимо от занимаемой им должности».
По ее словам, такая ориентация на разнообразие имеет большое значение для влияния разрабатываемого ПО на бизнес и, что еще важнее, на людей. Она заставляет менеджеров проектов и продуктов создавать условия, поощряющие вовлеченность, инновации и рост. «На протяжении многих лет я видела бесчисленные примеры того, как искусство создания ПО и сотрудничество различных специалистов приводят к появлению выдающихся продуктов, которые быстрее других реагируют на потребности рынка», — призналась Вонг.