ПРЕДИСЛОВИЕ №1
Давайте сразу условимся, что то, что сейчас называют AI - это не искусственный интеллект в понимании, например, писателей-фантастов. AI - это машина прогнозов. Очень-очень грубо говоря, эта машина прочитала огромное количество текстов (на общую тематику или специализированных), затем выделила в них “закономерности”, и теперь при генерации ответа “угадывает”, какое слово (а точнее - токен) должно следовать дальше на основе контекста диалога.
Если привести практический пример, то если вы спросите сферический в вакууме AI, сколько будет 2 + 2, то он ответит “4” не потому что он знает что такое сложение, а потому что в миллиардах строк текста, что он прочитал, этот пример хоть пару раз да попадался. Если вы зададите более уникальный вопрос, скажем, сколько будет 456684268 * 341354354, то AI вызовет подпрограмму-калькулятор.
Именно поэтому у AI есть то, что мы называем “галлюцинациями”, т.е. внезапная деградация смысла у ответов AI, вплоть до откровенного бреда. Для машины это не бред, просто прогноз “ушёл не туда”.
ПРЕДИСЛОВИЕ №2
Я начал писать программы задолго до того, как появились генеративные нейросети (далее будем называть их AI). Очень задолго. И программирование для меня всегда обладало свойствами искусства. Код можно писать плохо, и тогда это презрительно называлось “говнокод”, “спагетти-код”. Можно было писать просто хорошо и добротно. А можно было выжимать из каждой строчки максимум смысла, впихивая в считанные кило- и мегабайты игры и приложения, ставшие легендами минималистичности и производительности, и задававшие стандарты качества годами.
С появлением AI начались тревожные сигналы, возвещающие об угрозе очень многим искусствам. Изобразительное искусство, написание музыки, поэзия, кинематограф - всё находится под ударом. AI предлагает дешёвый и быстрый способ генерации контента; не нужно теперь быть художником или искать художника, чтобы написать картину. И чтобы создать программу, теперь не обязательно быть программистом. “Почему же это плохо? Хорошо же!”, - скажет большинство людей, “теперь каждый сможет нагенерировать себе всё что ему хочется за очень малую плату!”.
Я же считаю, что польза AI не столь однозначна. И нет, я не боюсь что AI “отберёт у меня работу”. Исчезнут одни работы, появятся другие. Меня страшит нечто другое, нечто, что можно приблизительно описать словами “мы тупеем” и “мы привыкаем к миру посредственности”. Если попытаться раскрыть эти мысли в контексте программирования, то получается вот что:
- Если ты делегируешь выполнение какой-либо работы кому-то другому, неважно кому - человеку или машине, то твои навыки атрофируются. Думаю, с этим никто не будет спорить, с этим фактом люди сталкивались задолго до изобретения первого калькулятора. Однако особая опасность состоит в том, что мы делегируем AI работу программиста начиная с самых “нижних”, и одновременно самых “базовых” уровней производства. Начинающим программистам негде набраться опыта - это у них забирает AI. Программисты замещаются операторами AI - об этом в открытую говорят все. А выключат интернет, или выключат AI - что делать будем..? Тут уместно вставить виденное на просторах Интернета изречение: “Я думал, что роботы возьмут на себя тяжёлую и примитивную работу, освободив людей для творчества; а получилось наоборот…”.
- В самой сути AI - посредственность. Их ведь тренируют не на некоем Золотом Фонде Слепяще Великолепного Безупречного Кода, а на… ну, просто открытых кодовых базах. Там код самого разного качества, от действительно произведений искусства до говнокода. В среднем - посредственность. Да, есть RLHF1 и прочие способы сместить ситуацию в лучшую сторону, но это не панацея. В итоге, утрируя, пока речь идёт про простейшие задачи уровня “создай функцию, возвращающую квадрат числа”, AI справляется хорошо; как только речь заходит про сложные составные системы, AI начинает чудить: смешивать разные архитектурные стили, использовать неподходящие технологии, писать запутанный и повторяющий сам себя код. Писк моды адептов AI сейчас - писать 100500 инструкций для AI, насильно “вбивая” его в рамки нормальности. Работает это, по моему опыту, ну так себе; да и времени жрёт прилично, вплоть до того, что прибавка в производительности за счёт использования AI становится незаметной.
Мой босс, когда мы слегка поспорили на тему применимости AI, сравнил пару “программирование руками - программирования через AI” с парой “программирование на ассемблере2 - программирование на языках высокого уровня (ЯВУ)”, т.е. уподобил переход на использование AI с началом использования ЯВУ. Я думаю, это ложная аналогия. ЯВУ лишь повысили скорость разработки за счёт скидывания с программиста нагрузки по ручному описанию низкоуровневого взаимодействия с железом и операционной системой. Уникальный код приложения всё равно остался результатом человеческих усилий и размышлений, просто он опирался на стандартные функции и приёмы кода (которые, в свою очередь, так же были написаны людьми!).
Программирование же с помощью AI - это как делегирование написания кода кому-то. Т.е. фактически это эквивалентно тому, что ты - босс, а AI - твой подчинённый, при этом код пишет преимущественно он, ты лишь даёшь указания и предоставляешь различные ТЗ. Т.е. это не эволюция инструмента, как в случае с ЯВУ, а замена исполнителя.
Фанаты AI скажут: “Пиши инструменты, которые ограничат AI в возможности писать бред. Пиши инструменты, которые позволят количественно оценить качество кода AI. Проверяй работу одного AI другим AI.”. Это всё замечательно, но всё равно это оставляет AI огромное пространство для факапов. Я писал мультиагентный вайб-код, и всё равно он был… далёк от идеала. В какой-то момент я понял, что я трачу на вайб-код время, сопоставимое с ручным написанием кода, и при этом я понятия не имею, как приложение работает.
А ещё это недёшево. Разработчики покупают себе подписки на Copilot и Claude, и думают, что цена останется такой навсегда. Однако сейчас в сектор AI вкачиваются баснословные деньги инвесторов; как AI-сервисы от крупных компаний, так и AI-стартапы растут как на дрожжах. Но однажды этот денежный поток иссякнет, и все начнут платить реальную стоимость инференса4, а не сидеть, по сути, на субсидиях от инвесторов, как сейчас.
Под конец сделаю оговорку: я не AI-хейтер. AI - очень полезный инструмент, когда он помогает человеку-разработчику с рутинными задачами. Написать тесты, написать комментарии, написать boilerplate3-код, сделать иную рутинную работу - всё это AI может, и я использую его таким образом каждый день, и доволен результатом.
Наверное, здесь стоит подвести итог. По моему мнению, AI — отличный ассистент, но плохой автор. Хороший код по-прежнему пишут люди, а AI лишь помогает им не отвлекаться на ерунду.
P.S. Пока я писал этот текст, меня перекинули на проект, который нужно было писать целиком вайбом с нуля. Совсем и полностью целиком. Что можно сказать… Когда один человек пишет прототип - выглядит как рабочая схема. Понятно, что там рассадник багов, но, наверное, это можно побороть итерационно на протяжении длительного времени. Но вот когда была дана команда сделать вторую версию силами нескольких разработчиков - всё превратилось в унылое болото. Ярчайший показатель - руководитель проекта не знает, что из функционала реализовано, а что нет, потому что этого толком не знают сами разработчики.
P.P.S. Пока статья лежала в черновиках, упомянутый в постскиптуме вайб-проект успешно… отказался от вайба. То есть руководитель проекта прямо признал, что вайб не удался. В итоге сейчас лично я использую AI так, как и писал выше - для бойлерплейт-кода со строгим ревью человеком. ИМХО, это довольно эффективно, и при этом я точно знаю, как код работает.