ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: у меня не было возможности использовать второго пилота — я в списке ожидания, как и все остальные. Я пишу на основе впечатлений, которые я получил от довольно приятного веб-сайта, лежащей в его основе технологии OpenAI Codex и моих собственных элементарных представлений о том, как работает машинное обучение.
Microsoft, владельцы Github, объявили, что 29 июня 2021 года новый проект — Github Copilot — вошел в техническую предварительную версию. Это расширение редактора кода Visual Studio, которое анализирует ваш код и предлагает дополнения — даже многострочные функции — на основе алгоритм машинного обучения, который был обучен на всем Github. Судя по онлайн-примерам и отзывам, это звучит как большое дело.
Теперь вас приглашают вступить в список ожидания, и кто знает? вы можете быть одним из счастливчиков, которые могут дать ему вращение. Спойлер: Github сказал: мы предлагаем GitHub Copilot ограниченному числу тестировщиков бесплатно и если технический предварительный просмотр будет успешным, мы планируем создать коммерческую версию GitHub Copilot в будущем. Производственная версия почти наверняка не будет доступна бесплатно и, вероятно, не будет дешевой. Если это так хорошо, как обещают, оно может стать одним из основных продуктов в коммерческих магазинах программирования, но независимые разработчики, такие как я, которым нужно это, возможно, не смогут оправдать это. Ну, просто говорю.
Я думаю, что у Copilot есть реальные перспективы и возможность внести существенные улучшения в процесс кодирования. Но из того, что я видел — и в этом есть смысл — Copilot не создает. Все, что он делает, — это пытается собрать воедино специальное описание значения программиста из информации, встроенной в код, комментарии и имена, в, надеюсь, правильный исполняемый код. Ваше неформальное описание, вероятно, должно содержать чуть меньше деталей, чем сам код. Таким образом, Copilot трансформирует и совершенствует, а не вводит новшества*.
* Это наблюдение, кстати, можно обобщить на каждый проект машинного обучения (ML), который я видел до сих пор — очень мощные, но грубые инструменты обобщения, которые на самом деле не имеют более «одного уровня» понимания (что бы это ни значило). ) Может ли ИИ сделать больше? Очень возможно, но я еще не видел ни одного доказательства концепции.
Ходит шутка: после второго пилота приходит пилот, и тогда мне придется устраиваться на новую работу (если она есть). Кроме шуток, переход от второго пилота к пилоту НАМНОГО больше, чем переход из ничего к второму пилоту — это даже не одно и то же.
Но вот проблема. Самый фундаментальный принцип разработки программного обеспечения — СУХОЙ — не повторяйся. Повторение одного и того же кода в двух местах — это запах кода — вы должны найти способ написать его только один раз, например, поместить его в функцию. Формальное название предотвращения повторов — абстракция.
Теперь, чтобы такая модель, как Copilot, могла обучаться, ей нужно много избыточности в наборе данных. Успех Copilot зависит от того факта, что в коде, который мы пишем сегодня, все еще есть множество дубликатов — мы еще далеко не достигли этого. И реальное решение проблемы избыточности заключается в улучшении абстракции — поиске и использовании новых механизмов абстракции, а также в изучении того, как применять абстракцию более широко и эффективно*.
*На этом я остановлюсь на своих любимых технологиях: чистых функциональных языках программирования, особенно Haskell. Функциональные языки очень серьезно относятся к абстракции — у них есть множество мощных механизмов абстракции, и их сообщества очень стараются открывать новые способы кодирования общих шаблонов. Программы на Haskell используют меньше строк кода для выполнения тех же задач. Мне было бы очень интересно узнать, менее ли эффективен Copilot на Haskell из-за меньшей избыточности.
Прорывная уловка Copilot — это способность анализировать естественный язык в комментариях, именах функций и переменных, чтобы выдвигать предложения. Тем не менее, многие примеры на веб-сайте показывают, что Copilot может — и делает — предлагать многострочные фрагменты кода, на которые я смотрю и думаю: их не следует вставлять, их следует абстрагировать. Делая это, Copilot фиксирует дублирующий стиль кодирования. В то же время, когда Copilot выполняет вашу работу за вас, он также избавляет вас от необходимости быть многословным и повторяющимся, тем самым поощряя кодирование в стиле «копировать-вставить». Меня беспокоит, как это может затормозить поиск абстракций. Абстракция — это больше, чем экономия времени разработчика — она может даже замедлить вас. Скорее, это помогает сделать код более читабельным и удобным в сопровождении (путем удаления ненужных деталей), оно даже может сделать код более правильным и производительным (потратив время на то, чтобы сделать его правильно один раз), но прежде всего — он улучшает наше понимание разработки программного обеспечения — он позволяет нам распознавать эти паттены, даже давать им имена и, таким образом, направляет нас к мышлению более высокого уровня. Слепая вставка кода из Copilot ничего из вышеперечисленного не делает.
Конечно, с другой стороны, Copilot может побуждать разработчиков писать комментарии, и это хорошо. Опять же, они, вероятно, не будут удалять или обрезать комментарии после того, как напишут(?) код, и, следовательно, комментарии будут повторять то, что говорит код, что плохо*.
* См. Главу 1 Практики программирования, чтобы узнать, почему.
Можем ли мы использовать ИИ для поиска абстракций? Очень возможно, и это было бы удивительно. но это будет намного сложнее, чем просто анализировать и копировать код, и никто размером с Microsoft/Github даже не пытается.
Я не критикую Co-pilot — это определенно кажется не уловкой, а удивительным продуктом, который может изменить то, как мы кодируем, и особенно помочь разработчикам преодолеть разрыв между младшими и профессиональными программистами. Я просто надеюсь, что деятельность программирования не сделает шаг назад в результате.
Автор этой статьи будет рад проконсультировать вас по вашему проекту или проблеме на Haskell, независимо от размера или уровня сложности. Свяжитесь с нами по адресу [email protected].
Первоначально опубликовано на https://arifordsham.com 1 июня 2021 г.