Кодеры обречены? Этот вопрос возник в сообществах компьютерных программистов с тех пор, как большая языковая модель OpenAI, GPT-3 , удивила всех своей способностью создавать HTML-сайты из простых письменных инструкций.

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

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

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

«Я не верю, что ИИ хоть сколько-нибудь заменит разработчиков-людей», — сказал Васи Филомин , вице-президент Amazon по услугам ИИ, добавив, что инструменты ИИ освободят программистов от рутинных задач, но творческая работа по компьютерному программированию останется.

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

Когда в 1940-х годах началось программирование электронных компьютеров, программисты писали числовым машинным кодом . Только в середине 1950-х Грейс Хоппер и ее команда в компьютерной компании Remington Rand разработали FLOW-MATIC , который позволял программистам использовать ограниченный словарный запас английского языка для написания программ.

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

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

В июне Amazon выпустила CodeWhisperer , помощник по кодированию для программистов, такой как Copilot GitHub, который был впервые выпущен в ограниченном предварительном просмотре в июне 2021 года. Оба инструмента основаны на больших языковых моделях (LLM), которые были обучены на огромных репозиториях кода. Оба предлагают предложения автозаполнения, когда программист пишет код, или предлагают исполняемые инструкции из простых фраз на естественном языке.

«Нужна некоторая постепенная доработка, некий диалог между человеком и машиной».
— Питер Шраммель, Diffblue

Опрос 2000 разработчиков GitHub показал, что Copilot вдвое сокращает время, необходимое для выполнения определенных задач кодирования, и повышает общую удовлетворенность разработчиков своей работой.

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

«Чтобы устранить все эти неясности в англоязычной письменной спецификации, необходимо постепенное уточнение, некий диалог между человеком и машиной», — сказал Питер Шраммель , соучредитель компании Diffblue , которая автоматизирует написание модульных тестов для Java.

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

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

Согласно их статье, TiCoder повышает точность автоматически сгенерированного кода до 85 процентов с 48 процентов при оценке в тесте Mostly Basic Programming Problems (MBPP). MBPP, предназначенный для оценки машинно-генерируемого кода, состоит из примерно 1000 задач программирования на Python, созданных с помощью краудсорсинга, которые могут быть решены программистами начального уровня.

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

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

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

Согласно опросу, проведенному Diffblue , разработчики тратят примерно 35% своего времени на написание тестов для контроля качества (в отличие от написания кода, предназначенного для производственного использования), поэтому можно добиться значительного повышения производительности, просто автоматизировав часть этого.

Между тем, пакеты Copilot от Github, CodeWhisperer от Amazon и помощника по программированию AI можно использовать в качестве интерактивных инструментов автозавершения для написания модульных тестов. Программисту даются предложения, и он выбирает тот, который, по его мнению, будет работать лучше всего. Система Diffblue, называемая Diffblue Cover , использует обучение с подкреплением для автоматического написания модульных тестов без вмешательства человека.

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

AlphaCode использует архитектуру преобразователя кодер-декодер , сначала кодируя описание задачи на естественном языке, а затем декодируя полученный вектор в код для решения.

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

Для точной настройки модели DeepMind использовала 15 000 пар описаний проблем на естественном языке и успешные кодовые решения из прошлых соревнований по кодированию, чтобы создать специализированный набор данных примеров ввода-вывода.

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

«Я не верю, что ИИ хоть сколько-нибудь заменит разработчиков-людей. Это уберет обыденные шаблонные вещи, которые люди должны делать, и они смогут сосредоточиться на более важных вещах».
— Васи Филомин, Амазонка

Последним шагом было создание множества решений, а затем использование алгоритма фильтрации для выбора наилучшего. «Мы создали множество различных программных возможностей, по существу сэмплируя языковую модель почти миллион раз», — сказал Ориол Виньялс , руководитель группы глубокого обучения DeepMind .

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

Чтобы протестировать систему, DeepMind представила 10 программ, написанных на AlphaCode, для участия в соревновании по программированию на популярной платформе Codeforces , где ее решения вошли в число 54% ​​лучших.

«Чтобы сгенерировать программу, вы просто напишете ее на естественном языке, кодирование не потребуется, а решение появится на другом конце?» – риторически спросил Виньялс в недавнем интервью. "Я так считаю."

Виньялс и другие предупреждают, что для достижения этой цели потребуется время, возможно, десятилетия. «Мы все еще очень далеки от того, чтобы человек мог сообщить компьютеру о требованиях к произвольной сложной компьютерной программе и автоматически закодировать ее», — сказал Эндрю Нг , основатель и генеральный директор Landing AI. Пионер искусственного интеллекта и основатель Google Brain .

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

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

«Я не верю, что ИИ хоть сколько-нибудь близок к замене разработчиков-людей», — сказал Филомин из Amazon. «Это уберет обыденные, стандартные вещи, которые люди должны делать, и они смогут сосредоточиться на вещах с более высокой ценностью».

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

«Разработчики программного обеспечения не потеряют работу из-за того, что их заменит инструмент автоматизации», — сказал он. «Всегда будет больше программного обеспечения, которое нужно написать».