Copilot инструмент автогенерации кода, который наделал много шуму и которым пользуются программисты по всему миру. Я тоже включился в этот хайп, поигрался, попробовал переключить свой флоу работы на него и обломался. Минусы в итоге перевесили плюсы. Сейчас про это расскажу. Ниже описание взаимодействия с автокомплитом copilot. К чату вопросов нет, хорошая и полезная штука, но в статье не про него.
Сетап
За это время я использовал copilot в основном с двумя языками: php (laravel) и typescript (react). В качестве редактора nvim (сборка LazyVim на скрине). Писал и фронт и бек и тесты.
Что понравилось
Конечно Copilot выглядит как чудо. Чем более повторяющийся код, тем больше и лучше он догадывается до того, что надо сделать. Местами он показывает простые решения, до которых сам сходу не додумываешься. В целом же, на простом коде, он дает болванку, которую писать самому не очень хочется, а тут тебе все выложили. Такой код тоже требует правки, но это все равно удобно.
Почему я остановился
Но чем дальше, тем больше появлялось ситуаций, когда я понимал, что copilot мне скорее помешал чем помог.
Уменьшение продуктивности
Обычная автоматизация, которую дает редактор, вырабатывает моторную память. Не нужно сильно думать, когда автокомплит что-то подсказывает. Вставка кода происходит на автомате причем речь не только про выбор нужной реализации функции, но и дальнейший код, который понятно куда и как надо писать. Если вставляется функция, то мы оказываемся внутри ее вызова, где дописываются аргументы если они есть.
С копайлотом это перестает работать. Каждый раз когда он что-то подсказывает, нужно внимательно смотреть, что он там предлагает и даже после вставки кода проходит некоторое время на осознание того, кто я, где я и что с этим теперь делать.
Иногда я ожидаю и хотел бы простую подсказку, чтобы завершить строку текста или функцию, а вместо этого мне выдается какая-то портянка не в тему. В итоге я чаще стал зависать над комплитом и раздражаться от того, что простые действия стали сложнее.
Импорты
Отдельная тема это импорты. Копайлот вставляет куски кода без реальной связи с окружением. Если там есть какие-то символы типа классов или внешних функций, то естественно никаких автоматических импортов не произойдет. Это сбивает, потому что каждый раз непонятно, что уже импортировано, а что нет.
Ошибки
Копайлот постоянно вводит в заблуждение. Начинаешь набирать неверную команду, вызывать неверное свойство или метод, копайлот обязательно что-то подскажет из-за чего случаются осечки. Обычный автокомплит защищает от этого, потому что если его нет, ты знаешь, что сделал ошибку. В некоторых случаях его автокомплит вообще синтаксически не коректен. У меня такое было в PHP, когда вставляешь вроде что надо, а потом только замечаешь, что он в конце не поставил точку с запятой или забыл закрывающую кавычку у строки.
Итого
В коротких командах копайлот больше мешает. Обычный автокомплит + моторная память быстрее и просто приятнее, потому что не надо думать. В больших кусках кода он бывает полезен, но когда проект уже состоялся, то многое делается копипастой и так, как например в интеграционных тестах на круды. Плюс рядом есть chatgpt у которого можно спросить и покрутить какую-то тему.
Больше о разработке я пишу в своем телеграм канале https://t.me/orgprog
Комментарии (41)
saroff
24.07.2024 12:29+14На самом деле почти все описанные недостатки фиксятся если использовать AI помощника рядом с обычным автокомплитом, а не вместо. Назначить на отдельный хоткей. Довольно часто он может неплохо подсказать, особенно если как писали, код повторяющийся. А в стальное время можно работать как будто его нет.
delphinpro
24.07.2024 12:29+1А если нет таких опций. Вот например использую Codeium в phpstorm. Настроек клавиш нет. Что развернется по табу - неизвестно, родной автокомплит или подсказка ассистента.. Пришлось отрубить AI в редакторе и оставить только чат.
hooy
24.07.2024 12:29+9Ну так не используйте такой редактор, в котором в 2024 нет гибкой настройки хоткеев на любой чих
Kergan88
24.07.2024 12:29+2>А если нет таких опций
Что кстати само по себе показательно. Уже не один год прошел с начала хайпа, но нет _ни одного_ нормально сделанного нейросетевого автокомплита!
А это не проблема редактора, это проблема самих автокомплит-плагинов. Которых нормально сделанных просто не существует в природе. На уровне настройки редактора тут решить ни чего нельзя.
Abstraction
24.07.2024 12:29+2Встречный опыт: Qt Creator/C++, VS Code/TypeScript+HTML
Работает как продвинутый автокомплит, и в хорошем и в плохом смысле. В хорошем - предлагает поля структур, рутинные аксессоры / циклы / проверки, иногда он разумно предлагает блок в несколько десятков строк "по аналогии" (убрать который вообще в порядке следования DRY архитектурно очень нетривиально). В плохом - когда правишь файл с неидеальным чужим кодом, успешно подтаскивает из него неидеальные привычки его автора.
Иногда я ожидаю и хотел бы простую подсказку, чтобы завершить строку текста или функцию, а вместо этого мне выдается какая-то портянка не в тему.
В Qt Creator работает вместе с обычным автокомплитом, так что проблем с непредсказуемым вводом имён полей/методов я не наблюдал.
Копайлот вставляет куски кода без реальной связи с окружением. Если там есть какие-то символы типа классов или внешних функций, то естественно никаких автоматических импортов не произойдет.
Поскольку их не происходит и без Copilot, я не рассматриваю это как минус (а то что разводить много зависимостей неудобно - даже как маленький плюс).
В некоторых случаях его автокомплит вообще синтаксически не корректен.
Это бывает, но требует мелких правок (в частности, при каких-то условиях он начинает ставить лишнюю закрывающую скобку в конец блока - то ли его пространства имён озадачивают, то ли что). Или же изредка он предлагает бред, но тогда его вставлять не надо вообще.
Anton888
24.07.2024 12:29+10У меня такой же опыт с ChatGPT-4o, который пытаюсь приспособить для анализа массивов отзывов и генерации соответствующих отчетов. В начале кажется, что работает круто и отлично все классифицирует, выявляет часто повторяемые проблемы, умеет отличать негатив от позитива и т.д.
Но когда углубляешься, то руками приходится столько доделывать, переделывать и проверять, что толку от ИИ практически нет.
А особенно мне понравилось, что на команду "дай примеры более подробных отзывов" по такой-то теме, он начал генерировать отзывы сам. Причем заметил это только благодаря "гладкости" текста.
morijndael
24.07.2024 12:29на команду "дай примеры более подробных отзывов" по такой-то теме, он начал генерировать отзывы сам.
Ну так вы сами его попросили........
Moog_Prodigy
24.07.2024 12:29+3Сопилот не понравился, а вот локальная ллама в этом плане будет получше. Ну есть ошибка в программе. Говорю ей - переписать заново. И зависимости она обычно прописывает вначале, то есть использование библиотек возлагается на ИИ. Иногда конечно оно выдумывает библиотеки, да и вызовы выдумывает. Если модулей в программе много, то обычно работает просто "Напиши вот это и это на питоне, используя qt", если идти по функциям, а не прям вот всю программу. То есть майн с инитом у нас в начале - заставляем ИИ поработать архитектором и правим, а затем уже мелкие моторные навыки - Напиши функцию, чтобы принимала на входе строку в формате () и на выходе эта функция возвращает число букв в строке. Это я утрированно, не думайте что я про Len не знаю)
Но с ней хоть там можно общаться и кидаться в нее еррорами. Тупо в авторежиме. Если уж зашло далеко, вот тут и можно вникнуть, что же тут не так. Большие программы оно написать не в состоянии, но если раскидать на кучу подзадач, то все таки оно пишет куда быстрее, чем я печатаю. Тут тонкая грань, модели, среды выполнения, системный промт. Но в целом оно лучше сопилота.
sergeyklyopov7
24.07.2024 12:29Я посмотрел как у других копилот работает и подумал - ну нахрен. Интеллекта там нет, предлагает переставить местами проверки условий в цепочке If else if ибо один из блоков короче другого и ему пофиг что одно условие это просто сравнение инта с интом, а второе условие - вызов какой-то функции весьма даже не лёгкой по процессору.
vignatovic
24.07.2024 12:29+9В своей статье про доверие и LLM я пишу, что для доверия нужна еще и предсказуемость. Ваша статья это хорошо иллюстрирует. У редактора с автозаполнением есть предсказуемость, а у Copilot -а предсказуемости нет, а значит и нет доверия.
vkni
24.07.2024 12:29+3Предсказуемость - это общее неявное требование для программных систем. Но про неё очень часто забывают, причём даже гранды построения UI - в той же OSX, например, система по-умолчанию сортирует виртуальные рабочие столы, убивая предсказуемость.
funca
24.07.2024 12:29+1Copilot это не столько про доверие, сколько про автоматизацию понятной вам рутины, где результат вы сами можете критически оценить. Работа с ним больше напоминает работу со стажёрами, нежели с оракулом.
Andrey_Solomatin
24.07.2024 12:29+1то естественно никаких автоматических импортов не произойдет. Это
сбивает, потому что каждый раз непонятно, что уже импортировано, а что нет.Pycharm c Python хорошо подсвечивает такие моменты и через хоткей предлагает добавить импорты.
Andrey_Solomatin
24.07.2024 12:29Плюс рядом есть chatgpt
У сопилота тоже есть свой чат. Не пробовали его?
toxicmt Автор
24.07.2024 12:29Пробовал, но мне как-то проще оказалось работать через chatgpt. Не отрицаю что конкретно в этом случае текстовый интерфейс вима не помогает.
Andrey_Solomatin
24.07.2024 12:29У меня плюсы на минусы складываются в ноль. На работе есть копилот на домашних проектах нет. Ни там ни там не страдаю. Вот только чатом так и не начал пользоваться, его поддержку в IDE завезли с опозданием.
iskateli
24.07.2024 12:29Каждый раз когда он что-то подсказывает, нужно внимательно смотреть, что он там предлагает и даже после вставки кода проходит некоторое время на осознание того, кто я, где я и что с этим теперь делать.
Ну как бы чем сложнее подсказка тем внимательнее надо смотреть и да, конечно при этом нужно время на осознание
Выше уже предложили разделить обычные простые подсказки компилятора и подсказки copilot
funca
24.07.2024 12:29+1Есть ещё режим, когда желаемый результат описываешь в комментарии, а он под ним пишет код. Так Copilot получает больше контекста и результат становится точнее. Комментарии можно потом не убирать, оставляя их для потомков и него же самого.
morijndael
24.07.2024 12:29+1...и пока опишешь LLM весь нужный контекст, оказывается что проще взять и руками сделать
KReal
24.07.2024 12:29А я не перестал. Плагин в JetBrains Rider (C#) большую часть времени молчит, но иногда предлагает (не вставляет сам внаглую) варианты. Порой удивительно в тему, буквально то, что я и сам думал написать. Иногда (реже) - какую-то фигню, которую я игнорирую. В общем, пользы больше, чем вреда.
Warrangie
24.07.2024 12:29Автокомплит больше мешает, чем помогает. Однако, если лень писать какой-то кусок кода, он очень помогает. Разумеется, при вызове вручную.
Revertis
Это на каком языке? И почему даже в заголовке?
Negat1v9
Статью видимо тоже copilot написал.
Revertis
А местами так и кажется.
exTvr
Или не кажется.
toxicmt Автор
Было бы прикольно если бы это копайлот за меня такой текст написал да :D Ошибку поправи!
melodictsk
И тут такая же ошибка :)
toxicmt Автор
Разв?
nochkin
Всё нормально. У них просто неправильная русска языка.
YMA
Эт прждврмнна оптмзци. Есл скртит лшн бквы, мжн сэкнмт до 30% мст! Прктчск без ущрб читблнсти ;)
exTvr
Птчк, я прнс!
zetroot
Т бнк?