Привет, Хабр! На связи команда Work Solutions. Мы попросили нашего фронтенд-разработчика Александра Шапорова поделиться опытом работы с функционалом AI ассистента TabNine на реальном проекте. Саша расскажет, ускоряет ли утилита разработку, повышает ли качество кода и делает ли процесс программирования более продуктивным. А также объяснит, почему ассистенты на базе искусственного интеллекта не могут стать незаменимыми помощниками разработчиков в написании кода, и почему ИИ в ближайшее время не сможет полностью заменить программистов.

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

Армия ассистентов и утилит на базе искусственного интеллекта пополняется с каждым днем. Готова поддержать разработчиков в их нелегком деле. Среди ассистентов также появился TabNine. Разберемся, может ли этот «джинн в лампе» стать незаменимым помощником разработчиков в создании кода. 

В этой статье проанализируем примеры кода, сгенерированные AI ассистентом TabNine. Наше исследование не простая теория. Проверим результаты в контексте реального проекта и выясним, насколько код ИИ рабочий. Ответим на вопрос, можно ли использовать ассистента на реальных проектах. Расскажем о своих впечатлениях и результатах. 

Цель

Еще в самом начале, когда только задумались об ассистенте, захотели выяснить: 

Ускорение разработки. Может ли AI расширение для VS Code помочь увеличить скорость разработки, а также сделать этот процесс эффективнее?

Повышение качества кода. Получится ли повысить качество кода, а также сделать его более чистым и структурированным с помощью инструмента?

Улучшение общего восприятия. Сможет ли нейросеть сделать процесс разработки увлекательнее и продуктивнее для программистов? 

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

Процесс проверки ИИ

Примерно 90% кода во время исследования писали в рамках задач на коммерческом проекте. Непростой, с легаси, не маленького размера. Более 50 тысяч строк кода на TypeScript. Еще 10% написали на маленьких проектах, в которых было меньше 1000 строк. 

Использовали IDE VS Code. Выбрали в качестве ассистента — TabNine. Легко интегрируется, есть возможность сразу попробовать бесплатную версию. 

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

AI ассистент Tabnine

Tabnine — это ассистент на базе искусственного интеллекта. Помогает разработчикам писать код. 

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

TabNine также предлагает дополнительные возможности. Например,  умеет генерировать код из промпта и собирать статистику использования. Авторы инструмента не поленились даже добавить специальное меню «лучшее за неделю», куда входят самые удачные подсказки ассистента.

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

Генерация

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

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

Ассистент генерирует практически после каждого слова различные подсказки. Рассмотрим отдельно только уникальные случаи, а это менее 10%. Особенно выделяются вот такие категории:

Автозаполнение очевидного бойлерплейта

Явное дополнение — четыре базовых математических оператора. 

Дополнил на основе кода на пару строк выше, заполнил словарь для i18n. Помимо Safari, должен быть вариант для Chrome.

Генерация однотипных интерфейсов. Здесь описывается интерфейс существующего модуля. Ассистент смог учесть контекст второго открытого файла на соседней вкладке.

Генерация простых компонентов.

В примерах выше ассистент отлично справляется с генерацией прослоечных методов.

Замена справочника

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

Замена программиста

Иногда ассистент генерирует большие, рабочие участки кода. Остается только поправить и уточнить детали.

Наблюдения

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

Подсказки отвлекают и замедляют разработку из-за постоянных проверок. Происходит это так:

  1.  Ты пишешь решение, находишься в состоянии потока

  2. Появляется подсказка, которая отвлекает на себя внимание

  3. Ты читаешь подсказку, разбираешься в ней как в чужом коде

  4. Понимаешь, что подсказка не подходит

  5. Пытаешься вспомнить, о чем думал до того, как появилась подсказка.

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

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

Заключение

Давайте посмотрим, что мы выяснили, пока тестировали Tabnine:

  1. Использование AI правда ускоряет разработку ПО, если смотреть на цифры. По статистике из расширения, разработка очень сильно ускоряется. Прирост измеряется в часах в неделю. Подвох в том, что не учитывается, сколько времени уходит на проверку и доработку решения. Часто бывает быстрее написать самому, чем выбирать из подсказок.

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

  3. Использование приложения не особо улучшает общее впечатление о процессе разработки. Никакой «сильной магии» не заметили. Ассистент генерирует подсказки, но взамен приходится  их перебирать и проверять. Нам такой флоу не подошел.

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

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

— Александр Шапоров, фронтенд-разработчик

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

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

Конкретный пример: люди, которые не умеют рисовать, с помощью Stable Diffusion могут создавать качественные изображения и арты.

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

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


  1. dpereverza
    30.11.2023 08:30

    TabNine больше отвлекает чем помогает, 2 дня с ним только выдержал. https://www.codium.ai/ намного лучше


    1. zartdinov
      30.11.2023 08:30

      Думал вы опечатались, пользуюсь https://codeium.com/, кто-нибудь сравнивал?

      TabNine пробовал очень давно, copilot'а тогда еще даже не существовало, тогда это было прям вау, возможно стали лучше.


  1. Kergan88
    30.11.2023 08:30

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

    >Конкретный пример: люди, которые не умеют рисовать, с помощью Stable Diffusion могут создавать качественные изображения и арты.

    ага, вы интерфейс comfyui видели?)


  1. Deus19
    30.11.2023 08:30

    По моему опыту, при java разработке TabNine сейчас лучший как минимум за счёт скорости- есть гибридный режим с локальным процессом и с онлайн. В остальных приходится ждать по несколько секунд, TabNine же работает мгновенно.
    Но у него есть минус- сейчас TabNine Hub не открывается, мб нужен VPN.