Microsoft недавно открыла бета-версию Github Copilot, мощного инструмента для завершения кода, основанного на кодексе OpenAI. Я был одним из немногих счастливчиков, которые получили доступ около недели назад, и я был впечатлен. Чрезвычайно впечатлен. Тоже немного испугался. Но главное впечатление.

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

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

Зачем впечатляться?

Чтобы понять мое благоговение, нам сначала нужно обсудить, насколько сложна задача генерации кода по сравнению с другими проблемами машинного обучения. (СПОЙЛЕР: это очень сложно). Возьмем простой пример прогнозирования цен на жилье. Когда вы начнете обучать классификатор, он будет работать плохо: он может предсказать цену в 100 000 долларов, когда реальная цена составляет 200 000 долларов. Тем не менее, очень легко: а) точно сказать, насколько ошибочен прогноз (-100 тысяч долларов) и б) указать модели, как ее улучшить (т. е. скорректировать эти веса с помощью некоторого алгоритма оптимизации).

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

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

И все же OpenAI решил эту проблему. Даже для относительно сложных подсказок, таких как «обучить логистическую регрессию на данных MNIST и вывести матрицу путаницы», результат приличный. Конечно, это может не соответствовать вашему личному стилю и иметь причудливую структуру папок, но это разумно.

Где второй пилот терпит неудачу

Теперь вы можете подумать: «Хорошо, что он может выполнять логистическую регрессию, но он с треском провалился при выполнении X», где X обозначает любую проблему науки о данных, над которой вы работали. Из моего собственного (ограниченного) опыта работы с Copilot я столкнулся с несколькими X, включая:

1. Сбор данных с произвольных веб-сайтов

2. Преобразование данных в конкретной предметной области (т. е. извлечение упоминаний общественных ИИ-компаний в новостных статьях)

3. Длинные сложные спецификации (т. е. копирование описания домашнего задания в файл Python (не судите строго!))

Хотя все это задачи, с которыми регулярно сталкиваются специалисты по данным, важно понимать масштабы того, что требуется для их решения. Сбор данных с произвольных веб-сайтов в основном потребует от Copilot точного представления структуры каждого отдельного веб-сайта (И понимания того, какие выходные данные требуются). Понимание трансформации конкретной предметной области будет означать, что Copilot понимает каждую отдельную область, в которой работают специалисты по данным (которая становится большинством областей!). А понимание длинных и сложных спецификаций, по сути, означало бы полную автоматизацию работы специалиста по обработке и анализу данных (и значительно облегчило бы мою домашнюю работу).

Общим для всех этих задач является то, что они в некотором смысле являются A(G)I-полными, а это означает, что для их решения ИИ потребуется общий интеллект. Это означало бы, что до второго пилота, революционизирующего что-либо, еще далеко. Тем более, что AGI уже давно не за горами.

Или будет? Второму пилоту не нужно решать все наши проблемы, чтобы изменить правила игры. Даже если он решает примерно 20 процентов, это сэкономит много времени.

Важно помнить, что Copilot прошел путь от невозможного до чего-то подобного; они перешли от нуля к единице. Сделать этот первый прыжок часто бывает трудной частью. Людям потребовалось около 12 000 лет, чтобы научиться летать. Чтобы добраться до Луны, понадобилось всего 60 человек. И если действуют текущие законы масштабирования, Copilot может работать немного быстрее.

Copilot меняет способ написания кода

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

Когда я начал экспериментировать, я быстро понял, что очень быстро адаптировал свой стиль кодирования. До Copilot (BC) мой опыт программирования был быстрым повторением идеи, попытки заставить ее работать, гуглить проблему и реализовать переполнение стека / какой-то пост в блоге / какой-то документ. Этот подход сослужил мне (и многим моим друзьям-программистам) хорошую службу.

После второго пилота (AC) поток выглядит иначе. По моему опыту, я трачу больше времени на размышления о том, как программа должна работать, затем как указать это с помощью заголовка комментария/функции, а затем оцениваю результат — также итеративно.

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

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

2. Copilot упрощает опробование новых фреймворков:просто написав очистить randomsite.com для чего-то, используя «beautifulsoup4», Copilot выдаст вам достаточно хорошо структурированный результат. Это значительно упрощает модификацию кода под специфику вашего проекта.

3. Второй пилот уменьшает количество переключений контекста:это основное. Часто Copilot заменяет Переполнение стека в качестве первого источника помощи. Это позволяет вам делать гораздо больше внутри вашей IDE, не отвлекаясь на чудеса Интернета.

В вышесказанном я немного преувеличиваю. Я до сих пор трачу много времени на переполнение стека и вручную устраняю изломы, где Copilot (неизбежно) терпит неудачу. Причина моего преувеличения в том, чтобы открыть вам глаза на то, как это может работать. Как любит говорить один из моих любимых ютуберов Two Minute Papers: еще две газеты впереди, и кто знает, где мы окажемся. Какое время быть живым!

О работе с данными (и их потенциальном отсутствии)

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

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

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

Это не все хорошие новости для специалистов по данным. Автоматизируя скучные вещи, Copilot отдает предпочтение опытным специалистам по данным, которые хорошо разбираются в принципах проектирования программного обеспечения и в том, как структурировать проекты. Но как насчет младших специалистов по данным (и других программистов), которым еще предстоит научиться писать SOLID-код и другие важные шаблоны? Как они должны отличать хорошие предложения от плохих?

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

Благодарности

Эта статья основана на беседах с Андреем Александру, Эсбен Кран и Люком Рингом. Особая благодарность Эсбену за то, что он прочитал черновик первого черновика. Все мнения и ошибки мои собственные.