Перейти к содержимому
Эта статья была переведена с японского с помощью ИИ
Читать на японском
Эта статья находится в общественном достоянии (CC0). Чувствуйте себя свободно использовать ее. CC0 1.0 Universal

Всенаправленный инженер в эру «жидкого» ПО

Общеизвестно, что генеративный ИИ может создавать изображения, производя фотореалистичные картины, иллюстрации и рисунки, просто следуя инструкциям.

Тем временем в деловом мире основное внимание уделяется способности генеративного ИИ генерировать программы.

Чат-ориентированный ИИ реализован на основе фундаментальных больших языковых моделей, что делает его весьма компетентным в общении на различных языках и переводе между ними.

Языки программирования, используемые для создания программ, также являются разновидностью языка. Человеческие программисты, в некотором смысле, переводят устные требования к программному обеспечению в языки программирования.

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

Кроме того, программирование — это вид интеллектуальной работы, где правильность результата часто может быть проверена автоматически и мгновенно. Это происходит потому, что запуск созданной программы позволяет автоматически определить, достигаются ли желаемые результаты.

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

Генеративный ИИ также может выполнять программирование, параллельно проводя тестирование, что позволяет создать механизм, при котором, если человек дает точные инструкции, ИИ может автоматически итерировать и завершать программу до тех пор, пока она не пройдет тесты.

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

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

Кроме того, в условиях внимания делового мира, ведущие компании, занимающиеся исследованиями и разработками в области генеративного ИИ, также сосредоточены на улучшении его программных возможностей.

В таких обстоятельствах ожидается ускорение расширения областей и объемов, в которых автоматическое программирование может быть доверено генеративному ИИ.

Существует множество случаев, когда люди, никогда ранее не разрабатывавшие программы, настраивали базовую среду разработки на основе информации из интернета, а затем поручали генеративному ИИ программирование, завершая программы в совместном усилии.

Я сам, как программист, использую генеративный ИИ для программирования. Как только я освоюсь, я могу завершить разработку программного обеспечения, вообще не редактируя программу, просто копируя программы в файлы или вырезая и вставляя их в соответствии с инструкциями генеративного ИИ.

Конечно, часто возникают трудности. В основном это связано с тем, что настройки моего компьютера или инструментов разработки программ отличаются от типичных, или компоненты свободного программного обеспечения новее, чем те, что изучал генеративный ИИ, что приводит к пробелам в знаниях, или иногда мои запросы немного необычны.

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

На пути к эре «жидкого» ПО

Как разработчик программного обеспечения, я могу выпускать разработанное мною ПО. И программное обеспечение, которое мы, инженеры, выпускаем, используется различными пользователями.

Будущее, в котором каждый сможет разрабатывать программное обеспечение с помощью генеративного ИИ, является продолжением уже обсуждавшейся темы.

Однако это не просто изменение на стороне разработки программного обеспечения. Значительные изменения произойдут и на стороне пользователя.

Устное поручение генеративному ИИ автоматически добавлять или изменять функции в программном обеспечении может быть выполнено не только на этапе разработки до выпуска ПО, но и во время его использования. Более того, это могут делать сами пользователи программного обеспечения.

Разработчикам программного обеспечения достаточно определить допустимые и неизменяемые диапазоны и выпустить ПО с функцией кастомизации на основе генеративного ИИ.

Это позволит пользователям запрашивать у генеративного ИИ изменение незначительных проблем с удобством использования или предпочтений в дизайне экрана.

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

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

Когда пользователи смогут свободно изменять экраны и функции таким образом, концепция значительно отклонится от того, что мы традиционно называли «программным обеспечением».

Было бы уместно назвать это «жидким ПО» (liquidware), чтобы подчеркнуть, что оно еще более текуче и адаптируемо, чем программное обеспечение (которое является гибким по сравнению с аппаратным обеспечением), и что оно идеально подходит пользователю.

В прошлом функции реализовывались исключительно аппаратным обеспечением, но затем появилось заменяемое программное обеспечение, позволяющее реализовывать функции комбинацией аппаратного обеспечения и программного обеспечения.

Отсюда мы можем представить появление «жидкого ПО», которое относится к частям, которые могут быть изменены генеративным ИИ. Таким образом, общие функции будут реализованы комбинацией аппаратного обеспечения + программного обеспечения (предоставляемого разработчиками) + «жидкого ПО» (модификаций пользователя).

В эту эпоху «жидкого ПО» идеи пользовательских модификаций будут взрывообразно расти.

Новаторская идея модификации, изобретенная одним пользователем, может стать горячей темой в социальных сетях, что приведет к тому, что другие будут имитировать и изменять различное «жидкое ПО».

Также неизбежно появится «жидкое ПО», которое сможет интегрировать и обрабатывать различные типы программного обеспечения. Это позволит пользователям просматривать хроники из нескольких различных платформ социальных сетей в одном приложении или интегрировать результаты поиска с многочисленных платформ.

Таким образом, в мире, где преобладает «жидкое ПО», различные устройства, включая ПК и смартфоны, будут предоставлять функции, которые идеально соответствуют жизни и деятельности каждого человека.

Текущий феномен

Что важно для таких инженеров-программистов, как я, так это то, что «жидкое» ПО — это не футуристическая концепция или что-то, что появится через несколько лет.

Это потому, что очень простое «жидкое» ПО уже достижимо.

Например, предположим, что я инженер, разрабатывающий веб-приложение для электронной коммерции моей компании.

Такие веб-приложения обычно имеют базы данных, системы управления продажами и системы отгрузки товаров на серверах, управляемых компанией или арендованных облачных сервисах. Когда пользователь совершает покупку, эти системы связываются для сбора платежей и отгрузки товаров.

Основные системы и базы данных для этих операций не могут быть изменены произвольно.

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

Возможны различные модификации: увеличение текста, изменение фона на темный тон, перемещение часто нажимаемых кнопок в легкодоступные левой рукой места, сортировка элементов по цене на экране списка или отображение деталей двух продуктов рядом.

Технически эти модификации могут быть достигнуты путем изменения файлов конфигурации и программ, таких как HTML, CSS и JavaScript, которые отображают экран в браузере.

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

Таким образом, на серверной стороне веб-приложения электронной коммерции можно было бы хранить эти файлы отдельно для каждого вошедшего в систему пользователя, добавить экран для разговора с чат-ИИ и создать механизм для изменения HTML, CSS и JavaScript файлов этого пользователя на сервере в соответствии с их запросами.

Если вы предоставите этот текст, а также информацию о конфигурации и исходный код существующего веб-приложения электронной коммерции генеративному ИИ, он, вероятно, предоставит шаги и необходимые программы для добавления такой функциональности.

Таким образом, «жидкое» ПО уже является актуальной темой; не было бы удивительным, если бы это было продолжающимся явлением.

Всенаправленный инженер

Даже если сфера автоматического программирования на основе ИИ расширяется и эра «жидкого» ПО уже началась, разработка программного обеспечения пока не может осуществляться исключительно генеративным ИИ.

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

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

Специалисты, обладающие такими знаниями и навыками, называются full-stack инженерами.

До сих пор несколько full-stack инженеров занимались общим проектированием, в то время как остальные инженеры либо сосредоточивались исключительно на программировании, либо специализировались на конкретных непрограммируемых областях в рамках системного стека, разделяя роли таким образом.

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

Следовательно, каждый проект разработки будет требовать очень мало инженеров, которые могут просто писать код; вместо этого потребуется большое количество full-stack инженеров.

Более того, в этой ситуации простого наличия full-stack знаний и навыков будет недостаточно. Это связано с тем, что различные проекты по разработке программного обеспечения будут требовать разнообразных типов ПО, что означает, что разработка не всегда будет запрашиваться в рамках одного и того же системного стека. Также неизбежно возрастет спрос на комплексные системы, требующие нескольких системных стеков.

Например, системный стек для веб-приложения отличается от системного стека для бизнес- или основных систем. Поэтому full-stack инженеру по веб-приложениям нельзя доверить проект по разработке основной системы.

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

Однако, если акцент на программировании уменьшится, а общая стоимость разработки программного обеспечения снизится, то разработка комплексных систем, объединяющих программное обеспечение с различными системными стеками, должна увеличиться.

Хотя это потребует привлечения нескольких отдельных full-stack инженеров для разработки, инженеры, способные охватить всю картину и выполнить базовый дизайн, будут занимать критически важную позицию.

Это означает, что будут востребованы инженеры с всенаправленными знаниями и навыками во множестве системных стеков, превосходящие границы отдельных системных стеков.

Таких инженеров, скорее всего, назовут всенаправленными инженерами.

И точно так же, как спрос на инженеров, которые могут только программировать, уменьшится из-за генеративного ИИ, в конечном итоге наступит эра, когда спрос на full-stack инженеров, ограниченных одним системным стеком, также снизится.

Если вы хотите оставаться активным ИТ-инженером в ту эпоху, вы должны немедленно начать стремиться стать всенаправленным инженером.

Роль всенаправленного инженера

Языки программирования, платформы и фреймворки, подлежащие разработке, разнообразны.

Однако это не означает, что необходимо изучить их все. Это связано с тем, что всенаправленный инженер также может получать помощь от генеративного ИИ.

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

Конечно, существует риск появления ошибок или уязвимостей безопасности, а также накопления технического долга, который может затруднить будущие модификации.

Для выявления и снижения этих рисков необходимы знания конкретного языка или библиотеки. Однако эти знания также могут быть получены от генеративного ИИ. Всенаправленному инженеру нужно лишь уметь тщательно выстраивать процедуры и механизмы для обнаружения и предотвращения этих проблем, или для их устранения постфактум.

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

Всенаправленному инженеру не обязательно обладать подробными знаниями или многолетним опытом работы с каждым отдельным системным стеком.

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

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

Всенаправленное программное обеспечение

Давайте рассмотрим, какой вид разработки программного обеспечения требует всенаправленного инженера.

Ранее я приводил пример разработки веб-приложения для электронной коммерции.

Под руководством ответственного руководителя, которому высшее руководство компании поручило переработать это веб-приложение для электронной коммерции, команда планирования может выдвинуть следующие требования:

Преобразование в платформу пользовательского сообщества. Это означает не просто специализированное приложение или сайт для электронной коммерции, а предоставление платформы, где пользователи продуктов могут взаимодействовать друг с другом по поводу самих продуктов и их использования. Целью является удержание пользователей, эффект сарафанного радио, обогащение контента за счет вклада пользователей и интеграция обратной связи по разработке продукта (как положительной, так и отрицательной) с планированием новых продуктов и маркетингом.

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

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

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

Совместимость с «жидким» ПО. Конечно, все пользовательские интерфейсы будут совместимы с «жидким» ПО. Кроме того, все внутренние пользовательские интерфейсы, такие как для агрегации информации и обратной связи для разработки и планирования продуктов, отделов эксплуатации систем и управленческих отчетов, также будут преобразованы в «жидкое» ПО.

Если бы был представлен план разработки такого сложного программного обеспечения, традиционная команда разработчиков программного обеспечения, вероятно, не приняла бы его немедленно. Или же, в процессе уточнения системных спецификаций, они логически продемонстрировали бы необходимость огромных затрат на разработку и времени и настаивали бы на значительном сокращении спецификаций.

Однако, что если бы генеративный ИИ мог автоматизировать большую часть программирования, и более половины представленных системных стеков были бы знакомы кому-то из команды, и у команды был бы предыдущий опыт успешного внедрения новых системных стеков, платформ и фреймворков с нуля с помощью генеративного ИИ? И что, если бы вы, как всенаправленный инженер, уже вступили на этот путь и намеревались продолжать его?

С этой точки зрения, это должен быть очень привлекательный проект. Вы могли бы работать с командой планирования, которая выдвигает амбициозные предложения под руководством лидера планирования, и командой разработчиков с потенциалом вырасти в команду всенаправленной разработки программного обеспечения.

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

Учитывая это, разработка этого всенаправленного программного обеспечения должна выглядеть привлекательным проектом.

В заключение

Благодаря автоматическому программированию с помощью генеративного ИИ, «жидкое» программное обеспечение и всенаправленная разработка ПО уже становятся реальностью.

В такой ситуации ИТ-инженерам все чаще требуется выйти за рамки фулстека и стремиться стать всенаправленными инженерами.

Более того, их область деятельности расширится до всенаправленной бизнес-инженерии, которая всесторонне проектирует организационные действия, связывая клиентов, внутренних сотрудников и ИИ за пределами ИТ-систем, а также до всенаправленной инженерии сообществ.

И еще дальше, я считаю, появится область, называемая всенаправленной социальной инженерией, направленная на всестороннее улучшение общества.