Хорошо известно, что генеративный ИИ может создавать фотореалистичные изображения, иллюстрации и картины, просто получая инструкции.
Тем временем, в деловом мире внимание сосредоточено на способности генеративного ИИ генерировать программы.
Разговорный ИИ работает на основе больших языковых моделей — фундаментальной технологии, которая превосходно справляется с общением на различных языках и переводом между ними.
Языки программирования, используемые для создания программ, также являются разновидностью языка. Человеческие программисты, в некотором смысле, переводят устные требования к программному обеспечению в языки программирования.
Именно поэтому разговорный генеративный ИИ, использующий большие языковые модели, также очень искусен в программировании.
Более того, программирование — это интеллектуальная задача, где правильность результатов часто может быть автоматически и немедленно проверена. Это происходит потому, что созданную программу можно запустить и автоматически проверить, выдает ли она желаемый результат.
На самом деле, когда программисты создают программу, они часто одновременно создают тестовые программы для проверки результатов, разрабатывая основную программу и контролируя, чтобы она функционировала должным образом.
Генеративный ИИ также может продвигаться в программировании, тестируя таким же образом. Если человек предоставляет точные инструкции, ИИ способен автоматически итеративно завершить программу до тех пор, пока она не пройдет все тесты.
Конечно, из-за ограничений возможностей программирования генеративного ИИ и неоднозначности человеческих инструкций, во многих случаях тесты не могут быть пройдены даже после многочисленных итераций. Более того, неадекватные или некорректные тесты часто приводят к ошибкам или проблемам в готовой программе.
Однако по мере улучшения возможностей генеративного ИИ и совершенствования методов предоставления инструкций инженерами, а также благодаря механизмам, повышающим знания генеративного ИИ в области программирования через поиск в интернете, с каждым днем расширяется область автоматической генерации подходящих программ.
Кроме того, благодаря вниманию делового мира, ведущие компании, занимающиеся исследованиями и разработками в области генеративного ИИ, также активно инвестируют в повышение его программистских способностей.
В этой ситуации ожидается ускорение расширения объема и масштаба задач автоматического программирования, которые могут быть доверены генеративному ИИ.
Существует множество примеров, когда люди, никогда ранее не занимавшиеся разработкой программ, настраивали базовую среду разработки с использованием информации из интернета, а затем полагались на генеративный ИИ для программирования, завершая проекты вдвоем.
Как программист, я сам использую генеративный ИИ для программирования. Как только я осваиваюсь с ним, я могу завершить разработку программного обеспечения, не редактируя программу вообще, просто копируя и вставляя код в файлы в соответствии с инструкциями генеративного ИИ.
Конечно, я часто сталкиваюсь с трудностями. В основном это связано с незначительными различиями между настройками моего компьютера или инструмента разработки программного обеспечения и общими конфигурациями, или с тем, что бесплатные программные компоненты новее, чем те, на которых обучался генеративный ИИ, что вызывает пробелы в знаниях, или же мои запросы немного необычны.
В случаях, когда таких мелких несоответствий или особых обстоятельств нет, и когда дается указание создать очень распространенные функции программного обеспечения, в большинстве ситуаций генерируются подходящие программы.
На пути к эпохе Liquidware
Как разработчик программного обеспечения, я могу выпускать созданные мной программы, и эти программы, выпущенные нами, инженерами, затем используются различными пользователями.
Будущее, в котором разработка программного обеспечения может быть выполнена кем угодно с помощью генеративного ИИ, является продолжением нашего обсуждения.
Однако это не просто изменение в сфере разработки программного обеспечения; значительные изменения ожидают и пользовательскую сторону.
Задача словесного инструктирования генеративного ИИ для автоматического добавления или изменения функций в программном обеспечении может быть выполнена не только на этапе разработки до выпуска программы, но и во время ее использования. Более того, это может сделать сам пользователь программного обеспечения.
Разработчики программного обеспечения могут определить допустимые и недопустимые для изменения области, а затем выпустить программу с функциями кастомизации на базе генеративного ИИ.
Это позволит пользователям просить генеративный ИИ изменять мелкие неудобства или предпочтения в дизайне экрана внутри программного обеспечения.
Более того, пользователи смогут добавлять полезные функции, найденные в других приложениях, объединять несколько операций в один клик или просматривать часто используемые экраны на одном дисплее.
Для разработчиков программного обеспечения, предоставление такой возможности настройки пользователями приносит значительные преимущества: это избавляет от необходимости самостоятельно реализовывать запросы на функции, и может повысить популярность программного обеспечения, избегая негативных отзывов и недовольства по поводу удобства использования.
Когда пользователи могут свободно изменять экраны и функции таким образом, эта концепция значительно отклоняется от того, что мы традиционно называем «программным обеспечением».
Было бы уместнее назвать это «Liquidware», что означает нечто еще более гибкое и адаптируемое, чем программное обеспечение (которое уже гибче аппаратного), и нечто, что идеально подходит пользователю.
Раньше функции реализовывались исключительно аппаратным обеспечением. Затем появилось сменное программное обеспечение, позволившее реализовать функции через комбинацию аппаратного и программного обеспечения.
Отсюда мы можем предвидеть появление Liquidware, то есть частей, которые могут быть изменены генеративным ИИ. Следовательно, функции будут реализованы аппаратным обеспечением + программным обеспечением (предоставленным разработчиками) + Liquidware (модификации пользователя).
В эту эпоху Liquidware идеи пользователей для модификаций будут стремительно множиться.
Новаторская идея модификации, придуманная одним пользователем, может стать горячей темой в социальных сетях, что приведет к тому, что другие будут имитировать и изменять различные приложения Liquidware.
Более того, вероятно, появятся Liquidware, способные интегрированно работать с различными программными приложениями. Это означает, что пользователи смогут просматривать ленты из нескольких разных социальных сетей в одном приложении, или результаты поиска могут объединять данные с многочисленных платформ.
Таким образом, в мире, где Liquidware широко распространено, различные устройства, включая ПК и смартфоны, будут предоставлять функции, которые идеально соответствуют индивидуальной жизни и деятельности каждого из нас.
Нынешний феномен
Для таких инженеров-программистов, как я, крайне важно понимать, что Liquidware — это не футуристическая концепция или что-то, что появится через несколько лет.
Это потому, что даже очень простое Liquidware уже достижимо.
Например, предположим, что я — инженер, разрабатывающий веб-приложение для сайта электронной коммерции моей компании.
Такое веб-приложение будет иметь базы данных, системы управления продажами и системы отгрузки продукции на серверах, управляемых внутри компании или арендованных через облачный сервис. Когда пользователь совершает покупку, эти системы связываются для обработки платежей и отправки продукции.
Основные бизнес-системы и базы данных, подобные этим, не могут быть произвольно изменены.
Однако дизайн веб-экрана сайта электронной коммерции, предназначенного для пользователей, может быть изменен в соответствии с индивидуальными потребностями пользователей без значительных проблем. Конечно, если изменения одного пользователя влияют на экраны других пользователей, это было бы проблемой, но индивидуальные пользовательские настройки допустимы.
Например, можно представить различные модификации: увеличение текста, изменение фона на темный тон, перестановка часто нажимаемых кнопок для удобства управления левой рукой, сортировка товаров по цене на экране списка или отображение деталей двух товаров рядом.
Технически эти модификации могут быть достигнуты путем изменения файлов конфигурации и программ, таких как HTML, CSS и JavaScript, которые отображают экран в браузере.
С точки зрения безопасности, эти файлы изначально работают в веб-браузере. Поэтому части, которые могут быть изменены инженером, разбирающимся в веб-приложениях, обрабатывают только те функции и данные, которые безопасно изменять.
Таким образом, на стороне сервера веб-приложения электронной коммерции может быть создан механизм для раздельного хранения этих файлов для каждого вошедшего в систему пользователя, добавлена функция экрана для общения с чат-ИИ, а затем изменены HTML, CSS и JavaScript-файлы этого пользователя на сервере в соответствии с их запросами.
Если этот текст, наряду с существующей конфигурационной информацией веб-приложения электронной коммерции и исходным кодом, будет представлен генеративному ИИ, он, вероятно, предоставит шаги и необходимые программы для добавления такой функциональности.
Таким образом, Liquidware — это уже актуальная тема; не было бы удивительно, если бы это было продолжающимся явлением прямо сейчас.
Всенаправленные инженеры
Даже с учетом расширения области автоматического программирования на базе ИИ и наступления эпохи Liquidware, разработка программного обеспечения по-прежнему не может осуществляться исключительно генеративным ИИ.
Однако несомненно, что акцент на программировании в разработке программного обеспечения значительно снизится.
Более того, для плавной разработки программного обеспечения требуется широкий спектр знаний и инженерных навыков, простирающихся от общего программирования до облачной инфраструктуры, сетей, безопасности, платформ, фреймворков разработки и баз данных — охватывающих весь стек системы для ее полноценного функционирования.
Специалисты, обладающие такими знаниями и навыками, называются full-stack инженерами.
Традиционно несколько full-stack инженеров занимались общим проектированием, в то время как остальные инженеры специализировались на программировании или сосредоточивались на конкретных непрограммистских областях в рамках системного стека, таким образом разделяя роли.
Однако, по мере того как генеративный ИИ возьмет на себя аспект программирования, затраты на разработку программного обеспечения значительно сократятся, что приведет к планированию различных новых проектов по разработке программного обеспечения.
Следовательно, в каждом проекте по разработке инженеры, которые могут лишь писать программы, будут в значительной степени не нужны; вместо этого будет востребовано большое количество full-stack инженеров.
Более того, в этом сценарии простого наличия full-stack знаний и навыков будет недостаточно. Это связано с тем, что типы программного обеспечения, требуемые в различных проектах разработки, будут диверсифицироваться, что означает, что разработка не всегда будет запрашиваться с использованием того же системного стека. Кроме того, спрос на сложные системы, требующие нескольких системных стеков, несомненно, возрастет.
Например, системный стек для веб-приложения отличается от системного стека для бизнес- или основных систем. Поэтому full-stack инженер по веб-приложениям не может быть поручен проект по разработке основной системы.
Аналогично, веб-приложения, мобильные приложения и приложения для ПК имеют различные системные стеки. В мире встроенного программного обеспечения, такого как IoT, системный стек будет полностью отличаться для каждого встроенного устройства.
Однако, по мере уменьшения акцента на программировании и снижения общих затрат на разработку программного обеспечения, разработка сложных систем, сочетающих программное обеспечение с различными системными стеками, вероятно, возрастет.
Хотя такая разработка потребует привлечения нескольких отдельных full-stack инженеров, ключевую роль будут играть инженеры, способные осуществлять надзор за всей системой и выполнять базовое проектирование.
Это означает, что возникнет спрос на инженеров с всенаправленными знаниями и навыками во многих системных стеках, выходящих за рамки отдельных системных стеков.
Таких инженеров, вероятно, будут называть всенаправленными инженерами.
И так же, как из-за генеративного ИИ снизится спрос на инженеров, способных только программировать, в конечном итоге наступит эра, когда сократится и спрос на full-stack инженеров, ограниченных одним системным стеком.
Если вы хотите оставаться активным ИТ-инженером в ту эпоху, вы должны немедленно начать свой путь к тому, чтобы стать всенаправленным инженером.
Роль всенаправленных инженеров
Языки программирования, платформы и фреймворки, которые будут разрабатываться, разнообразны.
Однако всенаправленному инженеру не нужно овладевать всеми ими, потому что он также может получить помощь от генеративного ИИ.
Если вы предоставите это генеративному ИИ, то даже языки программирования, платформы или фреймворки, которые вы никогда раньше не использовали, могут быть сгенерированы просто путем предоставления словесных инструкций.
Конечно, существует риск появления ошибок или уязвимостей безопасности, а также накопления технического долга, который может затруднить будущие модификации.
Для выявления и смягчения этих рисков необходимы знания конкретного языка или библиотеки. Однако эти знания также могут быть получены от генеративного ИИ. Всенаправленному инженеру нужно лишь уметь надежно выстраивать процедуры и механизмы для обнаружения и предотвращения этих проблем, а также для их последующего устранения.
Эти процедуры и механизмы не сильно меняются в зависимости от системных стеков. Если процедуры и механизмы для предотвращения ошибок и уязвимостей безопасности, а также для обеспечения будущей расширяемости будут формализованы, то остальное можно будет поручить генеративному ИИ или инженерам, специализирующимся в этих конкретных областях.
Всенаправленным инженерам не обязательно обладать подробными знаниями или многолетним опытом работы с каждым отдельным системным стеком.
Одна из основных ролей всенаправленного инженера заключается в проектировании того, как распределяются функции и как взаимодействуют множественные сложные программные системы, совместно работающие в разных системных стеках.
Кроме того, рассмотрение того, как разрабатывать и управлять всем программным обеспечением, также является ключевой ролью для всенаправленного инженера.
Всенаправленное программное обеспечение
Давайте рассмотрим, для какого рода разработки программного обеспечения необходим всенаправленный инженер.
Ранее я приводил пример разработки веб-приложения для электронной коммерции моей компании.
Под руководством руководителя, которому топ-менеджмент поручил обновить это веб-приложение электронной коммерции, команда планирования может выдвинуть следующие требования:
Интеграция с платформой пользовательского сообщества: Это означает предоставление платформы не только для специализированного приложения или сайта электронной коммерции, но и для взаимодействия пользователей о самих продуктах и способах их использования. Цель — удержание пользователей, эффект сарафанного радио, обогащение контента за счет вклада пользователей, а также интеграция обратной связи (как положительной, так и отрицательной) в разработку продуктов, планирование новых продуктов и маркетинг.
Совместимость со всеми устройствами: Это делает сообщество пользователей и информацию о продуктах доступными с различных устройств, включая не только веб-приложения, но и приложения для смартфонов, голосовых помощников, носимых устройств и умных бытовых приборов.
Совместимость со всеми платформами: Это включает не только собственную платформу пользовательского сообщества компании, но также, например, размещение товаров и обмен отзывами на комплексных сайтах электронной коммерции, интеграцию с социальными сетями, а также функциональную и информационную связь с различными инструментами ИИ.
Обновление бизнес-системы: При временной связи с существующими системами управления продажами и доставки продукции, это также включает обновление этих систем. После обновления план включает агрегацию данных о продажах и прогнозирование спроса в реальном времени, а также интеграцию с системами управления запасами. Кроме того, будет поэтапно вводиться связь с регионально распределенными системами инвентаризации, предоставляемыми службами доставки, и услугами по отправке товаров со стороны перевозчиков, что потребует соответствующей поэтапной адаптации интеграций информационной системы.
Совместимость с Liquidware: Все пользовательские интерфейсы, конечно, будут совместимы с Liquidware. Кроме того, внутренние пользовательские интерфейсы для разработки и планирования продуктов (такие как агрегация информации и обратная связь), отделы системных операций и отчеты для руководства также будут полностью преобразованы в Liquidware.
Если бы был представлен план разработки такого сложного программного обеспечения, традиционная команда разработчиков, вероятно, не приняла бы его немедленно. В качестве альтернативы, в ходе обсуждений системных спецификаций, они логически продемонстрировали бы необходимость огромных затрат и времени на разработку, добиваясь значительного сокращения спецификаций.
Однако, что если генеративный ИИ сможет автоматизировать большую часть программирования, и более половины предложенных системных стеков уже будут знакомы кому-то из команды? И что если у команды уже был успешный опыт запуска новых системных стеков, платформ и фреймворков с нуля при содействии генеративного ИИ? И что если вы, как всенаправленный инженер, уже начали этот путь и намерены продолжать его?
С этой точки зрения, это должен выглядеть как очень привлекательный проект. Вы сможете работать с командой планирования, которая вносит амбициозные предложения от высшего руководства, и командой разработки, имеющей потенциал вырасти во всенаправленную команду по разработке программного обеспечения.
Есть также уверенность в существующих системах. Это также проект, который может расти и развиваться постепенно с помощью гибкого процесса разработки, начиная с быстрореализуемых и высокоэффективных функций и собирая обратную связь от ранних пользователей.
Учитывая все это, разработка этого всенаправленного программного обеспечения должна выглядеть очень привлекательным проектом.
Заключение
Благодаря автоматическому программированию, управляемому генеративным ИИ, Liquidware и всенаправленная разработка программного обеспечения уже становятся реальностью.
В этом контексте ИТ-инженерам все чаще необходимо выходить за рамки full-stack и стремиться стать всенаправленными инженерами.
Далее их сфера деятельности расширится еще больше, выходя за пределы ИТ-систем, чтобы охватить всенаправленную бизнес-инженерию — проектирование организационной деятельности, путем соединения клиентов, внутренних сотрудников и ИИ — и всенаправленную инженерию сообществ.
И еще дальше, я предвижу появление области, называемой всенаправленной социальной инженерией, направленной на всестороннее улучшение общества.