Что вообще такое «автоматическое программирование»?

Среди штатных программистов есть некоторый страх, что когда-нибудь, рано или поздно, их работу настигнет ИИ (слежу за вами, GPT-3).

Что они собираются делать?

Синтез программы

Мой путь исследования ИИ начался почти 40 лет назад, когда я пытался решить именно проблему «автоматического» программирования ИИ.

Еще в 1980-х я был во Франции, заканчивая свою Ph.D. Диссертация по теме Синтез программ, что мы привыкли называть автоматическим программированием, выполняемым ИИ. Я знал всех ведущих исследователей международного сообщества Program Synthesis.

Хотя я получил некоторые предварительные результаты (в том числе защитил кандидатскую диссертацию!), вся эта штука с синтезом программ оказалась гораздо более сложной задачей, чем казалось. В последующие годы он вышел из моды.

Позже я встретил некоторых исследователей Program Synthesis, которые сказали мне, что занимаются чем-то другим.

И я тоже.

Та же история, что и с автоматическим переводом

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

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

Но после 2010 года – почти 50 лет спустя – новаторские результаты в области перевода наконец привели к практическим результатам.

В 2012 году я разговаривал с Францем Охом, тогдашним руководителем отдела перевода в Google, и он любезно рассказал мне об ограничениях статистического перевода в Google.

Наконец, в текущем десятилетии у нас появляются приемлемые инструменты перевода, доступные широкой публике.

Три смерти

Сафи Бахколл, автор книги Луншоты, утверждает, что по-настоящему революционные инновации должны пережить три смерти. Так случилось с радаром, с очень успешными лекарствами, которые несколько раз отвергались, прежде чем получили всеобщее признание… и с автоматическим переводом.

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

Что вы подразумеваете под «автоматическим программированием»?

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

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

Дело в том, что раньше программирование означало построение последовательностей машинных кодов.

Поэтому, когда Джон Бэкус и его команда разработали FORTRAN с инструкциями «высокого уровня», которые позже были переведены в несколько машинных инструкций, некоторые называли это «автоматическим программированием». И в некотором смысле это имело смысл, потому что вы не предоставили машинные коды; вы только что сказали компьютеру, что делать… на ФОРТРАНЕ.

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

Дональд Кнут, автор книги «Искусство программирования» (библии программирования для многих), настоятельно советовал придерживаться ассемблера. По его словам, «понимая машинно-ориентированный язык, программист склонен использовать гораздо более эффективный метод; это гораздо ближе к реальности».

Является ли программирование высокого уровня «автоматизированным программированием»?

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

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

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

Даже современные популярные языки программирования, такие как Javascript, Swift, Python, C# и Go, не справятся с этой задачей.

И что? Будет ли что-то квалифицироваться как «автоматическое программирование»?

Что такое автоматическое программирование

Вот мое «официальное» определение автоматизированного программирования:

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

Короче говоря, любой программист получает что и сообщает как.

При автоматическом программировании программирование выполняется машиной.

Давайте проверим наше определение «автоматического программирования» с помощью программирования без кода:

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

Не в соответствии с определением выше.

Для конкретной программы Bubble вы нигде не можете написать, что программа должна делать (кроме комментариев, конечно). Преобразование из "что" в "как" полностью лежит на программисте.

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

Является ли кодирование GPT-3 автоматизированным программированием?

Есть несколько передовых инструментов для помощи программистам, созданных на основе технологий глубокого обучения, в частности, Открытый AI’s GPT-3.

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

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

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

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

Последние мысли

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

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

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

Реальность такова, что трудно правильно сформулировать требования.

Даже если программисты пишут только требования, это тоже работа и нетривиальная точно.

Ресурсы