Поиск по сайту:

Почему второй пилот GitHub — это не конец программирования


Запуск Copilot на GitHub вызвал немало дискуссий на прошлой неделе. Copilot претендует на роль «программиста вашей пары ИИ», который работает вместе с вами над созданием лучшего кода.

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

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

Что такое второй пилот?

Во-первых, полезно узнать, что такое Copilot сегодня. Предварительная версия основана на OpenAI Codex, системе искусственного интеллекта, приобретенной Microsoft у OpenAI. Это мощный анализатор исходного кода, совместимый с десятками популярных языков программирования.

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

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

Система также может автоматизировать завершение повторяющихся разделов кода, таких как массив объектов с похожими свойствами. Вы можете написать первые несколько вручную, а затем Copilot заполнит остальную часть массива, используя ваш пример. Это напоминает перетаскивание значений ячеек в Excel.

Как далеко зашел второй пилот?

В настоящее время ответ «не очень далеко». Несмотря на все модные словечки «интеллектуальный», «контекстный» и «синтезатор», Copilot по-прежнему имеет ограниченное представление о ваших истинных намерениях и о том, чего должен достичь ваш код.

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

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

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

Второй пилот не масштабируется

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

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

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

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

По собственному признанию GitHub, Copilot действительно зависит от вас. Инструмент работает лучше всего, когда ваша кодовая база логически организована в небольшие функции с четкими типами, комментариями и блоками документации. Если вы хотите получить наилучшие результаты, вам придется вести Copilot за собой, самостоятельно написав высококачественный код.

Что насчет лицензирования?

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

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

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

Эти события должны быть редкими. Говорят, что они более вероятны, если окружающий контекст кода слаб или неясен. Примеры, замеченные до сих пор, включают код Quake под лицензией GPL, который выпускается как есть (в комплекте с ненормативной лексикой), а также текст веб-сайта реального человека и социальные ссылки, появляющиеся, когда Copilot думает, что вы пишете страницу «обо мне».

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

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

Заключение

Copilot — амбициозный проект, вызвавший много дискуссий. Уровень дебатов указывает на то, что многие люди испытывают сильные чувства по поводу этой идеи. Давненько новый инструмент разработчика не вызывал столько шума в первый же день.

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

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

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

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

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

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