Раньше мы писали на Assembler, но с современными языками нам не нужно знать как он работает!
"...пришло время писать на естественном языке, скармливать его AI и пофиг в какой код он превращается". Такая аргументация прозвучала от программиста в одной из жарких дискуссий, на утверждение "людям все равно нужно понимать как работает код".
Звучит убедительно на первый взгляд, не так ли? Но давайте разберемся.
За обработку естественного языка отвечает биологическая машина - наш мозг. Естественный язык формируется из картины мира и формирует ее. У нас бы не было проблем договариваться, не существовало фразы "Я тебя неправильно понял" если бы естественный язык на 100% был формален по отношению к сущности передаваемой информации. Он слишком емкий и полагается на многослойный контекст нашего опыта, убеждений, предпочтений и многое другое.
Современные языки программирования представляют собой формальный способ описать поведение машины. Компиляторы также подчиненны формальной логике. Один и тот же высокоуровневый код скомпилируется в один и тот же машинный (для конкретной архитектуры, естессно).
Таким образом, будь у нас компилятор, который случайно бы упустил пару строк или придумал пару других, это сделало бы написание надежных программ невозможным.
Возвращаясь к AI, даже речи нет, что каждый запрос на генерацию произведет каждый раз одинаковый код. Он будет разным в пределах отдельных запросов к одной модели, и кардинально другим при смене моделей. Одна модель склонна тяготеть к одним кодовым формам, следующая будет тяготеть к совсем другим.
Вы можете справедливо заметить - мы же пользуемся приемами формализации задачи в спецификации! Да, верно, мы сужаем (как умеем) естественный язык до некоего формального оптимума, комфортного людям разных специализаций. Но и он не лишен двусмысленности. То есть, чтобы AI создал нам определенный код с какой-то гарантией, нам нужно дать прямое указание на генерацию конкретного поведения программы вплоть до отдельных строк. Де-факто, это то же программирование, только без строго синтаксиса. Но даже в этом случае мы не можем (в данный момент) утверждать, что сгенерированный код соответствует ожиданиям.
Стартап широко известного в узких кругах Андрея Бреслава CodeSpeak пытается сыграть на этом поле. Его идея как раз в построчном описании генерируемого нейронкой результата. Application.cs.md по задумке должен превратиться в Application.cs, что должно дать выигрыш в уменьшении кодовой базы до нескольких раз и снятия требований к знанию синтаксиса конкретного языка для изменения программы - его смогут читать и понимать не только программисты. Идея интересная, но:
- как дебажить ошибки не связанные с требованиями? Так нам все еще нужно знать асинхронную модель Java или CLR?
- как, не проваливаясь к синтаксису ЯП, связать код объявленный в модуле А с кодом в модуле Б?
- как отлаживать поэтический стиль Пети, который генерирует код с ошибкой?
Если все это требует перехода к формализму синтаксиса ЯП, то выигрыша как будто бы и нет.
Перед тем как закруглиться, мне хотелось бы озвучить вот какую мысль. Умная генерация текста, это бесспорно хорошо, где-то мы становимся продуктивнее, очень неравномерно и совсем не в тех местах, о которых талдычат AI-фанатики на каждом углу, не создававшие ничего серьезнее прототипов с кодовым мусором внутри. Как программисты, создающие промышленный код, мы в той же точке, что и до. Чтобы наступило завтра, AI должен стать единственной программой с которой взаимодействуют люди и машины для выполнения любых задач. А изобилие программ и их написание должно уйти в прошлое. Только девайс и AI. Но боюсь это перспектива не ближайших лет.
Тизер. В следующем посте обсудим в каком на самом деле состоянии сейчас рынок труда. Оставайтесь на связи с MachineHead.