1. Про GitHub Copilot
Я перестал писать блог с момента закрытия Google+ в апреле 2019 года, перебиваясь общением в телеграмных чатиках и постами в закрытые группы в Фейсбуке. Иметь своё место, куда можно писать мысли, очень хотелось, но не хотелось связываться ни с каким существующим сервисом. Ещё меньше хотелось поднимать WordPress, Drupal или что угодно ещё и потом разбираться с тем, как там что работает, ставить постоянные обновления и не понимать, что там внутри происходит.
Короче, было понятно, что нужно просто сделать свою маленькую уютную платформу для блога, но до написания кода руки не доходили.
И вот внезапно Microsoft выпускает Copilot: если вы не слышали, это такой плагин для Visual Studio Code, который помогает вам писать код либо фактически пишет его за вас. По отзывам в интернете было непонятно, насколько эта штука в действительности полезна и нужно ли уже начинать думать о новой профессии, если искусственный интеллект уже настолько хорош, что пишет программы. Короче, всё внезапно сложилось, я открыл ноут и, активно используя Copilot, за несколько вечеров сделал несложный сайтик на Node.js+Express.js+Firestore — вот этот вот сайтик, который вы сейчас читаете. Кажется, будет справедливым в первом посте этого нового блога рассказать о своих впечатлениях о Copilot.
Все скриншоты в этом посте сделаны мной лично на моём личном ноутбуке.
Самое страшное
Да, в интернете пишут правду:
Это я просто придумал пример из головы, но идея понятна: нужно быть постоянно начеку. Копайлот — это не очень опытный помощник, который, стоит ненадолго отвернуться, сделает что-нибудь неожиданное, странное или совершенно недопустимое, типа предложения хранить пароли в открытом виде:
Справедливости ради, вариант с bcrypt
там тоже предлагался.
Добавим к этому несколько совершенно наивных примеров, и можно сделать быстрый вывод, что эта штука совсем никуда не годится. i < value
, серьёзно?
Или вот такое:
Короче, первый вывод простой: не используйте Copilot для решения простых алгоритмических задачек и всегда проверяйте результат.
Примеры получше
Как очень быстро выясняется, сила копайлота в том, что он обучился на тысячах примерах использования реальных API. Это просто самое главное: если вы хоть чуть-чуть представляете, как устроено API, подсказки нереально ускорят написание кода.
Сохранить session key в Redis?
Прочитать документ с максимальным id
из Firestore?
Короче говоря, огромное количество времени экономится на чтении примеров к API, указанию правильных параметров, взятию результата из правильного поля.
Для этого поста я решил показать, как может выглядеть написание кода с помощью копайлота. Давайте сделаем примитивный сервис short links с хранением ссылок в Redis. На гифке ниже вырезан основной кусочек, а полное видео с записью экрана в нормальном размере выложено на YouTube.
Что плохо?
Плохо всё, что не связано напрямую с написанием кода. Copilot ускоряет ровно один процесс: процесс заполнения файла в текстовом редакторе символами. Если нужно что-то изменить — возвращайся и правь ручками, задачи вида «а сейчас я хочу во все функции в этом файле передать переменную db
» копайлотом не решаются.
Копайлот не напишет за вас код, если вы не понимаете, чего вы хотите. Точнее, может быть, и напишет, но работать ничего не будет. В примере выше я не помнил, как парсить JSON body у запроса в express
и не был точно уверен в API Redis, но я примерно представлял, что я хочу получить, и Copilot помог. Если не понимать, чего вы хотите получить — результат будет непредсказуем, ужасен и с большой вероятностью не скомпилируется. Кстати, вы заметили на видео, как Copilot не закрыл скобки в конструкциях app.get('...', (req, res) => { ... });
?
Копайлот может предложить чуть-чуть неправильный код, и если вы не проверяете очень внимательно то, что он хочет — у вас проблема. Особенно это касается регулярных выражений, которые нужно рассматривать буквально под лупой, чтобы убедиться, что там написано именно то, что вы имели в виду.
Что хорошо?
Автоматизация муторных действий. Написать какой-нибудь CRUD – теперь не повод для прокрастинации.
Важно отметить, что мой случай — это хобби-кодинг. Я пишу какое-то количество кода для себя на своём личном ноуте в свободное время, никуда его обычно не публикую и в целом ничем не рискую. Использовать эту штуку на работе для серьёзных вещей я не рекомендую. Но как игрушка для свободного времени — отлично.
Напоследок
Он умеет писать не только код.