Искусственный интеллект в программировании: чего ждать, чего бояться
Недавно прогремел GitHub со своим новым продуктом Copilot. Из ближайшего прошлого помнятся слова Kite и Codota (ныне Tabnine). Всё это щупальцы искусственного интеллекта, призванные изменить отрасль разработки программного обеспечения. В целом, шум затих, пена сошла, можно смотреть в более прозрачное будущее. В этой статье я опишу свои впечатления и переживания по поводу всего этого AI-я.
Первое впечатление
Я пробовал Codota (когда Tabnine еще так назывался) и попал в EAP для Coplilot. Разница колоссальна, а прогресс очевиден. За такой рывок стоит в первую очередь сказать спасибо инженерам из OpenAI, которые выкатили новое поколение алгоритма обработки естественного языка GPT3, на котором и базируется Copilot.
Около года назад, тестируя Codot-у, у меня не было ощущения, что AI добрался до уровня того, что он сможет как-то изменить рынок. Да, было прикольно посмотреть как 2 раза из 5 Codotа угадывала забежавшие вперед мысли. В какой-то момент это начало надоедать и мешать тем, что засоряет выбор вариантов. Дело в том, что зачастую я уже знаю что пишу, и автодополнение кода использую не для поиска вариантов решения задачи, а для того чтобы писать быстрее. Так закончилось мое первое знакомство с искусственным интеллектом как помощником при разработке. Удалил, забыл, назад не тянуло.
Буквально месяц назад получил EAP для Github Copilot и решил снова убедиться в своих выводах о том, что AI пока слишком туп чтобы чем-то помочь. Первые впечатления были просто ошеломляющими. Многострочный автокомплишен просто восхитил! Попробовал разные варианты и всегда находил нужный кусочек кода, который делал именно то, что я хотел! Мне, как прожженному Java адепту, стало невыносимо просто писать на JavaScript-е, в котором раньше ориентировался только используя мощь интернетов.
Заменит ли AI разработчиков?
Изначально мне показалось, что с таким прогрессом ответ на этот вопрос строго положительный. Более того, это дело ближайшего будущего. Виделось это так: достаточно писать комментарии, а потом выбирать наиболее подходящий кусочек кода. Определенные навыки для этого нужны, но явно не сеньорские. Этакий Comment Driven Development, и главный профит такого подхода — мечта любого разработчика — сразу документированный код.
Однако, буквально сразу вы начинаете замечать, что все предложенные кусочки кода как-то старомодны и не используют даже let и const. В этот момент тревоги за будущее своей зарплаты начинают отступать :).
Кто хочет погрузиться в глубину этого вопроса, очень рекомендую послушать мысли Тагира Валеева (https://twitter.com/tagir_valeev), с которыми я полностью солидарен: https://habr.com/ru/company/jugru/blog/534866/.
Проблема «среднего» кода
Продолжая тему старомодного кода. Для Copilot-a нет авторитетов. Он шерстит всю открытую кодобазу, и учится всему. Учится хорошему и плохому в равной степени, не отдавая предпочтения ни тому, ни другому. Чему научился, то и делает. Давайте теперь задумаемся над простым вопросом: какого кода на GitHub-е больше, старого или нового? Хорошего или плохого? Вот в том-то и дело.
И это первое беспокойство, на котором я бы хотел остановиться. Инструменты типа Copilot-a репродуцируют «средненький» код. А потом этот код летит на гитхаб увеличивая выборку «средненького» кода. На котором снова учится наш бездушный друг. Этакое сваливание к устойчивому положению равновесия… или скатывание в потенциальную яму.
Слово «средний» я применяю не характеризуя качество кода, а закладываю в него статистический смысл. Если у вас есть впечатление, что среднестатистический код на GitHub-е хорош, то волноваться незачем.
Откуда будем брать сеньоров?
Традиционные устои в отрасли таковы, что опытный разработчик, не желая делать простую и понятную для себя работу, норовит скинуть ее на более низкий уровень. Там, на более низком уровне зарплат, закаляется новое поколение сеньоров. Они набивают руки и шишки на тех самых простых задачах, получают бесценный опыт, поднимаются в грейде и уже сами начинают скидывать всю скучную для них работу вниз.
К чему это я. С Copilot-ом у меня сложилось впечатления, что уже очень скоро, вместо того чтобы ставить типовую задачу джуну, нужно будет просто нажать Tab и чутка поправить добавленный Copilot-ом код (все равно джунов надо ревьюить, как и copilot). Т.е. я поймал себя на мысли, что очень вероятно copilot со своим развитием сломает те самые традиционные устои. И вот второе беспокойство: если не нужны джуны, то откуда возьмутся новые сеньоры?
Что с лицензиями?
Это обсуждение уже прогремело в интернетах, но все же я на нем остановлюсь, чтобы коллекция беспокойств была полной.
Вот я написал код, дал ему опенсорсную лицензию и выложил на GitHub. Я хороший человек. Я делюсь своими трудами. Но хотел ли я, чтобы какой-то алгоритм использовал мой код для массовой репликации его частей в другие программы? Прямого разрешения я точно не давал, а тут уже все сделали и у меня не спросили…
Еще одна проблема с вирусными лицензиями типа GPL. Вот надергал вам Copilot какие-то куски из кодобазы, которая под GPL, и что теперь? Вы тоже обязаны присягнуть на верность этой лицензии? Или же мы считаем, что Copilot восстановил это все по памяти и не копировал код напрямую? Тогда проблем нет. Собственно, к такому заключению и пришли на просторах интернета.
Или еще вопрос такой. А если добавить маленьким шрифтом, что «я запрещаю AI использовать мой код в каких либо целях и в нарушении буду требовать миллиард долларов». Видимо, придется наш искуственный интелект сначала научить юридическим тонкостями, чтобы он случайно не промотал все деньги своих хозяев.
Что с новыми технологиями?
Важная часть развития индустрии состоит в изобретении языков и фреймворков, позволяющих более оптимально решать те или иные задачи. В том числе с точки зрения утилизации золотых трудовых ресурсов. Но если Copilot и ему подобные становятся инструментами общего потребления, то все новые технологии будут вынуждены проходить «порог обучаемости». Другими словами, пока нет достаточной кодобазы для обучения нейросети, технология не сможет рассчитывать на массовое применение. Уж не знаю хорошо это или плохо, но есть ощущение, что подобного рода инструменты могут серьезно замедлить прогресс в части вывода в массовое пользование новых языков программирования, а также добавления новых возможностей к существующим (java streams или let и const, упомянутые выше). Оно же касается фреймворков и библиотек.
Что делать с нежелательными артефактами?
Еще одна тема взбудоражившая интернет — всякие автодополнения, которые выглядят некорректными прежде всего с моральной точки зрения:
На мой взгляд, здесь ответ очевиден, искусственный интеллект не отягощен моралью. Все что вы ему покажете (закоммитите) — все будет доступно широкой общественности. Будь то ваш персональный секрет, логин или пароль… Видимо, придется просто принять эту реальность и более тщательно все ревьюить, тем более это и раньше надо было делать. А что делать с уже утекшими секретами? Они больше не секреты. Заводите новые. Вы в ответе за пароли, которые вы приручили :).
Заключение
Думаю, заключение к этому всему писать рано. AI развивается семимильными шагами. Будем смотреть к чему это все приведет. Перечисленные выше опасения — не более чем заметки человека с уровнем природной паранойи сильно выше среднего. При любых раскладах нужно оставаться открытыми к прогрессу, принимать его и учиться с ним жить.