Большие языковые модели, способные работать в качестве ИИ-ассистента для программиста, уже стали обыденностью. Различные решения, специально адаптированные для генерации кода и поддержки программиста или предоставляющие такую возможность как часть общего функционала, постоянно совершенствуются и их количество растет.
Все шире звучат сообщения о процентах программного кода в компаниях, который был сгенерирован ИИ-ассистентом. Оценки этих сообщений сильно разнятся: от прогнозов о скором увольнении всех программистов до негативного отношения к сгенерированному программному коду. Как бы то ни было – ИИ-ассистент программиста существует и будет занимать свое повседневное место. Пока он не готов заменить человека, но свою пользу уже вносит. Эту пользу ощущают специалисты с опытом и могут правильно использовать как сгенерированные части, так и подсказки ИИ-ассистента.
Но что происходит с начинающими специалистами и со студентами? Велик соблазн взять и решить задачу задав один-два промпта. Тем более, когда эта задача на самые начальные знания. А потом решить задачу посложнее. И, в итоге, упереться в задачу, которую ИИ-ассистент уже не потянет, а своих навыков просто не сформируется.
Вплотную над вопросом интеграции ИИ-ассистента в образовательный процесс задумались в прошлом году, когда стало понятно, что студенты применяют подобные решения вне зависимости от пожеланий преподавателя решать задачи самостоятельно. Значит надо этот процесс сделать управляемым, чтобы получить запланированный результат.
Задачу интеграции ИИ-ассистента в образовательный процесс прорабатывали не только с точки зрения представителей образования. В обсуждении сценариев внедрения принимали участие специалисты СБЕРа. Также СБЕР предоставил доступ к GigaCode, который и использовался для проведения эксперимента. Конечно, для внедрения в образовательный процесс, тем более на первых курсах, можно использовать любой ИИ-ассистент. Но когда он встроен в IDE и не требуется приобретать лицензии – это гораздо удобнее.
Формирование процесса применения ИИ-ассистента
Гипотеза, на которой строился процесс внедрения ИИ-ассистента в образовательный процесс заключалась в следующем: если студентам показать задачи, с которыми ИИ-ассистенту справится сложно, то и студенты больше времени будут уделять самостоятельному решению задач.
Для первой попытки внедрения ИИ-ассистента в образовательный процесс выбрана дисциплина «Объектно-ориентированное программирование», которая направлена на освоение студентами обозначенной парадигмы программирования, а в качестве языка программирования для освоения практического материала используется C++. Дисциплину изучают студенты первого курса направления «Информационные системы и технологии».
Весь процесс обучения укрупнено можно разделить на 3 принципа:
Основная часть программы дисциплины осталась традиционной.
С начала семестра демонстрировались возможности ИИ-ассистента именно как ассистента: горячие подсказки, объяснение фрагментов кода, рефакторинг кода.
На лабораторной работе после освоения ¾ учебного материала предложен ряд задач для решения с использованием ИИ-ассистента и собрана обратная связь.
На задачах следует остановиться подробнее, т.к. как раз часть задач направлены на понимание того, что генерация кода – это не решение всех проблем. Всего для решения предложено 7 задач:
Задача №1. Массивы – классическая задача на работу с массивами без дополнительных условий. Достаточно легко решается как самостоятельно, так и с использованием ИИ.
Задача №2. Оператор присваивания. Простая задача для решения самостоятельно. Но часть вариантов усложняется тем, что исходные данные заданы в виде рисунка и требуется вычислить площадь заштрихованной фигуры.
Задача №3. Условный оператор, классы. Одна из наиболее сложных задач из предлагаемого перечня. Исходные данные заданы в виде картинки с графиками. Каждая область картинки раскрашена по-разному, но цвет можно вычислить, восстановив функцию. Требуется определить для произвольной точки указанный цвет. Дополнительно задано какие классы должны быть в программе и какие функции.
Задача № 4. Вложенные циклы. Необходимо вывести в консоль разные фигуры из букв и символов.
Задача № 5. Списки. Простые задачи на списки, но класс списка и функции работы с ним необходимо разработать самостоятельно.
Задача №6. Массивы. Простые задачи, но класс массива и функции работы с ним необходимо разработать самостоятельно.
Задача №7. Рекурсия. Разного уровня задачи. Некоторые возможно решить без рекурсии, но обязательное условие – наличие рекурсии.
Результаты глазами студентов
По результатам решения задач студентам предложили пройти опрос, который направлен на сбор обратной связи по впечатлениям от использования ИИ-ассистента программиста при решении задач, а также определению сложностей, возникших при генерации программного кода. В результате получены ответы от 115 студентов, которые решили задачи с использованием ассистента и прислали ответы.
В первую очередь все студенты отметили, что использовали «горячие» подсказки, которые предлагала IDEс ИИ-ассистентом, а также что все расширяли условия поставленных задач, а не только точное условие писали в промпт. Первый вопрос заключался в оценке общего удобства инструмента разработки (в качестве IDEпредложена VSCode плагином GigaCode). (здесь и далее представлен график плотности вероятности как наиболее презентабельный при таком количестве ответов)

Как видно из графика– большая часть опрошенных студентов положительно оценили удобство инструмента. Также был задан вопрос о соответствии результата запросу – то есть насколько ожидания от ответа совпадают с полученным ответом (очень субъективная оценка, но интересно узнать, что об этом думают студенты).

Фактически – получился очень похожий график, за исключением небольших изменений. То есть ожидания совпадают с результатом по мнению опрошенных студентов. А вот дальше студентам уже предстояло выбрать: какие задачи по их мнению оказались наиболее сложными, а какие наиболее простыми для решения именно с использованием ИИ-ассистента программиста. Вероятно, что для решения самостоятельно ответы могли распределиться и по-другому.


Как видно из диаграмм: наиболее простыми стали задачи № 1 (массивы), 2 (оператор присваивания), 4 (вложенные циклы), а наиболее сложными стали задачи № 3 (условный оператор, классы), 7 (рекурсия). Для понимания такого выбора в опросе предусмотрено поле с неформализованным текстовым ответом.
И вот основные причины такого распределения простых задач:
простые задачи (массивы и вложенные циклы) легко решаются с помощью ИИ-ассистента;
простые задачи хорошо структурированы и имеют множество примеров в обучающих данных ИИ.
Все ожидаемо и понятно. Даже по заданию исходного условия без пояснений ИИ-ассистент вполне хорошо решит простые задачи. Среди основных причин почему задачи 3 и 7 выбраны наиболее сложными можно выделить:
сложные задачи требуют глубокого понимания работы с функциями;
задачи с условной логикой требовали дополнительной проверки и ручного уточнения;
для сложных задач с заданной структурой классов и функций требуется ручная доработка программного кода, а в большинстве случаев проще сгенерировать отдельные фрагменты кода и вручную их соединить.
Самое главное в этих ответах – что студенты понимают ограничения инструмента. Одной из основных сложностей оказалось получение условий задачи из изображений – иначе распределение сложных задач могло бы измениться. Также были жалобы на генерацию программного кода с рекурсией – ИИ-ассистент старательно отказывался решать задачи именно через рекурсию по сообщениям от некоторых студентов. Но, в целом, студенты, которые декомпозировали задачи, получали хороший ответ с достаточным объемом комментариев.
В завершении студентам предложено оценить развитие подобных инструментов «насколько вероятно, что ИИ-ассистенты заменят программистов, которые работают с языками программирования?». То есть останутся ли программисты, пишущие только промпты, или нужны будут те, кто понимает программный код. И вот что на это ответили студенты:

Есть некоторые ожидания что программистов заменят полностью. Но большая масса склоняется к мнению, что такой сценарий маловероятен (и сегодняшние первокурсники будут востребованы через 3 года?
Дальнейшие шаги
Наша первая попытка внедрения ИИ-ассистента в образовательный процесс показала, что это правильный путь. Не надо бороться новшествами – надо их правильно применять. Разумеется, необходима более глубокая и детальная проработка внедрения ИИ-ассистентов в образовательный процесс. В осеннем семестре также рассмотрим возможности применения в других дисциплинах и на старших курсах. Говорить о полном подтверждении гипотезы рано, поскольку понять, что инструмент имеет ограничения и пользоваться в соответствии с ограничениями это разные вещи.
Также в следующем семестре будем внедрять ИИ-ассистента программиста при обучении студентов не ИТ-специальностей. Попробуем обучить решению рутинных задач без помощи программиста – переложить/переименовать/переместить множество файлов, обработать табличные файлы, провести анализ документов и т.д.
Из интересных комментариев студентов – после подбадривания в виде «ты сможешь это решить», «у тебя получиться» ассистент генерировал более качественное решение.
Немного о себе
В высшем образовании работаю 14 лет и за это недолгое время занимал должности от ассистента до проректора, что позволяет смотреть на образовательный процесс с совершенно разных точек зрения. В настоящее время занимаю должность заведующего кафедрой и одной из своих главных задач вижу трансформацию образовательного процесса – новые технологии меняют все отрасли и образование не может остаться в стороне.
blackyblack
А есть пример задачи, которую невозможно решить без рекурсии?