В этой заметке я хочу поделиться собственным опытом использования ИИ-инструментов в моих программных проектах, а также своими соображениями о реальности полной передачи программирования в руки ИИ и тем самым - исчезновения профессии программиста.
На первый взгляд - такие ожидания не беспочвенны. В самом деле: ведь качество ответов на запросы общего характера между ChatGPT 2 и ChatGPT 3.5 выросло с примерно 20% до примерно 80% только за счёт увеличения объёма обучающих данных и наращивания мощности используемых серверов. Может, скормить системе все программные проекты с открытым кодом, прикупить графических карт и можно будет всех или большинство программистов заменить на ИИ? Другими словами, программировать в аутсорсинге в стране под названием ИИ?
Иных уж нет, а те далече…
А.С. Пушкин
Всю свою профессиональную жизнь я занимался программированием и архитектурой ИТ-систем. Последние тридцать лет я занимался этим в Германии.
Я не буду сыпать соль на раны и вспоминать, что три десятилетия назад индустрия Германии в целом и ИТ в частности были на подъёме, а вот сегодня…
Я сфокусируюсь на аутсорсинге в ИТ-индустрии.
Тогдашние менеджеры тогдашних немецких ИТ-гигантов примерно с середины нулевых годов стали интенсивно пробовать перевести программирование в аутсорсинг. Сначала в Индию, потом в Китай, пока в конце-концов, после многих промахов и потерь они остановились на России и странах восточной Европы. Хотя попытки найти счастливое партнёрство в Индии мы видим до сих пор.
Конкретные финансовые выгоды процесса аутсорсинга были неочевидны, но успехи декларировались декретами, консультанты получали свои зарплаты, менеджеры - свои бонусы и уходили гробить другие фирмы.
А программистам, тестерам, администраторам предлагали выходное пособие, либо пробовать переквалифицироваться в менеджеров или архитекторов.
Да вот беда - в аутсортинговых командах появлялись свои архитекторы, которые из-за близости к разработчикам разбирались в проблематике куда лучше оставшихся в фирмах-заказчиках. Так что менеджеры проектов удалили своих архитекторов как ненужное звено.
Но и многим менеджерам проектов пришлось уйти по той же причине. Вышестоящие менеджеры или непосредственные заказчики проектов тоже начинали видеть, что сотрудники аутсорсинговых фирм куда компетентнее.
Это картина - сделанная крупными мазками, отражает общую тенденцию и в каждом конкретном случае может отличаться в деталях. Важно то, что за эти десятилетия в ИТ Западной Европы выросла поросль менеджеров, для которой нет вопроса, аутсорсить или не аутсорсить. Их научили, что аутсорсить надо. Вопрос в какую страну?
И тут появился ChatGPT и консалтинговые сирены запели сладкие песни о том, что ИИ вскорости совсем заменит программистов. Так может это реально, "аутсорснуть" программный проект не в какую-то дальнюю или ближнюю страну, а в ИИ?
Аутсорсинг и меня не обошёл стороной. Мне, после многих лет добросовестной работы, две фирмы (сначала одна, а через несколько лет другая) предложили уволится с выходным пособием, поскольку менеджеры верили советам консультантов в счастье аутсорсинга. Однако, как сёрфер, меняя галсы и находя подходящую волну, доплывает до берега, так и я благополучно доработал до пенсионного возраста. И кстати, оглядываясь назад, отмечу, что покинул я эти корабли, взявшие курс на аутсорсинг, вовремя.
Став пенсионером, я работаю над своими личными программными проектами и… интенсивно пробую применить в своей работе ИИ.
Еще несколько лет назад достижения ИИ воспринимались большинством землян, за исключением узкой группы энтузиастов, с раздражением. Людям было неприятно узнавать, что изобретён очередной автомат, который обыгрывает всех в ту или иную игру.
И пока это было так, практической пользы от ИИ было немного.
Но с появлением ChatGPT 3.5 ситуация резко изменилась. Этот вариант ИИ не был заточен на решение только одной узкой задачи, а многие задачи стал решать так, что стало можно ожидать от этого реального эффекта. Грех не попробовать его достичь.
Вот и я, когда ChatGPT 3.5 продемонстрировал свои возможности, посвятил ему немало своего времени.
Для начала я смастерил бот в Телеграмме, который пересылал запросы пользователя в ChatGPT, а его ответы обратно пользователю.
ChatGPT тогда не умел воспринимать и генерировать аудио-информацию, поэтому вокруг этой основной функциональности пришлось накрутить Speach-to-Text и Text-to-Speach преобразователи, конвертор аудиоформатов, минимальную логику для общения.
Но вся эта конструкция весьма быстро заработала, что вдохновило меня на относительно глубокое изучение математических основ GPT.
Почти сразу я начал пробовать решать свои текущие задачки программирования с помощью OpenAI.
Делать это через поле ввода на странице OpenAI было весьма неудобно, поэтому я очень возрадовался, когда в VS Code и в IntelliJ появился в виде плагинов GitHub Copilot, а потом в Android Studio - Gemini. Ну и конечно, я сразу же установил Microsoft Copilit, как только о нём услышал. (Кстати, заглавная картинка нарисована им под моим художественным руководством).
К чему я это рассказываю? Нет, не для того, чтобы похвалиться, как подумали некоторое :-). Я хочу подчеркнуть, что я уже около двух лет, весьма интенсивно использую ИИ (преимущественно GitHub Copilot), в своей практической работе.
При этом я не нахожусь под прессом проектных сроков, когда интересы проекта преобладают над интересами сделать его качественно и заодно хорошо освоить подручные технологии. С другой стороны, я не обязан декларировать успех в использовании ИИ, поскольку использовать его в моей работе мне никто не поручал.
Таким образом, у меня была возможность спокойно и вдумчиво пробовать использовать ИИ в своей повседневной проектной деятельности и даже немного экспериментировать с ним. Более того, я время от времени посматривал на YouTube и почитывал статьи о Best Practices использования этих инструментов и убеждался, что ничего особенного, до чего я и сам дошёл, в этих видио не показывают и в статьях не описывают.
Самое удивительное, что я для себя отмечаю после двухлетнего использования ИИ в лице GitHub Copilot - я чувствую к нему психологическую привязанность, как к коллеге.
Чтобы это объяснить подробнее, я должен немного рассказать о моём отношении к коллегам.
Моя профессиональная жизнь так сложилась, что мне пришлось много поработать в проектах, когда качественный продукт было необходимо было создать быстро. Такое возможно только если в команде присутствует необходимое количество профессионалов высокой пробы, которые к тому же готовы творчески кооперировать друг с другом. Замечу, что это общее правило для любых творческих коллективных проектов. Оно действительно и для рок-групп и для футбольных команд.
За долгие годы у меня выработалось умении быстро оценивать коллег (которых я редко мог выбирать, как и они меня). И когда на горизонте появился ИИ в обличье плагина GitHub Copilot, я инстинктивно стал и к нему применять мои критерии.
Я стал анализировать, что он может делать лучше меня, а что хуже, насколько просто и приятно с ним коммуницировать, какие новые, более трудные задачи можно попробовать ему поручить.
Вот мои оценки его способностей по итогам почти двухлетнего сотрудничества.
Что ИИ (GitHub Copilot) делает хорошо, зачастую лучше меня:
1. Перевод с одного человеческого языка на другой,
2. Генерация простых программных текстов по точно заданной спецификации, когда предполагается вызов от 2 до 5 функций.
3. Документирование функций и небольших классов
В особенности хорош ИИ при выполнении задач второго типа. В этом случае быстрее попросить ИИ, чем искать в документации. Особенно, если это касается технологии, которую я уже пару месяцев не использовал. Например, большинство из нас использует для своих проектов Gradle и GitHUB Actions, но необходимость что-то изменить в этих скриптах возникает раз в квартал. А к этому времени у меня лично мудрёные детали этих технологий из головы выветриваются.
Ответы ИИ в плагине оборачиваются очень вежливыми объяснениями и нередко сопровождаются дружелюбными, зачастую дельными советами, что в общении с коллегами из плоти и крови бывает не так уж часто.
Это порождает ответную симпатию и привязанность. Это больше чем удовольствие от использования какого-либо замечательного инструмента и желания пользоваться им.
Мне много раз приходилось говорить самому себе: “Стоп! Это не человек, сидящий на том конце провода написал этот код или ответил на твой вопрос. Это бездушная система, автомат!”
При всей своей дружелюбности ИИ постоянно давал и поводы для раздражения. Вот важнейшие из них (по моей субъективной шкале):
Решения ИИ зачастую похожи на работающие, но… - не работают. К сожалению, ИИ до сих пор не проверяет предлагаемый код.
Когда заставляешь ИИ улучшить его решение, становится, как правило, только хуже.
ИИ зачастую “не понимает” логику постановки задачи и пытается её решить слишком буквально.
ИИ не учится на своих ошибках. При совместных поисках решения он “без угрызений совести” заново предлагает решения, отвергнутые пару итераций назад.
У ИИ пока большие проблемы с планированием объёмных задач (более 10 строк кода), не говоря о более объёмных решениях, где требуется архитектурное мышление.
ИИ “отстаёт в развитии” во многих быстро развивающихся областях, как например, Angular с его полугодовыми релизными циклами или Kotlin Multiplatform, для которого пока в Интернете существует не так много материалов.
Профессор математики Alexandre Borovic, поэксперементировав с OpenAI, задавая ему студенческие задачи по университетскому курсу высшей математики, сравнил его с нахальным троечником, который знает только верхи, никогда не признаётся в собственном незнании и отважно берётся решать любые математические задачи.
Я же, со своей колокольни, сравнил для себя ИИ в обличье GitHub Copilot со странным коллегой, который очень фрагментарно, но удивительно глубоко знает отдельные области программирования, обладает огромнейшими познаниями различных деталей, но который плохо умеет использовать свои знания и которому надо ещё очень многому учиться.
И вот тут мы возвращаемся к вопросу, поставленному в начале этой статьи, но уже в двух конкретных вариантах:
Сколько процентов моей деятельности в моих конкретных проектах можно сегодня делегировать ИИ?
Можно ли ожидать, что в ближайшие годы эта доля приблизится к 100%?
Какова нынешняя эффективность ИИ в программировании?
Мои личные оценки полезности ИИ в моей конкретной программисткой деятельности совпадают со многими другими подобными оценками. Да, в некоторых специальных видах деятельности, напримр - написании рутинных тестов для функций некоторого известного интерфейса ИИ в несколько раз эффективнее меня. Но заниматься мне этим приходится не так часто. И если рассмотреть всё, что я делаю для проекта в течении недели, его помощь я оцениваю на уровне 10-12%. У программистов в фирмах этот показатель будет ещё ниже, поскольку им необходимо участвовать в разнообразных митингах и заниматься другой, не связанной с программированием деятельностью.
Росла ли эффективность ИИ за последнее время?
Мой ответ на этот вопрос - если и росла, то незначительно.
С одной стороны, я снимаю шляпу перед разработчиками плагина GitHub Copilot. Обновления плагина происходили чуть не каждый день, он становился всё привлекательнее, работал стабильнее.
Вместе с тем, я согласен с мнением, что у системы наблюдается эффект, названный "деменцией ИИ". Как мне кажется, количество неадекватных ответов на мои вопросы со временем растёт.
Мне нравятся два возможных объяснений этого явления. Во первых, системе “скармиливают” всё менее ценные информационные источники и тем самым качество хранимых в системе параметров падает. С другой стороны, различные ИИ системы именно в последние годы сами стали интенсивными источниками информационного мусора в Интернете и конкретно - не проверенных на практике программных решений, замыкая тем самым порочный круг.
Можно ли ожидать резкого скачка эффективности ИИ в программировании в ближайшие месяцы или несколько лет?
Пока мои личные прогнозы в этом отношении отрицательные. Мои основные аргументы такие:
1. Современные технологии, если они развиваются, то развиваются с чудовищной скоростью. (Возможно, мы действительно движемся к точке сингулярности, но это - отдельная тема). А в области применения ИИ в программировании такого развития последние пару лет мы не видим. Технология стала удобнее, вошла в массы, обросла дополнительными сервисами, но её главная часть застряла на месте.
2. Надежды на прогресс в рассматриваемой нами области связан прежде всего с подходом GPT. Это далеко не единственный подход в ИИ, но успехи в распознавании образов или речи пока непонятно как применить к автоматизации программирования. А именно в области GPT после ошеломляющего успеха ChatGPT 3.5 прогресс перестал расти по экспоненте.
3. О новых ИИ-подходах, способных реально заменить GPT в автоматизации программирования, пока не слышно (по крайней мере мне).
4. Попытки “усилить” типа GPT RAG (Retrieval Augmented Generation)[1], LLM-Modulo approach[2], Multi-Agent AI Systems[3] тоже пока не дали прорывных результатов.
Так что… аутсорсинг в страну ИИ, как мне представляется, пока откладывается.
Full Fine-Tuning, PEFT, Prompt Engineering, and RAG: Which One Is Right for You?
Kambhampati, S., Valmeekam, K., Guan, L., Verma, M., Stechly, K., Bhambri, S., Saldyt, L., & Murthy, A. (2024). LLMs Can’t Plan, But Can Help Planning in LLM-Modulo Frameworks. arXiv:2402.01817.
Combining LLMs with Other AI Tools: One Desirable Future of Intelligent Systems.
Иллюстрация сделана Microsoft Copilot по промту автора.
Эту тему мы обсуждали в моей Телеграм-группе “Материализация идей”. Но в целом группа посвящена ментальным моделям программирования и нашей жизни. Заходите, посмотрите. Если покажется интересным - оставайтесь.
А ещё я пишу книгу “Мемуары кочевого программиста: байки, были, думы”. Она доступна для чтения на https://proza.ru/avtor/vsirotin
Один из проектов, в котором я пытался применять ИИ - KotUniL:
Зачем он нужен и как он может осчастливить человечество, я описал в серии статей, которые начинаются вот этой: Магия размерностей и магия Котлина. Часть первая: Введение в KotUniL.