Искусственный интеллект, и в особенности генеративный ИИ на основе больших языковых моделей (large language model, LLM), может перевернуть жизни многих кодеров. Но некоторые специалисты говорят, что ИИ не заменит живых программистов… по крайней мере, сразу.

«Вам стоит беспокоиться о людях, которые используют заменяющий вас ИИ», — говорит докторант биомедицинской инженерии Калифорнийского университета и CEO центра исследований медицинского ИИ MedARC Танишк Мэтью Эйбрехем.

Как же разработчикам ПО стать более полезными и актуальными в надвигающуюся эпоху кодинга на основе LLM? Мы предложим советы и методики для выживания и процветания кодеров в мире генеративного ИИ.

Придерживайтесь основ и рекомендаций


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

«Я считаю, что ИИ способен существенно повысить производительность разработчиков ПО, но разработка ПО — это гораздо больше, чем просто генерация кода, это ещё и выявление требований пользователей, отладка, тестирование и многое другое», — рассказывает аспирант Приян Вайтхилингам, работающий на пересечении человеко-компьютерного взаимодействия и языков программирования в John A. Paulson School of Engineering and Applied Sciences Гарвардского университета.

Один из наиболее неотъемлемых навыков программиста по-прежнему остаётся сферой живых кодеров — это решение задач. Анализ задачи и поиск изящного решения — это всё ещё высоко ценимый умение кодера.

«В этом есть аспект творчества, и многие эти навыки решения задач важнее, чем языки или инструменты», — говорит член Python Software Foundation, сооснователь и CEO Explosion Инес Монтани. Explosion — это компания, занимающаяся созданием инструментов разработчиков для ИИ и обработки естественного языка. «Не попадайте в ловушку, сравнивая себя с ИИ, который в большей или меньшей степени является статистическим результатом работы большой модели. Есть различия в том, что делает разработчики и выдаёт модель — разработчик не только пишет произвольные строки кода».

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

«Именно живой кодер по-прежнему должен определять структуру кода, нужные абстракции вокруг него для упорядочивания, а также различные интерфейсы», — рассказывает заместитель директора и COO Computer Science and Artificial Intelligence Laboratory MIT Армандо Солар-Лезама. «Всё это очень важно для практики разработки ПО, и эти аспекты останутся с нами ещё долго».

Найдите инструмент, отвечающий вашим потребностям


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

Например, GitHub Copilot и другие ИИ-помощники в кодинге могут дополнять программирование, предлагая подсказки во время написания кода. ChatGPT и Google Bard, с другой стороны, ведут себя больше как разговорные ИИ-программисты и могут использоваться для ответов на вопросы об API (интерфейсах прикладного программирования) или для генерации фрагментов кода. С другой стороны, ChatGPT и Bard компании Google могут действовать в качестве разговорных ИИ-программистов, которых можно использовать для ответов на вопросы об API для генерации фрагментов кода.

Сложность в том, что нужно экспериментировать. Играть с ИИ-инструментами, разбираться, как они работают, учитывать качество результатов их работы, но и не забывать о возможностях других инструментов. «ИИ — это стремительно развивающаяся сфера. Нельзя просто остановиться на одном инструменте и использовать его до конца жизни, необходимо быстро адаптироваться к новым», — говорит Эйбрехем.

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

Самое главное — чёткие и конкретные разговоры


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

При работе с ИИ-программистами вам нужно найти наилучший способ формирования промтов. Здесь нам на помощь приходит промт-инжиниринг.

Эйбрехем предлагает использовать промты в виде цепочки рассуждений. Эта методика заключается в стратегии «разделяй и властвуй», когда вы разбиваете задачу на несколько этапов и реализуете каждый для решения всей задачи. «Если попросить модель сделать слишком много за раз, это может привести к катастрофе. Вам нужно, чтобы она могла работать с посильными фрагментами информации и создавала посильные фрагменты кода».

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

«Обращайтесь с ней почти как с умным стажёром, много знающим о теме, но не особо опытным», — говорит Эйбрехем.

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

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

Эйбрехем рекомендует начать с OpenAI Cookbook, в которой есть разделы по библиотекам и инструментам промтинга, инструкции и видеокурсы по составлению промтов, а Вайтхилингам советует прочитать Illustrated Transformer, чтобы узнать больше о моделях и основах машинного обучения.

Будьте критичны и осознавайте риски


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

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

Возможно, стоит взглянуть шире на эти модели и ответить на следующие вопросы: на каких данных обучалась эта модель? Что отфильтровано и не включено в эти данные? Насколько стары обучающие данные, на какой версии языка программирования, пакете ПО или библиотеке обучалась модель? Ответы на эти вопросы могут повлиять на результаты и предоставить больше контекста о них.

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

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

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

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

«Одно из свойств опытных разработчиков ПО — осознание большинства распространённых уязвимостей в коде и вариантов того, как код может становиться уязвимым», — говорит Солар-Лезама. «У них развивается интуиция о том, на что стоит обращать внимание и что является „красными флагами“. В будущем эти методики станут более важной частью инструментария разработчиков ПО».

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

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


  1. mib
    04.08.2023 12:27
    +1

    Мне бы подошло такое: я пишу код на одном мониторе, а на другом мониторе - окошко и там появляется информация: Неплохо! продолжай!

    или "в строке 20 можно перфразировать вот так"

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


    1. berng
      04.08.2023 12:27

      Можно и дальше пойти. Пишете вы код, а на втором мониторе окошко: "о, какой интересный код написали, молодец! Перешлю-ка я его тихонько дяде Васе, он над похожей проблемой уже 2й год бьется и решить не может, а ему ваш код пригодится."


      1. qw1
        04.08.2023 12:27
        +1

        Если бы дело было только в коде.


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


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


        1. berng
          04.08.2023 12:27

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

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


          1. qw1
            04.08.2023 12:27

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


            1. berng
              04.08.2023 12:27

              Формально да. Просто на гитхабе есть приватные и открытые проекты. Пересылка рабочего кода программе (неважно какой) увеличивает количество источников возможных несогласованных утечек кода в случае, если ваш проект приватен.


              1. qw1
                04.08.2023 12:27

                Я хотел обратить внимание, что тут дело не в приватности, а (не)возможности для нейросети понять, что вот этот кусок кода пригодится для вот этого проекта.


  1. anzay911
    04.08.2023 12:27

    Потом же наверняка появится версия Пейд Про Плюс, обученная на понравившихся людям промтах.