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

Сетап

За это время я использовал copilot в основном с двумя языками: php (laravel) и typescript (react). В качестве редактора nvim (сборка LazyVim на скрине). Писал и фронт и бек и тесты.

Что понравилось

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

Почему я остановился

Но чем дальше, тем больше появлялось ситуаций, когда я понимал, что copilot мне скорее помешал чем помог.

Уменьшение продуктивности

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

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

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

Импорты

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

Ошибки

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

Итого

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

Больше о разработке я пишу в своем телеграм канале https://t.me/orgprog

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


  1. Revertis
    24.07.2024 12:29
    +6

    Я перестал использовать Copilot после 2 месяц.

    Это на каком языке? И почему даже в заголовке?


    1. Negat1v9
      24.07.2024 12:29
      +23

      Статью видимо тоже copilot написал.


      1. Revertis
        24.07.2024 12:29
        +3

        А местами так и кажется.


        1. exTvr
          24.07.2024 12:29
          +4

          Или не кажется.


          1. toxicmt Автор
            24.07.2024 12:29
            +9

            Было бы прикольно если бы это копайлот за меня такой текст написал да :D Ошибку поправи!


            1. melodictsk
              24.07.2024 12:29
              +4

              И тут такая же ошибка :)


              1. toxicmt Автор
                24.07.2024 12:29
                +11

                Разв?


                1. nochkin
                  24.07.2024 12:29
                  +6

                  Всё нормально. У них просто неправильная русска языка.


                  1. YMA
                    24.07.2024 12:29
                    +6

                    Эт прждврмнна оптмзци. Есл скртит лшн бквы, мжн сэкнмт до 30% мст! Прктчск без ущрб читблнсти ;)


                    1. exTvr
                      24.07.2024 12:29
                      +2

                      Птчк, я прнс!


                      1. zetroot
                        24.07.2024 12:29

                        Т бнк?


  1. saroff
    24.07.2024 12:29
    +14

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


    1. delphinpro
      24.07.2024 12:29
      +1

      А если нет таких опций. Вот например использую Codeium в phpstorm. Настроек клавиш нет. Что развернется по табу - неизвестно, родной автокомплит или подсказка ассистента.. Пришлось отрубить AI в редакторе и оставить только чат.


      1. hooy
        24.07.2024 12:29
        +9

        Ну так не используйте такой редактор, в котором в 2024 нет гибкой настройки хоткеев на любой чих


      1. Kergan88
        24.07.2024 12:29
        +2

        >А если нет таких опций

        Что кстати само по себе показательно. Уже не один год прошел с начала хайпа, но нет _ни одного_ нормально сделанного нейросетевого автокомплита!

        @hooy

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


  1. Zaro4k0
    24.07.2024 12:29
    +2

    Зашла только ради того, чтобы посмотреть, сказал ли кто-нибудь что-нибудь про заголовок.


    1. Zaro4k0
      24.07.2024 12:29
      +1

      так все-таки Копайлот, Copilot или copilot?


      1. bear11
        24.07.2024 12:29
        +11

        сопилот (по аналогии coprocessor - сопроцессор).


      1. snuk182
        24.07.2024 12:29
        +19

        Соплелёт.


      1. delphinpro
        24.07.2024 12:29
        +6

        второй пилот. если по-русски.


  1. Abstraction
    24.07.2024 12:29
    +2

    Встречный опыт: Qt Creator/C++, VS Code/TypeScript+HTML

    Работает как продвинутый автокомплит, и в хорошем и в плохом смысле. В хорошем - предлагает поля структур, рутинные аксессоры / циклы / проверки, иногда он разумно предлагает блок в несколько десятков строк "по аналогии" (убрать который вообще в порядке следования DRY архитектурно очень нетривиально). В плохом - когда правишь файл с неидеальным чужим кодом, успешно подтаскивает из него неидеальные привычки его автора.

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

    В Qt Creator работает вместе с обычным автокомплитом, так что проблем с непредсказуемым вводом имён полей/методов я не наблюдал.

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

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

    В некоторых случаях его автокомплит вообще синтаксически не корректен.

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


  1. Anton888
    24.07.2024 12:29
    +10

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

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

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


    1. morijndael
      24.07.2024 12:29

      на команду "дай примеры более подробных отзывов" по такой-то теме, он начал генерировать отзывы сам.

      Ну так вы сами его попросили........


  1. Moog_Prodigy
    24.07.2024 12:29
    +3

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

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


  1. sergeyklyopov7
    24.07.2024 12:29

    Я посмотрел как у других копилот работает и подумал - ну нахрен. Интеллекта там нет, предлагает переставить местами проверки условий в цепочке If else if ибо один из блоков короче другого и ему пофиг что одно условие это просто сравнение инта с интом, а второе условие - вызов какой-то функции весьма даже не лёгкой по процессору.


  1. vignatovic
    24.07.2024 12:29
    +9

    В своей статье про доверие и LLM я пишу, что для доверия нужна еще и предсказуемость. Ваша статья это хорошо иллюстрирует. У редактора с автозаполнением есть предсказуемость, а у Copilot -а предсказуемости нет, а значит и нет доверия.


    1. vkni
      24.07.2024 12:29
      +3

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


      1. vagonovozhaty
        24.07.2024 12:29
        +1

        не?


        1. vkni
          24.07.2024 12:29

          Оно, оно. По-умолчанию после установки оно включено.


    1. funca
      24.07.2024 12:29
      +1

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


  1. Andrey_Solomatin
    24.07.2024 12:29
    +1

    то естественно никаких автоматических импортов не произойдет. Это
    сбивает, потому что каждый раз непонятно, что уже импортировано, а что нет.

    Pycharm c Python хорошо подсвечивает такие моменты и через хоткей предлагает добавить импорты.


  1. Andrey_Solomatin
    24.07.2024 12:29

    Плюс рядом есть chatgpt

    У сопилота тоже есть свой чат. Не пробовали его?


    1. toxicmt Автор
      24.07.2024 12:29

      Пробовал, но мне как-то проще оказалось работать через chatgpt. Не отрицаю что конкретно в этом случае текстовый интерфейс вима не помогает.


  1. Andrey_Solomatin
    24.07.2024 12:29

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


  1. podguzovvasily
    24.07.2024 12:29

    Как им в России пользоваться?


    1. Ilyasyakubov
      24.07.2024 12:29
      +1

      Через VPN


  1. iskateli
    24.07.2024 12:29

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

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


  1. funca
    24.07.2024 12:29
    +1

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


    1. morijndael
      24.07.2024 12:29
      +1

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


  1. KReal
    24.07.2024 12:29

    А я не перестал. Плагин в JetBrains Rider (C#) большую часть времени молчит, но иногда предлагает (не вставляет сам внаглую) варианты. Порой удивительно в тему, буквально то, что я и сам думал написать. Иногда (реже) - какую-то фигню, которую я игнорирую. В общем, пользы больше, чем вреда.


  1. Warrangie
    24.07.2024 12:29

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