Летом 2021 года Microsoft и GitHub представили нейросетевого помощника программиста Copilot на базе технологий компании Open AI. Авторы проекта научили Copilot премудростям работы с фреймворками и разным языкам программирования. После релиза системы было заявлено, что лучше всего она может работать с такими языками, как Python, JavaScript, TypeScript, Ruby и Go.
Позиционируется Copilot как ассистент разработчика, который помогает найти альтернативные способы решения проблем разработки, улучшить код и изучать новые технологии "на лету", без необходимости погружаться в пучины поисковых систем. Но насколько совершенна эта система и не произойдет ли в один прекрасный момент так, что Copilot заменит большую часть разработчиков? Об этом сегодня и поговорим вместе с Кириллом Кошаевым, старшим тимлидом командных дипломных проектов, а также автором курса “Java-фреймворк Spring” в Skillbox.
Технологии в основе Copilot
Разработчики помощника заявили, что работает он на основе OpenAI Codex, это новая система искусственного интеллекта, которая создана компанией OpenAI. Обучение системы велось на наборах общедоступных данных из репозиториев. В базу для обучения добавили примеры кода объемом в несколько терабайт. После обучения ассистент получил "знания" об основных паттернах использования кода разработчиками.
Copilot в состоянии сгенерировать код из обычного текстового комментария, описывающего работу функции, класса или скрипта, которые собирается написать программист. Другими словами, разработчик может писать вместо кода нечто вроде “функция, которая принимает в качестве аргумента на входе массив не отсортированных чисел и возвращает отсортированный методом пузырька массив чисел на выходе”. Ну а помощник преобразует все это в код.
Система анализирует код программиста, предлагая новые строки или функции, с оценкой смыслового контекста разрабатываемого ПО. При этом помощник самообучаемый, он адаптируется к стилю "своего" разработчика и затем предлагает решения, которые соответствуют уровню программиста.
Что касается кодовой базы, которую использует помощник для своей работы, то позиция Microsoft по этому поводу достаточно понятна. Представители компании заявили, что модель машинного обучения Copilot создает производные работы из ранее полученных входных данных, что может считаться производным продуктом программного обеспечения фактически под лицензией Copyleft или AGPL. Ну а GitHub утверждает, что Copilot обычно не воспроизводит точные фрагменты кода. Компания приводит статистику, что, как часто, это происходит — в 0,1% случаев.
В чем польза для разработчиков?
На мой взгляд, основная ценность Copilot заключается в том, что он сможет повысить эффективность и когнитивные возможности самого человека-программиста. Подобно тому, как один рабочий на экскаваторе может выполнить работу целой бригады землекопов с лопатами, программист, пользующийся Copilot, сможет в разы быстрее производить и отлаживать код. Например, не так давно, решая очередную задачу, мне понадобилось применить бинарный алгоритм поиска. Кейс был достаточно редкий, так что я не помнил наизусть реализацию этого алгоритма и пошел гуглить в поисках каноничного решения. В сумме я потратил на поиск и сравнение различных вариантов реализации около 20 минут, потом еще примерно столько же на написание, тестирование и отладку кода. С Copilot я смог бы написать короткий комментарий вроде “алгоритм бинарного поиска” прямо в текстовом редакторе и тут же получить готовую реализацию, которую останется только подогнать под предметную область задачи.
Правда и фантазии на тему замены людей роботами
После релиза Copilot в сети появилось немало хайповых статей на тему замены разработчиков цифровыми ассистентами. Но все эти рассуждения не имеют под собой никакой доказательной базы. Они появились из-за того, что Copilot вроде бы позволяет разработчику перейти от императивного программирования к декларативному. Это означает, что нужно лишь только дать описание задачи, а компьютер вычислит ее решение сам и при этом наиболее оптимальное. Отсюда следует и якобы правдоподобный вывод: пройдет еще несколько лет и системы, подобные Copilot, вытеснят живых людей из профессии. Просто потому, что ИИ будет полностью сам разрабатывать, тестировать и выкатывать приложения любой сложности.
Но эта точка зрения ошибочна. Дело в том, что Copilot на данный момент не в состоянии генерировать что-то в более сложное, чем, в среднем, алгоритм сортировки пузырьком. Судя по презентациям, система вполне сносно справляется с не очень сложными алгоритмическими кейсами. Вероятно, она может уже или сможет в ближайшем будущем генерировать верстку и какие-то не слишком комплексные сущности.
Но возможности Copilot очень ограничены. Например, помощник от GitHub не сможет спроектировать за вас архитектуру высоконагруженного приложения, разработать высокопроизводительную систему для алгоритмической торговли фьючерсами на фондовой бирже или систему управления двигателем внутреннего сгорания. Более того, массовое тестирование Copilot разработчиками показало, что качество кода помощника довольно низкое и порой содержит критические баги.
В целом, появление такого инструмента, как Copilot вполне может стать инструментом повышения производительности труда разработчиков. Но это ни в коем случае не полная замена самих разработчиков искусственным интеллектом. Более того, в недавней истории IT можно найти немало случаев, когда отрасли программирования предрекали "роботизацию". Пример: появление первых интегрированных сред разработки (IDE). Тогда "эксперты" тоже говорили, что разработчики скоро останутся без работы, поскольку IDE в ближайшем будущем начнут писать весь код за разработчиков.
Потом стали появляться и другие технологии, например, автодополнение кода. И тогда тоже ходили слухи, что вот теперь-то совершенно точно разработчики останутся без работы. Просто потому, что автодополнение кода окончательно сведет на нет их ценность как специалистов.
Но на дворе 2022-й год, а разработчики все так же руками пишут код, причем еще более сложный и комплексный, чем 5, 10, 15 и так далее лет назад. Правда, процесс написания кода требует все более и более комплексных инструментов. И вот как раз помощник от Github является таким инструментом. Copilot, скорее всего, не изменит работу программистов до неузнаваемости, во всяком случае, в ближайшие 5-10 лет. Вместо этого он станет еще одним инструментом в арсенале разработчика, который сделает процесс разработки софта еще более удобным, более высокоуровневым и, что, на мой взгляд, наиболее важно, быстрым. В целом, время покажет.
Останутся ли программисты без работы из-за машин?
Я считаю, что нет. Даже, если появится другой, еще более эффективный инструмент, то он все равно лишь сделает работу программиста быстрее и качественнее. Нейросети помогут создать некий творческий тандем "ИИ-программисты", но заменить человека они не в состоянии.
Могу привести еще одну аналогию. Так, во фронтенд-разработке в свое время сначала были верстальщики, которые вручную создавали код html-разметки статичных сайтов. Потом появился CSS, Javascript, JQuery, различные шаблонизаторы, динамические сайты, - и работы у верстальщиков стало меньше. Потом появились целые js-фронтенд-фреймворки, а работу верстальщиков к тому моменту автоматизировали такие инструменты как Tilda или Wordpress, Wix и так далее. Но профессия никуда не делась - верстальщики продолжают работать, используя эти и другие инструменты.
Потерять работу программист может лишь в одном случае - если не будет учиться, дополняя свои знания и практические навыки. Но и тогда такого разработчика заменит вовсе не машина - а другой человек, более профессиональный, прилежный и готовый постоянно учиться.