Как написание кода с помощью машинного обучения всё (не)изменит

xdhrcwfgwqtgd6djkpueybsp5kk.png

Астрологи объявили неделю (месяц?, год?) кухонной аналитики по AI и ML на Хабре. Настало время для этой статьи, которую я писал два года назад. И вот что удивительно — она должна была устареть, однако не устарела.

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

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

Так что же такого революционного дали нам нейросети применительно к программированию?

Вопрос кажется наивным. Ну серьёзно, это же огромный шаг вперёд — генерация кода по словесному описанию!

На самом деле нет, это не огромный шаг вперёд, это лишь крохотный шажок. Собственно говоря, всё, что мы имеем сейчас, было вполне доступно лет десять назад, просто не было настолько на виду. Узкоспециальные же задачи по написанию кода были реализованы куда как раньше. Сделать API и базу данных по чуть более формальному описанию, чем сейчас это требуется для ChatGPT — перечисление параметров и типов — можно уже лет тридцать как.

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

Не выросло.

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

Не смог.

Языки программирования высокого уровня. Даже не обязательно знать коды прерываний и особенности работы процессора. Любая кухарка сможет управлять компьютером!

Не смогла.

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

Нужны.

Веб входит в жизнь человечества. Любой компьютер может выполнять программы на лету, твой сервер может обслуживать клиентов со всего мира на любой операционной системе, виртуализация позволяет абстрагироваться от физической реализации. Теперь даже дети могут писать несложные программы!

Не смогли.

Конструкторы сайтов, no-code, вот это всё! Теперь ВООБЩЕ не нужно знать как работает компьютер, не нужно знать ни одного языка программирования, надо только желание сделать сайт!

Всё ещё нужно.

Специально обученный чат-бот напишет всё за вас! Только скажите, что вам надо и готово!

⬆ Мы находимся здесь.

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

И вот тут мы вплотную подошли к проблеме написания кода с помощью чатботов. Уже много раз было сказано, что это магия — что-то делается, но никто не знает как. Развернём чуть-чуть это высказывание.

Во-первых, эффективность решения, как минимум, неочевидна. Да, бот написал вам сайт, он даже работает. Как быстро он работает, насколько он надёжен, как много пользователей он может обслуживать в час, сколько ресурсов ему надо и т. д.? Если попросить бота написать клон Facebook и он его напишет, сколько будет открываться ваша личная страница?

Во-вторых, после определённого уровня сложности, время на внесение правок начинает расти экспоненциально. Не знаю, в курсе ли вы, но описание задачи в сложном проекте может иметь сотни страниц. Это для человека, причём для человека в контексте. Предполагаю, что на сегодняшний день предел написания кода с помощью бота — это приложение уровня инженерного калькулятора. Мысленный эксперимент: попробуйте описать все алгоритмы загрузки скриптов, фотографий, содержимого других соцсетей, кэширования и прочего на странице Facebook так, чтобы бот вас понял.

В-третьих, мы не знаем, какие сторонние эффекты создаёт такое приложение. Это магия, помните? Подтянуть картинки, защищённые авторским правом, перепутать негров и горилл (реальная история), вставить мат в тексты, выбрать капчу повышенной сложности, нарушить регуляцию персональных данных, распространять майнеры, вставить рекламу порнхаба — эти и многие другие опции могут быть вам доступны. А могут и не быть. Но пока весь сайт тщательно не изучите, не узнаете.

В общем, не так уж и далеко от нокода. Как-то работает, но как именно мы не знаем, чтобы работало именно так, как надо, придётся приложить много усилий.

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

Тут можно возразить, что теперь-то можно программы писать на русском/английском/суахили/вставьте нужное. Однако, языки программирования, как правило, на порядки эффективнее естественных в описании алгоритмических задач. А ещё надо помнить, что результат изменения описания непредсказуем. Потому, что магия. И надо все возможные непредсказуемости прописывать.

Если попробовать описать это языком математики, то получим что-то примерно такое:
ysldcafc243lbn8perulg8bt87g.png

После красной точки, которую я бы оценил примерно в 10 цикломатической сложности, разрыв будет расти стремительно. Несомненно, что за счёт более умных моделей эта точка будет сдвигаться всё дальше и дальше, например, можно будет написать что-то типа «Создай стандартную систему прав пользователей» вместо описания ролей.

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

Да, человечество получило отличный инструмент для решения несложных задач. Да, этот инструмент будет становиться всё более и более совершенным.

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

Пусть сравнение сильно некорректно, но да, мы получили армию бесплатных программистов. Бесплатных, глупых, неопытных, со склерозом, шизофренией и лёгкой формой дебилизма. А, ещё они под кислотой.

Удачи вам с постановкой задачи.

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

Подписывайтесь на мой канал.

© Habrahabr.ru