Техника predict-then-diff помогает разработчикам проверять AI-код, предсказывая вывод до его просмотра. Узнайте, как это улучшает навыки и предотвращает баги. Попробуйте сегодня!
Представьте: вы пишете промпт, AI выдаёт код, вы бегло просматриваете — и всё, «выглядит нормально», отправляете в продакшн. Знакомо? Проблема в том, что такой подход не развивает реальное понимание. Вы просто распознаёте знакомые паттерны, а не оцениваете логику. Техника predict-then-diff (предскажи-затем-сравни) заставляет вас сформулировать гипотезу до того, как увидеть ответ. Это неудобно, но именно дискомфорт — признак роста. Давайте разберём, как это работает на практике.
Идея проста: перед тем как посмотреть на код, сгенерированный AI, вы записываете, что ожидаете увидеть. Затем сравниваете с реальным выводом. Разрыв между ожиданием и реальностью — и есть урок. Проблема в том, что наш мозг привык просто принимать ответы, а не формулировать гипотезы. Первый день этого эксперимента вызывает лёгкое страдание: вы чувствуете себя как на контрольной, где ответ оказался неверным.
Пример: нужно написать функцию пагинации списка в SwiftUI. Обычно я просто смотрел бы на вывод AI и кивал. Но здесь я записал ожидание: LazyVStack, onAppear для подгрузки, переменная состояния для номера страницы. Реальный код использовал .task вместо onAppear и Task.detached, которого я не ожидал. Разрыв заставил меня понять, что я не знаю, зачем нужен Task.detached. Это неприятно, но полезно.
Есть сцена в аниме «Фрирен»: героиня настолько привыкла к определённому шаблону магии, что не замечает, когда он нарушается. То же самое происходит с разработчиками, которые просто «узнают» код AI, не оценивая его. Predict-then-diff ломает эту иллюзию. На третий день эксперимента я поймал себя на том, что предсказал force-unwrap, а AI использовал guard с ранним возвратом. Мой прогноз был хуже — и это показало, что мои инстинкты заржавели.
# Пример: предсказание vs реальность
# Моё предсказание (плохое):
# let value = dict[key]! # force-unwrap
# Реальный код AI (лучше):
if let value = dict[key] {
// используем value
} else {
return // ранний выход
}
Разрыв между моим прогнозом и реальностью научил меня большему, чем час чтения документации.
На пятый день я проверял сетевой код. Предсказал простой do-catch с общим сообщением об ошибке. AI же выдал код, который молча проглатывал таймаут и возвращал кешированное значение без комментариев. Если бы я просто прочитал, то, скорее всего, принял бы это как «умное кеширование». Но из-за предсказания я заметил несоответствие и начал копать. Оказалось, что кеш маскировал баг в детекции таймаута. Этот баг ушёл бы в прод, если бы не техника.
# Предсказание: do-catch с логированием
do {
let data = try await fetchData()
// обработка
} catch {
print("Ошибка: \(error)")
}
# Реальный AI-код (проблемный):
if let cached = cache.get(key) {
return cached # молча возвращает кеш, даже при таймауте
}
// нет обработки ошибок
Мораль: предсказание заставило меня задать вопрос «почему?», а не просто принять код.
Не нужно делать это для каждой строчки. Для тривиальных геттеров это театр. Но для любой логики, где ошибка может привести к багу, попробуйте:
Это неудобно, но эффективно. Вы перестанете быть пассивным потребителем AI-кода и начнёте активное обучение. Попробуйте неделю — и вы заметите, как ваш навык чтения кода вырастет.
Попробуйте технику на следующей задаче. Не обязательно писать код — можно просто предсказывать алгоритм или структуру. И честно ответьте себе: последний раз, когда вы приняли AI-код, у вас была гипотеза о том, как он должен выглядеть? Или вы просто прочитали и сказали «да, похоже на правду»? Если второе — predict-then-diff для вас.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →