Описать, запустить, проверить
Вы узнаете
Вайбкодинг - это цикл из трёх шагов: вы описываете, что хотите, программа запускается, а проверка отвечает да или нет.
Вайбкодинг значит, что вы описываете простыми словами, чего хотите, а ИИ-агент пишет программу. На этом ваша часть не заканчивается. Вы запускаете программу и сверяете результат со своим описанием, потому что программа может завершиться без ошибки и всё равно быть неверной. В спеке этого урока счёт в кафе - это число напитков, умноженное на цену одного: 3 напитка по 4 - это 12. Запуск, который складывает вместо умножения, печатает 7, спокойно завершается, и проверка его отвергает. Проверка - это тест, и тест судит результат, а не человека и не программу, которая его написала.
Попробуйте
Откройте спек в плеере и запустите: 3 теста проходят. Потом поменяйте RAN_TAB с 12 на 7 и запустите снова: тест the_run_matches_the_wish краснеет. Верните 12 на место.
A wish in plain words, a run that prints a number, and a check that says yes or no. A run that only looks fine is rejected. Lesson 1 of the vibecoding course.
specs/vibecoding/describe_run_check.t27
// SPDX-License-Identifier: Apache-2.0
; Vibecoding lesson 1: describe, run, check.
; You describe what you want, a program runs, and a test judges the result.
; The test is the part that does not take the program's word for it.
module vc_describe_run_check;
; 1. DESCRIBE: the wish, in plain words, written before any code.
pub const WISH : str = "A cafe tab is the number of drinks times the price of one drink. Change is the money paid minus the tab.";
pub const STEPS : [3]str = ["describe", "run", "check"];
; 2. RUN: the program an agent could write from that wish.
pub fn tab(drinks: u16, price: u16) -> u16 {
return drinks * price;
}
pub fn change(paid: u16, owed: u16) -> u16 {
return paid - owed;
}
; The inputs of one example, and what the run printed for tab(3, 4) and change(20, 12).
pub const DRINKS : u16 = 3;
pub const PRICE : u16 = 4;
pub const PAID : u16 = 20;
pub const RAN_TAB : u16 = 12;
pub const RAN_CHANGE : u16 = 8;
; A run that finishes without an error and is still wrong: the sum instead of the product.
pub const WRONG_RAN_TAB : u16 = 7;
; 3. CHECK: the test says yes or no against the wish, not against the program.
test the_run_matches_the_wish {
assert RAN_TAB == DRINKS * PRICE;
assert RAN_CHANGE == PAID - DRINKS * PRICE;
}
test the_check_rejects_a_run_that_only_looks_fine {
assert WRONG_RAN_TAB == DRINKS + PRICE;
assert WRONG_RAN_TAB != DRINKS * PRICE;
}
test three_steps_in_order {
assert STEPS[0] == "describe";
assert STEPS[1] == "run";
assert STEPS[2] == "check";
}
Все уроки
Модуль 1 · Что такое вайбкодинг
Вы описываете, агент пишет, вы запускаете и проверяете. Что такое программа, и пять мифов, проверенных тестом.
Модуль 2 · Ваш рабочий стол
Редактор с агентом рядом, десять команд терминала и чтение сообщения об ошибке.
Модуль 3 · Точки сохранения в git
Коммит это точка сохранения, ветка это безопасная проба, а ключ это пара, одна половина которой остаётся приватной.
Модуль 4 · Промптинг
Части промпта, пример вместо прилагательного и один маленький шаг за раз.
Модуль 5 · Рабочий цикл
Четыре фазы от идеи до выпуска, цикл из четырёх шагов и что делать, когда вы застряли.
Модуль 6 · Тест как судья
Тест говорит да или нет, подложенная ошибка показывает, что тест работает, а дифф читают до того, как принять.
Модуль 7 · Из чего состоит агент
Чем агент отвечает, что он умеет делать с инструментами и что хранит между сообщениями.
Модуль 8 · Начальный бот
Бот это цикл сообщений, бот строится из спеки, а секрет остаётся вне репозитория и промпта.
Модуль 9 · Ваш собственный проект
Спека для вашей идеи, одна величина, измеренная после запуска, и честный план на следующий месяц.