GitHub Copilot — он вам не нужен
Я его попробовал и уверяю вас: он вам не подходит. И у меня есть несколько очень веских аргументов, почему это именно так…
Вот серьезно. Разработчики программного обеспечения во всем мире пишут прямо-таки религиозные документы о чистом коде, парадигмах разработки программного обеспечения, спорят о валидности оператора 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!