Как стать автором
Обновить

Комментарии 90

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

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


GitHub Copilot — Crash, Boom, Bang!

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Короче, да простит меня сообщество за ссылку на комментарий, но если что вот:

https://habr.com/ru/news/t/674574/#comment_24489088

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обычный язык, вот взять даже 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)`. У нас это три строчки и таковых в проекте много и я не писал их руками ни разу.

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

15 строк кода, которые я не писал, а просто пробежал глазами на валидность.

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

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

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

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

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

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

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

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


img


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Я говорю про сложность "напишите такую абстракцию над тестовым фреймворком чтобы можно было протестировать какую-нибудь штуку одной строкой '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.5 миллиона строк всяких тестовых билдеров которые создавали сущности в консистентном состоянии. Как вспомню так вздрогну.

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

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

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

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


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


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

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

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

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

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

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

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

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

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


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

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

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

should test that insertion two words inside token gives two units

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

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

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


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

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

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

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

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


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

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

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

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' ] )
			
},

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

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

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


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

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

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

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


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

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


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

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


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

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

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

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

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

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

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


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

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

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

Не поверю

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


  • Продажники и менеджеры сидят в гарнитурах и громко спорят о новых фичах с клиентами.
  • Программисты сидят в гарнитурах и громко спорят о написании кода с Copilot 3.13.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

Похоже пора популярно расставить точки над ё и тем кто топит за 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. Пишите культурные комментарии ))

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

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

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

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

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

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

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

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

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

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий