Пять мифов, каждый проверен тестом
Вы узнаете
Фраза, которая звучит верно, проверяется маленьким случаем и тестом, так что миф можно проверить, а не спорить о нём.
Пять фраз о вайбкодинге звучат верно, но неверны. Если программа запускается без ошибки, она верна: среднее 4 и 8, записанное как a плюс b, делённое на 2, печатает 8, а ответ 6. Один пройденный тест доказывает, что код верен: x умножить на x равно x плюс x при 2, но не при 3. Агент помнит весь разговор: он читает окно, в этом случае 8 сообщений из 20 отправленных. Шаг всегда можно отменить: 7, поделённое пополам и удвоенное, это 6. Проверка, которая проходит, - хорошая проверка: та, что отвечает да на всё, ответит да и на 2 против 3. Каждый миф - это маленький случай, и тест его решает.
Попробуйте
Запустите спек: 6 тестов проходят. Поменяйте AVG_RAN с 8 на 6 и запустите: myth_1_runs_but_wrong падает, потому что запуск больше не совпадает с тем, что печатает неверная программа. Потом запишите шестой миф от себя как случай с числами и тест.
Five sentences that sound right about vibecoding, each settled by a small case a test can run. Lesson 3 of the vibecoding course.
specs/vibecoding/myth_tests.t27
// SPDX-License-Identifier: Apache-2.0
; Vibecoding lesson 3: five myths, each put to a test.
; A myth is a sentence that sounds right. Each one below has a small case a test can settle.
module vc_myth_tests;
pub const MYTHS : [5]str = [
"If it runs without an error, it is right.",
"One passing test proves the code is right.",
"The agent remembers the whole conversation.",
"A step you do can always be undone.",
"A check that passes is a good check."
];
; Myth 1. average(a, b) written as a + b / 2 runs, and gives the wrong answer.
pub fn average_wrong(a: u16, b: u16) -> u16 {
return a + b / 2;
}
pub const AVG_A : u16 = 4;
pub const AVG_B : u16 = 8;
pub const AVG_RAN : u16 = 8;
; Myth 2. double(x) written as x * x agrees with x + x at 2 and at nothing else but 0.
pub fn double_wrong(x: u16) -> u16 {
return x * x;
}
pub const PROBE_ONE : u16 = 2;
pub const PROBE_TWO : u16 = 3;
; Myth 3. An agent reads a window of recent messages, not all of them.
pub const MESSAGES_SENT : u16 = 20;
pub const WINDOW : u16 = 8;
pub const MESSAGES_KEPT : u16 = 8;
; Myth 4. Halving and then doubling a whole number does not always give it back.
pub const ODD : u16 = 7;
pub const EVEN : u16 = 8;
; Myth 5. A check that says yes to everything also passes the wrong run.
pub const CHECK_SAYS_YES_TO_ALL : bool = true;
pub const GOT : u16 = 2;
pub const WANT : u16 = 3;
test myth_1_runs_but_wrong {
assert AVG_RAN == AVG_A + AVG_B / 2;
assert AVG_RAN != (AVG_A + AVG_B) / 2;
}
test myth_2_one_test_is_not_enough {
assert PROBE_ONE * PROBE_ONE == PROBE_ONE + PROBE_ONE;
assert PROBE_TWO * PROBE_TWO != PROBE_TWO + PROBE_TWO;
}
test myth_3_the_window_is_smaller_than_the_talk {
assert MESSAGES_KEPT == WINDOW;
assert MESSAGES_KEPT < MESSAGES_SENT;
}
test myth_4_undo_is_not_free {
assert EVEN / 2 * 2 == EVEN;
assert ODD / 2 * 2 != ODD;
}
test myth_5_a_check_that_cannot_fail {
assert CHECK_SAYS_YES_TO_ALL == true;
assert GOT != WANT;
}
test five_myths_listed {
assert MYTHS[0] == "If it runs without an error, it is right.";
assert MYTHS[4] == "A check that passes is a good check.";
}
Все уроки
Модуль 1 · Что такое вайбкодинг
Вы описываете, агент пишет, вы запускаете и проверяете. Что такое программа, и пять мифов, проверенных тестом.
Модуль 2 · Ваш рабочий стол
Редактор с агентом рядом, десять команд терминала и чтение сообщения об ошибке.
Модуль 3 · Точки сохранения в git
Коммит это точка сохранения, ветка это безопасная проба, а ключ это пара, одна половина которой остаётся приватной.
Модуль 4 · Промптинг
Части промпта, пример вместо прилагательного и один маленький шаг за раз.
Модуль 5 · Рабочий цикл
Четыре фазы от идеи до выпуска, цикл из четырёх шагов и что делать, когда вы застряли.
Модуль 6 · Тест как судья
Тест говорит да или нет, подложенная ошибка показывает, что тест работает, а дифф читают до того, как принять.
Модуль 7 · Из чего состоит агент
Чем агент отвечает, что он умеет делать с инструментами и что хранит между сообщениями.
Модуль 8 · Начальный бот
Бот это цикл сообщений, бот строится из спеки, а секрет остаётся вне репозитория и промпта.
Модуль 9 · Ваш собственный проект
Спека для вашей идеи, одна величина, измеренная после запуска, и честный план на следующий месяц.