Совещание из недалёкого будущего?
Совещание из недалёкого будущего?

В этой заметке я хочу поделиться собственным опытом использования ИИ-инструментов в моих программных проектах, а также своими соображениями о реальности полной передачи программирования в руки ИИ и тем самым - исчезновения профессии программиста. 

На первый взгляд - такие ожидания не беспочвенны. В самом деле: ведь качество ответов на запросы общего характера между 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 - я чувствую к нему психологическую привязанность, как к коллеге.

Чтобы это объяснить подробнее, я должен немного рассказать о моём отношении к коллегам. 

О коллегах вообще и GPT в частности

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

За долгие годы у меня выработалось умении быстро оценивать коллег (которых я редко мог выбирать, как и они меня). И когда на горизонте появился ИИ в обличье плагина GitHub Copilot, я инстинктивно стал и к нему применять мои критерии. 

Я стал анализировать, что он может делать лучше меня, а что хуже, насколько просто и приятно с ним коммуницировать, какие новые, более трудные задачи можно попробовать ему поручить. 

Вот мои оценки его способностей по итогам почти двухлетнего сотрудничества. 

Что ИИ (GitHub Copilot) делает хорошо, зачастую лучше меня:

1. Перевод с одного человеческого языка на другой,

2. Генерация простых программных текстов по точно заданной спецификации, когда предполагается вызов от 2 до 5 функций. 

3. Документирование функций и небольших классов

В особенности хорош ИИ при выполнении задач второго типа. В этом случае быстрее попросить ИИ, чем искать в документации. Особенно, если это касается технологии, которую я уже пару месяцев не использовал.  Например, большинство из нас использует для своих проектов Gradle и GitHUB Actions, но необходимость что-то изменить в этих скриптах возникает раз в квартал. А к этому времени у меня лично мудрёные детали этих технологий из головы выветриваются. 

Ответы ИИ в плагине оборачиваются очень вежливыми объяснениями и нередко сопровождаются дружелюбными, зачастую дельными советами, что в общении с коллегами из плоти и крови бывает не так уж часто. 

Это порождает ответную симпатию и привязанность. Это больше чем удовольствие от использования какого-либо замечательного инструмента и желания пользоваться им. 

Мне много раз приходилось говорить самому себе: “Стоп! Это не человек, сидящий на том конце провода написал этот код или ответил на твой вопрос. Это бездушная система, автомат!”

При всей своей дружелюбности ИИ постоянно давал и поводы для раздражения. Вот важнейшие из них (по моей субъективной шкале):

  1. Решения ИИ зачастую похожи на работающие, но… - не работают. К сожалению, ИИ до сих пор не проверяет предлагаемый код.

  2. Когда заставляешь ИИ улучшить его решение, становится, как правило, только хуже.

  3. ИИ зачастую “не понимает” логику постановки задачи и пытается её решить слишком буквально.  

  4. ИИ не учится на своих ошибках. При совместных поисках решения он “без угрызений совести” заново предлагает решения, отвергнутые пару итераций назад. 

  5. У ИИ пока большие проблемы с планированием объёмных задач (более 10 строк кода), не говоря о более объёмных решениях, где требуется архитектурное мышление.

  6. ИИ “отстаёт в развитии” во многих быстро развивающихся областях, как например, Angular с его полугодовыми релизными циклами или Kotlin Multiplatform, для которого пока в Интернете существует не так много материалов. 

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

Я же, со своей колокольни, сравнил для себя ИИ в обличье GitHub Copilot со странным коллегой, который очень фрагментарно, но удивительно глубоко знает отдельные области программирования, обладает огромнейшими познаниями различных деталей, но который плохо умеет использовать свои знания и которому надо ещё очень многому учиться.

Аутсорсинг в страну ИИ?

И вот тут мы возвращаемся к вопросу, поставленному в начале этой статьи, но уже в двух конкретных вариантах:

  1. Сколько процентов моей деятельности в моих конкретных проектах можно сегодня делегировать ИИ?

  2. Можно ли ожидать, что в ближайшие годы эта доля приблизится к 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] тоже пока не дали прорывных результатов. 

Так что… аутсорсинг в страну ИИ, как мне представляется, пока откладывается.

Литература

  1. Full Fine-Tuning, PEFT, Prompt Engineering, and RAG: Which One Is Right for You?

  2. 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.

  3. Combining LLMs with Other AI Tools: One Desirable Future of Intelligent Systems.


Иллюстрация сделана Microsoft Copilot по промту автора.


Эту тему мы обсуждали в моей Телеграм-группе “Материализация идей”. Но в целом группа посвящена ментальным моделям программирования и нашей жизни. Заходите, посмотрите. Если покажется интересным - оставайтесь.


А ещё я пишу книгу “Мемуары кочевого программиста: байки, были, думы. Она доступна для чтения на https://proza.ru/avtor/vsirotin


Один из проектов, в котором я пытался применять ИИ - KotUniL:

Зачем он нужен и как он может осчастливить человечество, я описал в серии статей, которые начинаются вот этой: Магия размерностей и магия Котлина. Часть первая: Введение в KotUniL. 

Комментарии (20)


  1. nikolz
    03.07.2024 16:29
    +3

    Последние тридцать лет я занимался этим в Германии. ...

    Тогдашние менеджеры тогдашних немецких ИТ-гигантов примерно с середины нулевых годов стали интенсивно пробовать перевести программирование в аутсорсинг. Сначала в Индию, потом в Китай, пока в конце-концов, после многих промахов и потерь они остановились на России и странах восточной Европы. Хотя попытки найти счастливое партнёрство в Индии мы видим до сих пор.

    Вы что-то путаете.

    Вообще-то, 30 лет назад - это не середина нулевых, а середина 90-х.

    И в 90-х я работал в Германии и тогда немцы стали привлекать разработчиков из СССР. А вот из Индии разработчиков в то время привлекали в США. А в Китае не было тогда никаких разработчиков, кроме опять же из СССР.

    Разработчики в Китае появились последние лет 25. Но они уже не только в Германии , но и в США и даже в России.


    1. visirok Автор
      03.07.2024 16:29
      +2

      Да, я начал работать в середине 90-х. В то время в штате немецких фирма уже было немало специалистов из восточной Европы, включая страны бывшего СССР. Но аутсорсинг - т.е. передача всего процесса, стала модной несколько позже.


    1. vitalyvitaly
      03.07.2024 16:29
      +1

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


      1. visirok Автор
        03.07.2024 16:29

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


  1. zloimasskit
    03.07.2024 16:29

    теперь надо подождать пока ии создаст себе подобных ии


    1. GordonFreemann
      03.07.2024 16:29
      +1

      У ИИ нет интенции ни к размножению, ни к созданию своих клонов. Если конечно ему это не запрограммировать. Это не животное.


  1. Marshme
    03.07.2024 16:29
    +1

    Пока openai топчется на месте с gpt-4, конкурент anthropic со своим Claude уже давно обскакал его. Sonnet 3.5 - именно то чего не хватало openai, хотя судя по лживым статьям в интернете, которые почему-то на первых строчках в поиске, может сложится обратное мнение. Его надо самому попробовать, это самый человечный ИИ, который я пробовал, не говоря о его способностях в программировании и вообще, если оценивать его когнитивные возможности... С вашим подходом к ИИ с позиции оценивания как коллеги, было бы интересно услышать от вас аналогичное резюме.


    1. Pol1mus
      03.07.2024 16:29
      +2

      Клод сонет на сайте клода такой же [тупой] как и гпт4о. Даешь ему задачу с простым алгоритмом - выдает тривиальное решение которое делает не то что надо, дальше идет долгий тяни толкай что бы вытащить его из болота и заставит сделать что надо и как надо.

      Просишь его сгенерировать несколько слов размером 5 букв и с обязательным наличием букв и и е в составе и так же получаешь какую то ерунду в ответ. Среди результатов есть слово телик(он говорит что это телевизор такой) и Ветер (даже спрашивать не стал).

      Просишь посчитать что-нибудь - получаешь ответ с большой ошибкой. Когда они уже прикрутят калькулятор? Могут ведь, я к своему гпт боту прикрутил. Он даже иногда его использует Ж)


  1. visirok Автор
    03.07.2024 16:29
    +1

    Я - прагматик. Если этот инструмент в виде плагина появится в расхожих IDE - то почему бы не попробовать?


  1. SemenPetrov
    03.07.2024 16:29
    +3

    А в области применения ИИ в программировании такого развития последние пару лет мы не видим.

    Чат гпт 4 год назад вышел, вполне существенное улучшение качества.

    Плюс надо сказать, что ии сегодня получает хорошие результат там где не требуется гарантированного качества результата. Т.е. картинки, абстрактный текст, музыка - если результат перевалил за "зловещую долину" и ок на 80%, то это уже круто.

    В программировании, математике и т.п. же требуется 100% правильный результат, с эти сложнее.

    И мне кажется что программирование вообще досталось фактически "бесплатно", т.е. при определённом размере сети появилось умение генерировать правдоподобно выглядящие програмки. До определённого размера и сложности можно даже получать работающие результаты (чаще с напильником).

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


  1. gun_dose
    03.07.2024 16:29
    +7

    И если рассмотреть всё, что я делаю для проекта в течении недели, его помощь я оцениваю на уровне 10-12%

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


    1. Kanut
      03.07.2024 16:29
      +1

      Это очень сильно зависит от того что конкретно вы делаете.

      И это однозначно не предел. Если у вас в работе куча monkey code, то польза будет выше. Опять же в моём понимании уже в обозримом будущем ИИ сможет писать более-менее адекватные юнит-тесты. Ну или как минимум меня очень удивит если этого не произойдёт.


      1. gun_dose
        03.07.2024 16:29
        +1

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

        Что касается monkey code, если подразумевается бойлерплэйт, т.е. какие-то повторяющиеся довольно громоздкие конструкции, так для этого в любом фреймворке давным-давно придуманы генераторы кода, которые делают это лучше, чем ИИ, быстрее, бесплатно, без регистраций, и требуют совершенно мизерное количество вычислительных ресурсов.


        1. Kanut
          03.07.2024 16:29
          +1

          Что касается monkey code, если подразумевается бойлерплэйт, т.е. какие-то повторяющиеся довольно громоздкие конструкции, так для этого в любом фреймворке давным-давно придуманы генераторы кода

          Они совсем не обязательно повторяющиеся. Ну то есть банально есть тот же ODB++ формат. Никакой магии там нет. Написать под него парсер это просто куча тупой работы. Но генераторы кода вам его не напишут.


          1. gun_dose
            03.07.2024 16:29
            +1

            Мне кажется, там при использовании ИИ больше времени потратишь на объяснение контекста + проверку, чем если просто напишешь сам.


            1. Kanut
              03.07.2024 16:29
              +2

              Ну мы вот сделали попытку и в итоге получилось вполне себе неплохо. Конечно прошлось допиливать, но всё равно сэкономило кучу времени. Какой-nибудь практикант справился бы не лучше :)

              И как бы ИИ они всё-таки пока развиваются и дальше.


  1. ParaMara
    03.07.2024 16:29
    +1

    ИИ “отстаёт в развитии” во многих быстро развивающихся областях

    Точно не во всех быстро развивающихся?

    Если от ИИ в программировании обнаружится польза, то быстро развивающихся областей станет больше, а пользы от ИИ - меньше.

    Надеюсь, читатели данного коммента самостоятельно обнаружат другие механизмы действия принципа Ле Шателье - Брауна.


  1. janvarev
    03.07.2024 16:29
    +3

    Коллега, я как раз пилю проект для доступа по API к разным GPT (включая Sonnet 3.5, GPT-4o и пр.) - есть в профиле, и несколько статей по нему, и даже есть интеграция с Continue плагином для VS Code и IDEA.

    И тоже, конечно, использую его для программирования - и в целом согласен с вашими выводами.

    1. GPT довольно хорошо работают, когда надо сделать мелкую правку в месте с незнакомой или выветрившейся технологией. Я, например, в первую очередь бекендер, и мне надо было поправить кое-что во фронте на React. Так бы я убился, но GPT предложил осмысленную правку, которая пошла в прод.

    2. Архитектуру, конечно, давать ему нельзя.

    3. У меня на беке используется не очень популярный фреймворк - и есть интересный прием, чтобы работать с ним с помощью ИИ. Надо вначале составить достаточно большой базовый промт, учитывающий вашу архитектуру - у меня он сейчас где-то на 10К символов - с примерами реализаций типовых функций из кода (доступ к БД, проверка прав и пр.). А уже потом просить на основании этого промта сгенерировать новый код - тогда он становится гораздо более подходящий для ситуации. Например, так мне удалось сгенерировать статистический график (выгрузка из БД + хитрое форматирование на фронте, в которое не хотелось вникать) - и код очень хорошо подходил ситуации.


  1. event1
    03.07.2024 16:29

    Ответы ИИ в плагине оборачиваются очень вежливыми объяснениями и нередко сопровождаются дружелюбными, зачастую дельными советами, что в общении с коллегами из плоти и крови бывает не так уж часто.

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


  1. FSA
    03.07.2024 16:29
    +1

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