Как ИИ помогает упростить труд разработчика
Как нейросети становятся новым инструментом в арсенале разработчиков
Современные генеративные модели научились уже многому, в том числе писать код. С одной стороны, это сильно облегчает решение учебных задач и контестов, с другой — вызывает понятный страх, что искусственный интеллект отнимет у программистов работу.
Подобная «волна тревог» за будущее разработчиков программного обеспечения уже случалась ранее. В 1970–1980-е годы стали появляться высокоуровневые языки программирования, такие как C++ и Pascal. Из-за этого возникло мнение, что специально обученные программисты окажутся не нужны. Обычный офисный сотрудник — юрист или экономист — сможет задать компьютеру инструкцию или провести расчёт без помощи разработчика. То есть создателю программ не понадобится профессиональное образование.
Как известно, эти опасения не оправдались. Получилась совершенно обратная история: с появлением новых языков программирования задач для разработчиков стало не меньше, а больше. Один программист стал выполнять больше задач за единицу времени, но это привело не к уменьшению количества задач, а к их усложнению. Усовершенствовались и программы, плоды труда программистов. Появились новые типы программ: например, для редактирования изображений и вёрстки текстов.
То же самое происходит сейчас: работа программиста становится более высокоуровневой. Во-первых, появляется больше задач, связанных с чтением сгенерированного кода, его оценкой и проверкой корректности. Во-вторых, написать промт для специализированной генеративной модели — это тоже целое искусство. Генеративная модель работает не так, как размышляет человек, а потому инструкции ей нужно давать специальным образом, чему также нужно учиться.
Решать такие задачи успешно может только эрудированный разработчик. Без понимания тонкостей работы процессора, памяти, операционной системы невозможно добиться от машины действительно эффективного решения. Качественное образование в области разработки программного обеспечения не теряет своей ценности — и вот ещё несколько причин этого.
ИИ может ошибаться. Пример из практики: нескольким нейросетям предложили решить одну и ту же задачу — и большинство моделей выдали нерабочий код. Как выяснилось, этот самый код распространён в интернете в качестве примера того, как делать не нужно. И подобных случаев можно вспомнить много. Программист должен уметь разбираться, что именно модель сделала не так.
Сгенерированный код может работать правильно, но неэффективно. Тогда его нужно оптимизировать, а без знаний и навыков программирования сделать это не получится.
Код — это ещё не готовый продукт. Нейросети могут генерировать программы, но системы этих программ — например, по предоставлению государственных услуг или для построения маршрута в городе — нужно собирать самостоятельно. Кроме того, из программы ещё нужно сформировать продукт, который будет нужен пользователям, который купят. Это задача для людей.
Нейросети под силу не все задачи. Если решение можно найти в интернете минут за 20, она справляется хорошо, но задания посложнее пока не очень легко поддаются современному ИИ.
Робот не отвечает за последствия. Даже если нейронка помогла врачу определить на снимке лёгких болезненные участки, диагноз ставит человек — и ответственность за принятое решение лежит на нём. То же самое с программистами: если программа разработана плохо и что-то в результате её работы пошло не так, виноват в этом будет не ИИ, а человек, автор.
Программист — это своего рода переводчик с языка людей на язык машины. Он знает, как рассказать машине, что ей нужно сделать. А то, с чем взаимодействуют современные разработчики, — операционные системы, виртуальные среды — можно сравнить с усилителем руля в автомобиле. Без него поворачивать руль возможно, но очень тяжело.
Алексей Мицюк, доцент ФКН НИУ ВШЭ
Какие задачи можно поручить нейросетям
Типовые: создать сайт-визитку или простой интернет-магазин. Это можно сделать в конструкторах сайтов со встроенным ИИ, таких как Framer или 10Web. Подобные технологии приводят к развитию no-code- и low-code-платформ. Они дают возможность создавать несложные программы вовсе без написания кода: пользователь только составляет графическую блок-схему приложения, а исходный код генерируется за него.
Некоторые no-code-платформы тоже используют ИИ: например, в конструкторе видеоигр GDevelop можно попросить нейросеть сделать визуал для игры.
Вспомогательные: синтезировать фрагменты кода или найти дубликаты. В проектах на несколько десятков или даже сотен тысяч строчек кода могут встретиться повторы — части, написанные разными людьми по-разному, но работающие одинаково. В таком случае, как правило, лучше оставить одну версию кода, на которую создать ссылки из разных частей проекта. Нейросеть сможет быстро отыскать дубликаты и привести их к единому образцу.
Вот что ещё она может делать:
-
Давать советы по рефакторингу.
-
Искать и исправлять ошибки в коде.
-
Оптимизировать и ускорять алгоритмы.
-
Генерировать тесты, комментарии и документацию.
В основном машинное обучение используется в тех областях деятельности человека, которыми мы заниматься не любим или плохо умеем. Например, писать код программистам нравится, а документацию — не очень. Поэтому, скорее всего, такие задачи человечество автоматизирует раньше.
Не только ИИ: что ещё меняет разработку?
Дополненная реальность. Уже сейчас программирование постепенно переносится в виртуальную среду: некоторые разработчики используют VR-очки, чтобы организовать вокруг себя удобное рабочее пространство с несколькими большими экранами. Однако возможности дополненной реальности на этом не заканчиваются. В будущем весь процесс разработки может переместиться в AR, а программист сможет не писать промт, а, например, наговаривать его вслух компьютеру.
Подобные исследования и разработки уже ведутся: например, российская компания «Альфа-Интех» создала систему для программирования роботов в дополненной реальности. Она позволяет не только дистанционно менять траекторию движения робота, но и генерировать код для технологической программы на RCML (Robot Control Meta Language).
Развитие вычислительных мощностей. Оно приводит к изменению нашего восприятия компьютера как чего-то персонального. Возможно, когда-нибудь мы станем воспринимать все устройства — смартфоны, умные часы, ноутбуки — не по отдельности, а как единую вычислительную среду. Разработчики будут взаимодействовать именно с ней, а не с конкретными устройствами. Но это уже другой подход, который пока не очень распространён.