English Русский Alexander Fenster

1. Про GitHub Copilot

Я перестал писать блог с момента закрытия Google+ в апреле 2019 года, перебиваясь общением в телеграмных чатиках и постами в закрытые группы в Фейсбуке. Иметь своё место, куда можно писать мысли, очень хотелось, но не хотелось связываться ни с каким существующим сервисом. Ещё меньше хотелось поднимать WordPress, Drupal или что угодно ещё и потом разбираться с тем, как там что работает, ставить постоянные обновления и не понимать, что там внутри происходит.

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

И вот внезапно Microsoft выпускает Copilot: если вы не слышали, это такой плагин для Visual Studio Code, который помогает вам писать код либо фактически пишет его за вас. По отзывам в интернете было непонятно, насколько эта штука в действительности полезна и нужно ли уже начинать думать о новой профессии, если искусственный интеллект уже настолько хорош, что пишет программы. Короче, всё внезапно сложилось, я открыл ноут и, активно используя Copilot, за несколько вечеров сделал несложный сайтик на Node.js+Express.js+Firestore — вот этот вот сайтик, который вы сейчас читаете. Кажется, будет справедливым в первом посте этого нового блога рассказать о своих впечатлениях о Copilot.

Все скриншоты в этом посте сделаны мной лично на моём личном ноутбуке.

Самое страшное

Да, в интернете пишут правду:

функция checkPassword возвращает true

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

предлагает хранить пароль открытым текстом

Справедливости ради, вариант с bcrypt там тоже предлагался.

Добавим к этому несколько совершенно наивных примеров, и можно сделать быстрый вывод, что эта штука совсем никуда не годится. i < value, серьёзно?

функция проверки числа на простоту проверяет до n

Или вот такое:

рекурсивная функция поиска чисел Фибоначчи

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

Примеры получше

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

Сохранить session key в Redis?

сохранение session key в Redis

Прочитать документ с максимальным id из Firestore?

прочитать документ с максимальным id из Firestore

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

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

пишем код shortlink service

Что плохо?

Плохо всё, что не связано напрямую с написанием кода. Copilot ускоряет ровно один процесс: процесс заполнения файла в текстовом редакторе символами. Если нужно что-то изменить — возвращайся и правь ручками, задачи вида «а сейчас я хочу во все функции в этом файле передать переменную db» копайлотом не решаются.

Копайлот не напишет за вас код, если вы не понимаете, чего вы хотите. Точнее, может быть, и напишет, но работать ничего не будет. В примере выше я не помнил, как парсить JSON body у запроса в express и не был точно уверен в API Redis, но я примерно представлял, что я хочу получить, и Copilot помог. Если не понимать, чего вы хотите получить — результат будет непредсказуем, ужасен и с большой вероятностью не скомпилируется. Кстати, вы заметили на видео, как Copilot не закрыл скобки в конструкциях app.get('...', (req, res) => { ... });?

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

Что хорошо?

Автоматизация муторных действий. Написать какой-нибудь CRUD – теперь не повод для прокрастинации.

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

Напоследок

Он умеет писать не только код.

рандомный текст на русском языке

About / Disclaimer