{}const=>[]async()letfn</>var
ИИОсновы

Как учиться программированию, когда ИИ пишет код: система проверки знаний

Строим обучение с AI без слепого копирования: сначала прогноз, затем подсказка, ручная трассировка, тесты, объяснение своими словами и повтор задачи без модели.

К

Кодик

Автор

7 мин чтения

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

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

1До AI

Свой план, пример входа и ожидаемый результат.

2С AI

Одна подсказка или вопрос, а не полный проект.

3После AI

Трассировка, тесты и повтор без истории чата.

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

Как учиться, когда ИИ пишет код: упражнение с тестами

Попросите AI не решать задачу, а придумать граничные случаи. Затем реализуйте функцию самостоятельно. В примере скидка не должна быть отрицательной или превышать цену. Assert превращает размытое «работает» в четыре проверяемых условия. Если тест падает, сначала объясните причину словами и только потом просите подсказку.

def final_price(price: int, discount: int) -> int:
    if price < 0 or discount < 0:
        raise ValueError("Values must be non-negative")
    return max(0, price - discount)


assert final_price(100, 30) == 70
assert final_price(100, 0) == 100
assert final_price(100, 150) == 0

try:
    final_price(-1, 0)
except ValueError:
    pass
else:
    raise AssertionError("Negative price must fail")
Ожидаемый результат
  • Четыре сценария проходят без вывода
  • Ученик может объяснить ветки и придумать ещё один тест

Следующий шаг состоит не в усложнении функции, а в восстановлении по памяти. Закройте ответ и напишите похожую shipping_cost с другими правилами. Если структура переносится, знание закрепляется. Если без AI остаётся пустой файл, уменьшите размер подсказки: попросите назвать концепцию, задать вопрос или показать один контрпример вместо полного решения.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Режимы AI по уровню помощи

ЭлементЧто означаетЧто делать
Сократический вопросМинимальная помощьКогда можете продолжить сами
Намёк на концепциюНебольшая помощьКогда не знаете следующий инструмент
ПсевдокодСредняя помощьКогда понятна идея, но теряется порядок
Частичный кодВысокая помощьДля разбора нового API
Полное решениеМаксимальная помощьТолько как материал для review и повтора

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

Уровни помощи AI и проверка знания повтором по памяти
Проверка усвоенного: спускайтесь по шкале помощи от полного решения к псевдокоду, намёку и сократическому вопросу, а знание считайте закреплённым, когда похожая функция пишется по памяти при закрытом ответе.

Практика: напишите final_price сами и проверьте себя четырьмя assert

Заведите пустой файл price.py и не открывайте чат первым делом. Сначала запишите свой прогноз, потом сами реализуйте final_price(price, discount), а у модели попросите только список граничных случаев. Успех: python price.py отрабатывает молча, и вы можете вслух объяснить каждую ветку функции.

  1. Прогноз в комментарии. Первой строкой price.py напишите комментарий: что функция вернёт при discount больше price и что должно случиться при отрицательной цене. С этим предсказанием вы будете сравнивать и свой код, и ответ модели.
  2. Граничные случаи от модели. Попросите AI не решать задачу, а перечислить граничные случаи для расчёта скидки. Возьмите из ответа только формулировки: скидка больше цены, нулевая скидка, отрицательные значения на входе.
  3. Своя реализация final_price. Напишите функцию руками: проверка price < 0 or discount < 0 с raise ValueError и возврат max(0, price - discount). Код модели пока не показывайте и не вставляйте.
  4. Четыре assert и запуск. Добавьте assert на 70, на 100 и на 0, а четвёртой проверкой сделайте блок try, except ValueError, else с raise AssertionError. Запустите python price.py: успех выглядит как полностью пустой вывод.
  5. shipping_cost по памяти. На следующий день закройте price.py и историю чата и напишите похожую функцию shipping_cost с другими правилами. Если структура переносится, знание закрепилось, а если файл остаётся пустым, уменьшите размер подсказки до одного вопроса.

Теперь сломайте функцию специально. Замените max(0, price - discount) на price - discount и запустите снова: строка assert final_price(100, 150) == 0 упадёт с AssertionError, потому что вернётся -50. Затем уберите проверку на отрицательные значения, и четвёртый сценарий выдаст AssertionError с текстом "Negative price must fail", ведь ValueError больше никто не поднимает. Верните обе строки, убедитесь в пустом выводе и запишите, какое требование фиксировал каждый упавший assert.

Критерий готовности. Готово, когда вы объясняете без подсказки, зачем нужен max(0, ...), какая строка ловит отрицательный вход и почему четыре проверки бьют по разным веткам, а не по одной. Подтверждение: пустой вывод python price.py и написанная на следующий день shipping_cost, в которой вы не подглядывали в прошлый ответ.

Дальше усложняйте требования, а не размер функции: добавьте процентную скидку с округлением и перенесите проверки в pytest с parametrize. Попросите модель сделать review вашего кода и на каждое замечание ответьте, согласны вы или нет и почему. Заведите правило по времени: 15 минут самостоятельно, затем один намёк, и только после решения просите разбор.

Частые ошибки и почему они появляются

Слепое копирование заметно не в момент ответа, а при первой новой ошибке. Другая ловушка состоит в бесконечном диалоге: каждая следующая подсказка уменьшает необходимость удерживать задачу в голове. Третья ошибка: просить AI сгенерировать и код, и тесты, а затем считать их взаимным доказательством без собственного ожидаемого результата.

Нет собственной попытки

Даже пять минут прогноза создают вопросы, по которым ответ можно оценить.

AI удаляет падающий тест

Тест фиксирует требование. Исправляйте причину или явно меняйте контракт.

Новая зависимость без проверки

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

Самопроверка

Что записать до того, как спрашивать AI?

До запроса запишите три вещи: план решения, пример входа и ожидаемый результат. Тогда ответ модели есть с чем сравнить, и вы заметите выдуманный API или тест, который ничего не проверяет.

Как понять, что знание закрепилось, а не скопировалось?

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

Почему тесты, написанные AI, не доказывают правильность кода?

Тесты от AI не являются доказательством, когда модель писала и реализацию, и ожидаемое поведение: одно и то же неверное понимание задачи попадёт в оба места. Задайте хотя бы одно ожидаемое значение вручную, как assert final_price(100, 150) == 0.

Сколько решать самому, прежде чем просить подсказку?

Рабочий лимит на уроке такой: 15 минут самостоятельной попытки, затем один намёк, а не готовое решение. Даже пять минут прогноза дают вопросы, по которым потом можно оценить ответ модели.

Какой уровень помощи выбрать: намёк, псевдокод или готовый код?

Уровень помощи подбирают по месту застревания: сократический вопрос, когда можете продолжить сами, намёк на концепцию, когда не знаете следующий инструмент, псевдокод, когда идея понятна, но теряется порядок. Частичный код берите для разбора нового API, а полное решение только как материал для review и повтора.

Что делать, если AI предлагает удалить падающий тест?

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

Что делать дальше

На следующем уроке установите лимит: сначала 15 минут самостоятельно, затем только один намёк. После решения напишите три теста и объяснение. Практическую базу удобно строить на курсе GenAI. Формат хорошего запроса возьмите из статьи про промты, а инструмент выбирайте через сравнение альтернатив Cursor.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты