Я его попробовал и уверяю вас: он вам не подходит. И у меня есть несколько очень веских аргументов, почему это именно так…

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

Однако на сей раз это не обычный WYSIWYG-инструмент. Прежде чем вы облегченно вздохнете, потерпите еще секундочку, потому что тут и правда дело дрянь. Это второй пилот на ИИ, разработанный «лучшим другом каждого разработчика», компанией Microsoft. Точнее, GitHub, но теперь они принадлежат Microsoft. Он очень интуитивно называется GitHub Copilot. Я подключил его сразу, как только смог. Отчасти потому что мне было интересно, как ИИ сможет писать код, но также потому что вместе с любопытством появился и скептицизм.

Я всегда смотрю на ИИ как на средство, которое может стать либо инструментом, либо проблемой — 50 на 50. Нет и не должно быть промежуточного варианта. Такой у нас уже есть — он называется «человек». 

Первые впечатления

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

Установка расширения была достаточно проста — желая добиться полной совместимости, я выбрал VSCode, так как редактор, созданный Microsoft, показался мне максимально подходящим для экспериментов. VSCode — далеко не лучший (как минимум, с моей точки зрения) редактор, но я хотел соблюсти объективность в отношении Copilot. В процессе установки быстро понимаешь, что это не совсем локальный инструмент, поскольку ему требуется постоянное подключение к Интернету. Более того, он также требует доступа ко всему вашему коду в указанном репозитории, что меня немного насторожило. Но я продолжал... Все происходит во имя науки, не правда ли?

Чтобы использовать инструмент, вы должны быть постоянно авторизованы в Copilot. Выяснилось, что соединение несколько нестабильно, но тут дело не в моем интернете, а в том, что либо VSCode, либо сам плагин Copilot плохо держит связь. Но ведь я инженер-программист, я знаю, как выглядят первые версии программ. Баги неизбежны. Что неудивительно, подобные проблемы у меня были и в WebStorm, так что... Два из двух. ????

Пора было, наконец, написать волшебные комментарии, которые затем превратятся в код, и на следующий день рассказать всем, что я сделал свой новый сайт за 20 минут! Или нет…

Это был мой первый комментарий в HTML-файле:

// a menu with links to the different pages

В результате получился вот такой в высшей степени интересный сниппет:

<ul>

<li><a href="index.html">Home</a></li>

<li><a href="about.html">About</a></li>

<li><a href="contact.html">Contact</a></li>

Давайте так: если этот кусок кода не вызывает у вас вопросов, вам стоит вернуться к изучению веб-разработки. Не хочу показаться грубияном и говорю как можно мягче — идите и изучайте HTML. Это займет у вас пару выходных. Право слово.

Когда инструмент одного из крупнейших технологических гигантов в истории человечества генерирует HTML-список с незакрытым тегом ul, количество тревожных звоночков, которые раздаются в моей голове, может поспорить с колоколами Нотр-Дама!

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

Разумеется, я не мог отказаться от инструмента только из-за неудачного HTML-кода. Конечно, он не справляется с простыми вещами, но, возможно, со «сложным» кодом он может показать себя лучше. Я попробовал его с JavaScript. Вот только один из моих небольших тестов:

// an array with 17 items   (1-17)

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];

// a function that takes an array and a number

function getItem(arr, num) {

}

На первый взгляд вы, вероятно, скажете: «Да ну, в общем-то, нормально». Да, это так, и это синтаксически правильный код, но, пользуясь функциями автозаполнения в IDE уже много лет, а в некоторых случаях даже Emmet, я не совсем понимаю, почему написание этих комментариев якобы быстрее, чем написание самого кода вручную. Кроме того, возможно, я придираюсь, но я ожидал увидеть стрелочную функцию. Все это подводит меня к следующему вопросу...

Для кого это?!

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

Давайте рассмотрим несколько фактов о разработке программного обеспечения, прежде чем попытаемся ответить на этот вопрос:

  • Программирование — это способ выражения потенциального решения на языке, который может понять компьютер. Самое сложное в программировании — это понять проблему, найти ее решение, протестировать его и оценить его правильность.

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

  • Большинство инженеров-программистов используют редакторы кода и IDE, обладающие отличными возможностями автозаполнения, подсказок и линтинга.

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

  • Такие сервисы, как Leetcode и Hackerrank, предлагают вам освоить мастерство написания кода, в то время как Copilot «продает» прямо противоположное.

  • Copilot не предлагает никакого контекста и обучения вместе со своими фрагментами кода, в отличие от StackOverflow, который все же намного лучше, потому что там есть объяснения и контекст, а не просто фрагменты кода в вакууме.

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

Итак, если продукт делает молодых специалистов менее квалифицированными, а сениорам ни капли не помогает, то кому, черт возьми, нужен Copilot?!? Честно говоря, наверное, никому. Это инструмент автозаполнения на стероидах, который выполняет свою работу хуже, чем уже существующие решения. Кроме того, его нельзя назвать дешевой заманухой, потому что 100 баксов в год — это ни разу не дешево. Я плачу меньше половины этой суммы за годовую подписку на WebStorm, и эта штука действительно великолепна!

GitHub Copilot — это ловкая маскировка для инструмента, который выкачивает вашу интеллектуальную собственность, прикрываясь автоматизацией скучного-рутинного кодинга, но все мы знаем, что писать код вовсе не скучно. Мы уже автоматизировали эти задачи с помощью сниппетов, Emmet, линтеров, IDE и т.д. В реальности все это приведет к тому, что все больше людей не будут знать, как написать простой цикл for.

Это не нужно ни вам, ни мне, — никому, кроме Microsoft...

Идите мимо, здесь не на что смотреть...

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

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

Без этого просто не обойтись. Copilot от GitHub — это, пожалуй, единственный второй пилот, с которым я бы не рискнул вести самолет. Всякий раз наш полет заканчивался бы грандиозной катастрофой.

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

Копайлот, shift + delete!

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


  1. 4reddy
    18.08.2022 19:41
    +4

    Да ладно! Неужели таки не нужен :)


    1. KvanTTT
      18.08.2022 20:38
      +5

      Это перевод заголовка такой не нужен, в оригинальной статье заголовок не такой агрессивный:


      GitHub Copilot — Crash, Boom, Bang!


      1. Miiko
        20.08.2022 05:36
        +1

        Не знаю, по-моему так вполне адекватный перевод.

        Crash! Boom! Bang!
        I find the heart but then I hit the wall
        Crash! Boom! Bang!
        That's the call, that's the game and the pain stays the same

        (c) Roxette

        Быть размазанным по стенке - оно вам это надо?


  1. MentalBlood
    18.08.2022 19:46
    +5

    Какой инженер-программист в Microsoft решил, что это тот инструмент, который нужен его коллеге-программисту?

    Решения такого масштаба не всегда принимают инженеры-программисты


  1. panzerfaust
    18.08.2022 20:03
    +5

    У меня вообще чувство, что сейчас многое в индустрии делается просто потому что "смотри, как я могу". Взять хоть эти ежемесячные "убийцы" C или JS. В ИТ-гигантах такая синегрия и богатый технический бэкграунд, что написать новую свистоперделку можно за считанные месяцы. А нужна она или нет - уже не так важно. Даже в худшем случае полного провала опыт не пропадет, а на потраченные ресурсы в целом плевать. Это же не стартап, у которого от успеха продукта само существование зависит.


    1. KvanTTT
      18.08.2022 20:29
      +8

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


    1. Fu1crum
      19.08.2022 12:17

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


  1. LesnoyChelovek
    18.08.2022 20:12
    +1

    У Copilot проблемы с безопасностью кода. 40% сгенерированных кусков кода имеют потенциальную уязвимость. Хотя ИИ и задумывался, как инструменты, лишённый человеческих недостатков. Но так как парсинг кода берётся из труда человека, то и ошибки в нём встречаются аналогичные.

    Пруф — https://www.spiceworks.com/tech/security/news/40-of-code-produced-by-github-copilot-vulnerable-to-threats-research/

    В общем, ИИ как такового ещё нет — только пирсинг готовых решений.


    1. KvanTTT
      18.08.2022 20:31
      +4

      Пруф — https://www.spiceworks.com/tech/security/news/40-of-code-produced-by-github-copilot-vulnerable-to-threats-research/

      Не увидел конкретных примеров, а только пространное описание и статистика. Так-то и люди пишут небезопасный код.


      В общем, ИИ как такового ещё нет — только пирсинг готовых решений.

      Я юзаю copilot на протяжении уже довольно долгое время и склонен не согласится. Порой он часто предсказывает правильный или почти правильный код, который довольно сильно зависит от контекста. Да, это не кнопка "сделать хорошо", но и не тупой копипаст кода.


      1. Xander_d
        18.08.2022 21:26

        Так-то и люди пишут небезопасный код.

        Поправьте меня, если я ошибаюсь, но разве копилот - это не нейросеть, обученная на написанном людьми небезопасном коде?


        1. KvanTTT
          18.08.2022 21:36
          +7

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


  1. panteleymonov
    18.08.2022 20:24
    +2

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


    1. CrashLogger
      18.08.2022 20:42
      +12

      Тем, что когда программист переходит с ассемблера на Си, он лишь меняет инструмент. Он знает что делать, и знает как. Си просто дает ему более удобный синтаксис. А с Copilot все не так. Он не помогает - он делает работу за вас. Причем делает ее неоптимальным способом, не так, как ее сделал бы профессионал. По сути, это просто автоматизированный копипастинг. В результате мы получим больше говнокода, больше багов, больше уязвимостей.


      1. KvanTTT
        18.08.2022 21:23

        Он не помогает — он делает работу за вас.

        Он помогает — подсказывает целые фрагменты кода, которые либо правильные, либо нуждаются в фиксах, либо подсказки вообще можно игнорировать.


        Причем делает ее неоптимальным способом, не так, как ее сделал бы профессионал.

        • Не все профессионалы
        • Профессионалы тоже ошибаются

        По сути, это просто автоматизированный копипастинг.

        • IDE тоже помогает генерировать стандартный код, и это реально упощает жизнь
        • GitHub Copilot более не просто копипастер, а более умный копипастер, если этот термин вообще к нему применим

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

        Это голословное утверждение.


      1. panteleymonov
        18.08.2022 21:29

        С первыми реализациями СИ тоже было не все так гладко. Непарные pop/push (кстати говоря тоже от макрасофака) и ассемблерные вставки в больших количествах, много чего еще.


      1. Petrenuk
        18.08.2022 22:22
        +6

        Это мне напоминает разговоры про self-driving. В Калифорнии уже есть поколение молодых водителей которые только водили Теслу с адаптивным круизом который за тебя разгоняется тормозит и поворачивает. Через 5-10 лет будет весьма обычным не уметь управлять "обычной" машиной, также как есть люди которые умеют ездить только с автоматом но не с механикой.


  1. Desprit
    18.08.2022 20:42
    +7

    Я примерно 4 месяца с copilot'ом, пишу на golang, python и typescript. Больше всего мне нравятся дополнения в Го, наверное. Субъективно, процентов 15-20 он сейчас пишет за меня, причем именно пишет. И еще постоянно по мелочи дополняет, что очень приятно. Typescript тоже достаточно хорошо работает.

    Статья, как по мне, чушь несусветная.

    Ну и да, что касается:

    Выяснилось, что соединение несколько нестабильно, но тут дело не в моем интернете, а в том, что либо VSCode, либо сам плагин Copilot плохо держит связь.

    - почините свой интернет


    1. slonopotamus
      19.08.2022 01:05
      +26

      процентов 15-20 он сейчас пишет за меня

      Процентов 15-20 любой программы на Go - это if err != nil { return err }. Можно просто скопировать этот блок в буфер обмена и нажимать CTRL+V, безо всяких копилотов и необходимости постоянного интернет-подключения.


      1. Desprit
        19.08.2022 09:33
        -1

        Я же вроде достаточно прозрачно написал, что 15-20 процентов он именно пишет, а не дополняет?


        1. freecoder_xx
          19.08.2022 09:52
          +6

          Если IDE может писать 20% кода на языке, то что же это язык такой вербозный? Проблема тут в языке.


          1. Desprit
            20.08.2022 09:24
            -1

            Обычный язык, вот взять даже Go тот же. Имеются интерфейсы для доступа к SQL базе данных. Создаешь функцию виду

            func (d *db) GetForProject(projectID string) ([]entity.Task, error) {}

            И он ее полностью пишет, подставляя внутрь правильные enitity проекта, аккуратно заполняя нужными данными. Там также будет обработка ошибок с правильным return'ом именно в нужном мне виде, который используется в проекте. 15 строк кода, которые я не писал, а просто пробежал глазами на валидность.

            Если говорить о конструкциях вида `if err != nil`, то одно дело просто return там иметь, и совсем другое, когда требуется вывести нужную ошибку, возможно, еще что-то в лог отправить. Если это http handler, то надо добавить правильный код и какой-то payload: `c.String(http.StatusBadRequest, someResponse)`. У нас это три строчки и таковых в проекте много и я не писал их руками ни разу.


    1. sedyh
      19.08.2022 02:00

      ИМХО тестировал все вышеперечисленное. Copilot хуже всех работает именно с Go, причём настолько, что даже стандартные подсказки Goland умнее. В 90% случаев это копипаст из локального проекта и в 10% решение из интернета.


  1. Djaler
    18.08.2022 20:49
    +8

    почему написание этих комментариев якобы быстрее, чем написание самого кода вручную

    Потому что расчёт не на такие простейшие примеры?


    1. slonopotamus
      19.08.2022 01:06
      +1

      Вы утверждаете или спрашиваете?


      1. Djaler
        19.08.2022 12:43
        +1

        Это такая форма риторического вопроса, который является утверждением


    1. PsyHaSTe
      19.08.2022 17:16

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


      img


      Да, за ним нужно вычитвать и т.п. Но все равно выигрыш по времени громадный


  1. niksite
    18.08.2022 21:18
    +6

    почему написание этих комментариев якобы быстрее, чем написание самого кода вручную

    Потому, что они (комментарии) не обязательны?

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

    Статья дурацкая. «Мы попробовали PyCharm и нам не понравилось. Будем и дальше писать код в блокноте! Разработчики JetBrains просто ненавидят эти три простые…».


    1. Source
      19.08.2022 02:12
      +2

      Ну, кстати, да. Я когда его тестил даже не додумался писать какие-то магические комментарии. Он сам автодополнял код целыми кусками. На 3 с минусом дополнял, но в целом всё равно впечатляет)


      1. PsyHaSTe
        19.08.2022 17:21

        С комментариями дополняет на 4+. Я вот например в примере выше сначала не указал миддл пивот и думал, почему он предлагает в качестве пивота нулевой элемент всегда использовать. Полез гуглить какие хорошие практики есть)


  1. ap1973
    18.08.2022 21:23
    -7

    Не читал, но осуждаю! Да, я не пробовал Copilot, и не буду. Дело в том, что по моему не скромному мнению, этот самый ИИ, совсем не ИИ - термин выбран не удачно. Всё-таки, то что сейчас называют ИИ не более чем система распознавания образов. И так как в ней нет интеллекта, ничего она за вас не напишет, максимум предложит набор некоторых самых распространенных в интернете вариантов (если не ошибётся).

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

    А статья говно.


    1. Djaler
      18.08.2022 21:25
      +1

      Советую попробовать, потому что

      ничего она за вас не напишет, максимум предложит набор некоторых самых распространенных в интернете вариантов

      это всё-таки неправда


      1. ap1973
        18.08.2022 21:36
        -6

        Не буду, я лучше буду мечтать о том времени, когда мои мутные мысли наконец приобретут чу́дную ясность, и я наконец придумаю ЯП на котором можно будет просто, лаконично и однозначно объяснить тупой железяке что же я от нее хочу, и более не писать, из года в год, тонны очень похожего кода ????


        1. Source
          19.08.2022 02:14

          и более не писать, из года в год, тонны очень похожего кода ????

          Откройте для себя метапрограммирование через манипуляции с AST.


          1. PsyHaSTe
            19.08.2022 17:24

            Проблема в том, что метапрограммирование через манипуляции AST нужно описывать, иногда это сложно, особенно если правила достаточно сложные: попробуйте например реализовать тесты для связного списка. А теперь вычлените что между ними общего, чтоб можно было написать test("inertion of two elements. Count increased by two") и он дописал код который требуется для этого теста. А копилот справится.


            Люди забывают, что автоматизация часто затратнее по времени чем сделать влоб. Отсюда и копилот — он сравнительно бесплатно (нужно только вычитать что он предлагает) автоматизирует то на что в другое время люди бы просто забили


            1. Source
              19.08.2022 23:27

              Ответ был не про то, что метапрограммирование - конкурент Copilot, а о том, что с его помощью легко устранить, как минимум, 90% boilerplate.

              P.S. Не очень понял, какую сложность связных списков вы имели в виду. Довольно простая структура данных так то.


              1. PsyHaSTe
                20.08.2022 00:47

                Я говорю про сложность "напишите такую абстракцию над тестовым фреймворком чтобы можно было протестировать какую-нибудь штуку одной строкой 'should test that two linked lists of three elements are equal' или 'tests that asserts inesrting one element in linked list increments the length by 1
                and that the inerted element is at the end of the array'".


                Копилот так позволяет
                img
                img
                (вторую строку комментария бтв копилот сам дописал)


                1. sergey-b
                  20.08.2022 03:31

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


                  1. PsyHaSTe
                    20.08.2022 03:51

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

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


                1. Source
                  20.08.2022 11:57

                  Понял о чём вы. Но это во-первых ортогонально метапрограммированию. Которое, например, может в первом случае формирование списка свести к

                  let list = LinkedList::from([1, 2, 3]);

                  А во-вторых, есть ощущение, что у вас настолько длинные комментарии получаются, что уж быстрее код написать, чем такой комментарий ????


                  1. PsyHaSTe
                    20.08.2022 12:33

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


                    Но при желании можно дописать 3 слова (1 секунда) чтобы получить нужый результат
                    img


                    А во-вторых, есть ощущение, что у вас настолько длинные комментарии получаются, что уж быстрее код написать, чем такой комментарий ????

                    Я написал этот комментарий секунд за 10. Предлагаю попробовать написать подобный код за 10 секунд)


                    1. Source
                      20.08.2022 12:43

                      Не обязательно можно, неизвестно есть ли у списка функция создания из массива или нет. 

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

                      Я написал этот комментарий секунд за 10.

                      Ну хз-хз, я его ради интереса просто перепечатал и то 30 секунд заняло) Впрочем, скорость набора давно уже ничего не решает в программировании, тут минимум 95% времени тратишь на то, чтобы решить, что именно набирать))

                      Но каждому своё. Раз вам нравится, то никто ж не запрещает.


                      1. PsyHaSTe
                        20.08.2022 13:47

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

                        Эмм, нет, мы про то чтобы работать с существующим апи, а не дописывать новое. В конце концов контекст был про метапрограммировании в тестировании


                        Ну хз-хз, я его ради интереса просто перепечатал и то 30 секунд заняло) Впрочем, скорость набора давно уже ничего не решает в программировании, тут минимум 95% времени тратишь на то, чтобы решить, что именно набирать))
                        Но каждому своё. Раз вам нравится, то никто ж не запрещает.

                        Зависит от того что писать. Если что-то необычное, чего ни разу никто не писал — тут да, нужно думать. Но если в 547 раз нужно отправить письмо по SMTP, то там все тривиально но надо гору текста писать. А если для этого юзать какой-нибудь сендгрид то вместо того чтобы чекать их документацию можно просто написать //send email with attachments using sendgrid и копилот подскажет какие апи нужно как вызвать чтобы получить это. И вот эта работа занимает львиную долю в том что мы называем "программированием". У всех кроме мб дедфуда и ещё пары человек присутствующих.


                1. nin-jin
                  20.08.2022 12:33

                  И часто вы пишите тесты на стандартные алгоритмы, а не используете эти алгоритмы в готовом виде? Вот написал я новый алгоритм, и прошу копилота:

                  should test that insertion two words inside token gives two units

                  И он мне тут нарисует? Тут и человек-то без обучения не поймёт в чём суть алгоритма, как вставляются слова в токены и как узнать число юнитов.

                  А бесполезных линкедлистов на гитхабе полно, да.


                  1. PsyHaSTe
                    20.08.2022 12:34

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


                    // should test that insertion two words using interface A inside token of type B gives two units


                    1. nin-jin
                      20.08.2022 12:56

                      С задачей "реализуй быструю сортировку" и гугл справится. Только зачем мне ещё одна быстрая сортировка?

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


                      1. PsyHaSTe
                        20.08.2022 13:51

                        С задачей "реализуй быструю сортировку" и гугл справится. Только зачем мне ещё одна быстрая сортировка?

                        Затем что алгоритм может быть чуть специфичнее под условия задачи


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

                        Нет не быстрее


                      1. nin-jin
                        20.08.2022 14:59

                        Ну конечно. Что вы такого короткого напишете копилоту, чтобы он сгенерировал что-то такое?

                        async 'Write into token with split'() {
                        			
                        	const land = await makeLand()
                        	land.root.as( Text ).text( 'foobar' )
                        	land.root.as( Text ).write( 'XYZ', 2, 4 )
                        			
                        	assert( land.root.as( List ).list(), [ 'fo', 'XYZar' ] )
                        			
                        },


                      1. PsyHaSTe
                        20.08.2022 15:42

                        Да я сам не понимаю что за land, что за root и почему туда нужно реплейсить текст. А раз не понимаю то как смогу обьяснить кому-то?


                      1. nin-jin
                        20.08.2022 15:56

                        Ну вот человеку можно объяснить, что land - это часть world, синхронизируеммая независимо. root - это корневой узел land. Узлы могут иметь разные представления для хранящихся в них юнитов. В данном случае это представление в виде плоского текста и в виде списка токенов. И в тесте проверяется, что при вставке текста происходит ретокенизация. Как всё это объяснить копилоту?


                      1. PsyHaSTe
                        20.08.2022 15:59

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


                        С плохими тестами копилот точно не поможет, это факт.


                      1. nin-jin
                        20.08.2022 16:04

                        Данные хранятся в land. root - не более чем вьюшка для корневого узла.


    1. KvanTTT
      18.08.2022 21:34

      Не читал, но осуждаю! Да, я не пробовал Copilot, и не буду.

      Ну может и изменили бы свое мнение, после того как попробовали.


      Дело в том, что по моему не скромному мнению, этот самый ИИ, совсем не ИИ — термин выбран не удачно. Всё-таки, то что сейчас называют ИИ не более чем система распознавания образов.

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


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

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


      ИИ для игры в Го (Alpha Go и Alpha Zero) вот смог разработать такие стратегии и тактики, до которых люди не смогли.


      1. Nick2022
        19.08.2022 16:35
        +1

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

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

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


        1. PsyHaSTe
          19.08.2022 17:25

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


          1. nin-jin
            20.08.2022 12:41

            Если у вас рест апи состоит из копипасты, то лучше применить обобщённое программирование, а не бегать потом, как ужаленному, чтобы залатать дыры во всех 100500 нагенерированных методах:


            1. PsyHaSTe
              20.08.2022 13:44

              Ну то есть микрософт в своем референс примере получается врет?


              Покажите как ваше апи состоит не из GetXXX/GetManyXXX/PutXXX/… ?


              1. nin-jin
                20.08.2022 15:05

                Типичный EnterPrizeFizzBuzz, что ещё ожидать от мелкософта?

                Вы не поверите: Get<Entity> / GetMany<Entity> / Put<Entity>


                1. PsyHaSTe
                  20.08.2022 15:43

                  Не поверю


  1. Petrenuk
    18.08.2022 22:13
    +2

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

    Задача программиста во взаимодействии с Copilot - проконсультироваться с тем что предлагает машина и принять решение что из этого использовать. Пока что это только мощная языковая модель и не стоит ожидать что она будет предлагать семантически корректный код 100% времени. Но уверяю вас, прогресс будет идти семимильными шагами. Не за горами тот день когда машина сможет в цикле писать и код и тесты к нему, проверяя сама себя.

    Пример со списком HTML вообще высосан из пальца. Список не закрыт потому что машина обычно предлагает какое-то ограниченное число строк. Если принять автодополнение то следующей же строкой Copilot предложит закрытый тег.


  1. GryZin
    18.08.2022 22:13
    +2

    Мне штука понравилась. В рамках бесплатного периода активно использовал для написания небольших shell скриптов, всякого рода сложных команд для aws, jq парсинга и т.п. Да еще хорошо подсказывает при написания кода - подсказки типо названия переменных, коммиты, названия функция из класса или библиотеки. Вообщем всякого рода рутину может на себя взять.
    Что-то сложнее не подошло мне , может просто я слишком плохо выражаю свои мысли.


    1. PsyHaSTe
      19.08.2022 17:27
      +1

      Что-то сложнее не подошло мне, может просто я слишком плохо выражаю свои мысли.

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


  1. odilovoybek
    18.08.2022 22:13
    +7

    Эта статья не предъявила никаких доказательств того, что copilot плохой и он нам (в частности мне) не нужен.
    1ый ваш пример - вы пробовали это вставить в код и нажать enter (создать новую строку)? Я уверен там появится автокомплит с закрытием ul от copilot. Я уже 3 месяца использую его и он мне не хило помог.


  1. AASelivanov
    18.08.2022 22:13
    +1

    Мне кажется, на данный момент это скорее работа на репутацию и чтобы сектор застолбить.
    Думаю, не всё сразу, но лет через 10-20 это решение возможно будет приведено к чему-то рабочему (как пример, генерация изображений к DALL-E тоже пришла не сразу, но вы посмотрите на вторую версию!)

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


  1. garbagecollected
    18.08.2022 22:56
    +5

    я не совсем понимаю, почему написание этих комментариев якобы быстрее, чем написание самого кода вручную

    А почему автору не пришла в голову мысль о том, что комментарий можно продиктовать вслух (STT), а код продиктовать уже проблемно?

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

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

    Кроме того, автор рассматривает IDE и Copilot не как инструмент написания своего кода, а как какого-то наставника (преподавателя) по кодированию, сравнивая Copilot с StackOverflow. Я понимаю еще, если IDE генерирует какую-то часть кода за разработчика, но чтобы IDE была умнее разработчика и учила разработчика программированию...


    1. ris58h
      19.08.2022 00:57
      +1

      но чтобы IDE была умнее разработчика и учила разработчика программированию...

      IDE уже сейчас может учить новым фишкам и хорошим практикам.


      1. garbagecollected
        20.08.2022 03:13

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


  1. Paskin
    19.08.2022 00:45
    +5

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


  1. Kuch
    19.08.2022 00:47
    +1

    Какая-то дичь:)

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

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


  1. emaxx
    19.08.2022 01:51
    +4

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

    Это было бы просто замечательно - не шерстить каждый раз stackoverflow и собирать вручную очередную неочевидную комбинацию grep/ant/comm/sort/ssh, а сказать что-нибудь "дай список файлов, которые есть и в этом .tar.gz и на машине с IP xyz и которые при парсинге через protobuf содержат поле foo=bar" (реальный пример из практики).


  1. darthmaul
    19.08.2022 01:53
    +6

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


  1. vagon333
    19.08.2022 05:47
    +3

    Мне помогает.
    Python.

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


  1. mozg3000tm
    19.08.2022 08:53
    +1

    А что бы автор сказал про Mathcad|Matlab|Labview?

    Они тоже убивают программиста?

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


  1. Alexey2005
    19.08.2022 10:01
    +4

    Главный недостаток Copilot заключается в том, что это внешний сервис. Адекватная стабильная работа которого, вообще говоря, не гарантирована.
    Вот подсели вы на эту штуку, а MS говорит: всё, проект нерентабелен, мы его закрываем.
    Или большие дяди поругались друг с другом, понавводили санкций и сервис стал недоступен для определённых регионов.
    Или SJW возбудились, заставив MS выпустить политкорректную версию нейронки, и теперь Copilot содержит модуль цензуры и отказывается генерировать код, если в вашей программе содержатся запрещённые имена типа master/slave/discriminator.
    До тех пор, пока не появится возможность хостить такую нейронку локально, лучше не закладываться на этот Copilot слишком сильно.


    1. KvanTTT
      19.08.2022 13:20

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

      А что значит закладываться? Это не основной продукт, а помощник. Если с ним что-то произойдет, работать может стать сложнее, но не более.


    1. darthmaul
      19.08.2022 13:28
      -1

      Copilot - это по сути интеграция GPT-3 с IDE, а GPT принадлежит Маску. Он вроде как адекватный и СЖВ сам недолюбливает.


    1. cepera_ang
      21.08.2022 09:05

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


  1. karanarqq
    19.08.2022 11:16

    Не ждал от него ничего прорывного, поставил себе как вспомнил о нем, занимаюсь веб разработкой, ИИ успешно генерит мне тесты с jest + typescript, экономит время на написание болванок, а больше мне и не надо)

    Сниппетами для верстки или для бизнес логики не пользуюсь, но где-то были и корректные подсказки.

    Короче не революция, но приносит пользу, так что имеет право на жизнь


  1. iRedds
    19.08.2022 11:42

    Зашел как-то Мантуров в IT-отдел, и услышал разговоры про Github Copilot.
    Так и появилось предложение Минпромторга на счет второго пилота в самолете.


  1. anarchomeritocrat
    19.08.2022 16:42
    +1

    Похоже пора популярно расставить точки над ё и тем кто топит за Copilot и тем кто топит против. И так...

    Плюсы:

    1. Да, эта штука иногда очень качественно дополняет код по аналогии, причем например если написана логика для buy, предлагает правильную логику для sell, с инверсией сортировки по прайсу и правильным переименованием сущностей в коде

    2. Если дополнение не понравилось, можно нажать <Ctrl + Enter> (в VSCode по крайней мере, там такое сочетание, возможно в других IDE так же - не пробовал) и увидеть кучу других вариантов

    3. До упаду отжигает иногда попытками автодополнить комментарии (в одном проекте, в кругу своих, мы не стеснялись материться в комментариях, типа "// ТУДУ: тут надо зах...ть парсинг попи..тей" и тд), через неделю копайлот матерился как сапожник, чем не слабо доставлял всей команде )

    Минусы:

    1. Далеко не всегда код выглядящий правдоподобно является логически правильным и все дополнения копайлота просто мастхэв тут же, не отходя от кассы, ревьювить очень внимательно, дотошно и скурпулёзно, иначе потом будет ни разу не занимательно, тошно и слёзно (совет - не принимайте дополнения более 10 строк нетривиального кода - <Esc> в помощь)

    2. Периодически предлагает портянки полного бреда который вообще не в тему, снова приходится <Esc> давить, а иногда отрубать его временно, когда совсем достаёт (<Alt + \>)

    3. Матерится гад )) интересно даже, он этому глобально учится, или там есть цензура?

    4. <paranoia>Майкрософт следит за тобой и твой код теперь не только твой!</paranoia>

    Выводы и рекомендации:

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

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

    3. Ревьювинг, рефакторинг и ещё раз ревьювинг - тщательно проверяйте предложенное

    4. Пишите культурные комментарии ))


  1. TiTreivan
    19.08.2022 16:42
    +1

    Прокомментирую картинку "Понял, понял - вычеркиваю" © Жмышенко В.А.


  1. Barmaglote
    19.08.2022 16:42

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


  1. kemsky
    19.08.2022 23:57
    +1

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


  1. DarthVictor
    20.08.2022 01:47
    +2

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

    Мне кажется, типичному разработчику будут более полезны например такие инструменты

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

    2. Программа, которая ищет в Jira задачу, описывающую постановку требований к имеющемуся коду. Нет, не тот тикет, который указан в коммите git blame (там тикет на рефакторинг). И даже не тот, который указан в коммите, в котором впервые появился код (те требования пять раз поменялись). А именно тот, в котором указано, почему сейчас поведение кода именно такое. Если тикета не нашлось, его можно завести, указав в комментариях ПМа, который его должен был завести, но не завёл. Если он уже не работает в компании, то можно продублировать тикет на его странице в LinkedIn.

    3. Программа для проведения код ревью. Должна уметь не только анализировать код, но и приводить комментарии к корпоративному стандарту. Например вместо: "Бл.., Женя, под какими грибами ты писал этот пи..ец, он наеб...т прод уже на полусотне РПС", стоит заменить на: "Я думаю, мы могли бы значительно улучшить этот код, заменив запросы к базе данных в цикле, на один запрос, получающий сразу все данные".

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


    1. Vinchi
      21.08.2022 07:58

      Лучше чтобы создавала по коду уже написанному задачку в джире с описанием


  1. AirLight
    20.08.2022 13:33

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

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