Летом 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 и так далее. Но профессия никуда не делась - верстальщики продолжают работать, используя эти и другие инструменты.

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

Комментарии (18)


  1. syfim
    25.02.2022 18:26
    +29


  1. GryZin
    25.02.2022 18:26
    -1

    Как такого реализа Copilot не состоялось - лично мне сложно что-либо сказать как это работает на практике. Демо с начало впечатлило и я решил опробовать близки по функционалу аналог TabNine (ближе нету на рынке ). Ну так себе очень много ложных предложений - вообще не понимает контекст. После тестирования такой штуки пришло понимание того чтобы хоть как-то Copilot более менее стал полезным инструментом - его придется обучать иначе будет предлагать не то и не так. Вообщем пока не понятно каким образом эту штуку внедрять в реальный процесс разработки.


  1. speller
    25.02.2022 19:32
    +3

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


  1. zloddey
    25.02.2022 21:35
    +10

    Но на дворе 2022-й год, а разработчики все так же руками пишут код, причем еще более сложный и комплексный, чем 5, 10, 15 и так далее лет назад. Правда, процесс написания кода требует все более и более комплексных инструментов. И вот как раз помощник от Github является таким инструментом.

    Не соглашусь. Судя по самой статье и по комментариям, copilot гарантированно добавляет сложности в код, но не всегда решает проблему правильно. Т.е., при каждом его применении мы увеличиваем "случайную сложность" без гарантии решения проблемы. Значит, сложность и комплексность будут расти опережающими темпами? Правильнее было бы работать над инструментами, которые позволяли бы сдерживать или уничтожать случайную сложность, вытягивать незаметные паттерны из существующего кода, помогать находить подходящие под текущий случай абстракции, помогать распространять единообразие по кодовой базе. Это была бы реальная поддержка в работе с усложняющимся кодом. Но copilot - движение в совершенно противоположном направлении, и это печально.


    1. dfgwer
      26.02.2022 12:37

      Копилот позволяет писать код, не понимая код! Это ли не торжество ИИ?


      1. zloddey
        26.02.2022 17:33
        +2

        Победа ML над здравым смыслом


    1. noRoman
      27.02.2022 09:26

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

      За это спасибо IDE JetBrains и им подобным)


  1. keydach555
    25.02.2022 21:42
    -1

    Могу привести еще одну аналогию. Так, во фронтенд-разработке в свое время сначала были верстальщики, которые вручную создавали код html-разметки статичных сайтов. Потом появился CSS, Javascript, JQuery, различные шаблонизаторы, динамические сайты, - и работы у верстальщиков стало меньше. Потом появились целые js-фронтенд-фреймворки, а работу верстальщиков к тому моменту автоматизировали такие инструменты как Tilda или Wordpress, Wix и так далее. Но профессия никуда не делась - верстальщики продолжают работать, используя эти и другие инструменты.

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


    1. aPiks
      26.02.2022 12:29
      -1

      Бесплатной...

      Hidden text


  1. dfgwer
    26.02.2022 12:44

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


    1. mgis
      26.02.2022 13:48
      -1

      И то и другое неверно. Человек в прогрессивном обществе давно коробки не перетаскивает, склады Амазона тому пример.


      1. z0rlog
        28.02.2022 11:52
        +1

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


  1. quaer
    26.02.2022 14:43
    -1

    ИИ пишется программистами чтобы оставить себя без работы?

    Или чтобы заработать себе денег?

    А если он будет уменьшать их оплату труда, другие программисты начнут думать как помешать ИИ писать код?


  1. BlackSCORPION
    26.02.2022 17:00
    +2

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

    С опытом, все чаще ловлю себя на мысли, что у меня много идей, мне интересно продумывать их в голове, но становится резко тяжело когда все это надо реализовать в материальном мире ????

    Было бы классно если бы я мог говорить "Джарвису" свои идеи, а он бы делал все остальное и рассказывал что получается в итоге. Не нужно будет больше сидеть у ноутбука, можно программировать катаясь на сноуборде, "Джарвис" мог бы говорить в гарнитуру что получилось, а я бы, немного подумав, говорил ему что делать дальше.

    Ведь за это мы и любим ИИ, за идеальный симбиоз, люди любят творчество но ненавидят рутину, ИИ не умеет в творчество но может 24/7 делать 1 и тоже и не выгорать.

    Пусть пока ИИ в программировании кажется бесполезным, но это первые шаги, без которых невозможны последующие


    1. DASpit
      26.02.2022 21:06

      Индус на аутсорсе? Естественный интеллект для решения ваших задач.


  1. censor2005
    26.02.2022 17:37
    +2

    А мне понравился AI Doc Writer (https://marketplace.visualstudio.com/items?itemName=mintlify.document) - инструмент для написания комментариев к коду. Поначалу отнёсся с недоверием, но потестил на нескольких кусках кода, и был удивлен. Он смог правильно определить название реализованного алгоритма (Moore Neighborhood), а так же что в коде реализована "Игра Жизнь". Определенно, интересный инструмент


  1. udjin123
    27.02.2022 20:49

    Использую Tabnine на php, go и js, сложно сравнить с тем что не пробовал (Copilot), но пока особо не вижу преимуществ с обычным IDEшным автокомплитом, да и частенько предлагает не то что нужно. Но Copilot интересно пощупать, быстрее всего будет мощнее инструмент, ждем когда откроют. И конечно прогресс развития инструментов радует, по сравнению с блокнотиком.


  1. Thisnickname2019
    28.02.2022 15:59

    Мне кажется Copilot нужно тренировать на написание хотя-бы простых тестов. Вот тогда это будет огонь.