В 2017 году Андрей Карпатый, тогда директор по ИИ в Tesla, опубликовал эссе, в котором описал переход от Software 2.0 к Software 3.0. В Software 2.0 код пишется не человеком, а нейросетью в виде весов, которые трудно интерпретировать. Software 3.0, по его мысли, — это эра, когда разработка программного обеспечения сводится к формулировке задачи на естественном языке, а генеративный ИИ превращает промпт в работающий код. Карпатый даже назвал английский «самым горячим языком программирования».

Однако недавняя дискуссия Кирилла Меньшова из Сбера, Дмитрия Иванова из Яндекса и Никиты Соболева, разработчика open-source, показала, что переход к Software 3.0 сопряжен с фундаментальными философскими проблемами. Соболев заметил, что для точности спецификаций на естественном языке придется разработать подвид языка — язык спецификаций, то есть те же формальные методы. Это противоречит оптимистичному посылу Карпатого о свободе общения с машиной.

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

Для Software 3.0 это означает, что промпт на естественном языке всегда будет неоднозначным. Контекст автора и машины может не совпадать, а опыт каждой «думающей» машины уникален. Работы Московско-тартуской семиотической школы Ю.М. Лотмана подчеркивают, что бесшовно соединить две системы знаний практически невозможно. Это ставит под сомнение саму идею, что любой человек, способный сформулировать задачу, сможет написать код с помощью GenAI.

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