Идеи и инсайты · Страница 8

Исследуем AI-first разработку, кодовые ограждения и архитектуру одноразовости.

TypeScript позволил мне передать идентификатор пользователя туда, где ожидается идентификатор заказа

Псевдонимы типов не создают отдельные типы в TypeScript. Брендированные типы — да, и они могут защитить вас от перепутывания идентификаторов на этапе компиляции.

Differential testing работает без формального доказательства, но common-mode failures — вот подвох

Differential testing позволяет находить баги, не зная правильного ответа. Проблема в том, что коррелированные ошибки выглядят как согласие. Вот как обнаружить слепые зоны.

Тестирование не докажет, что две функции эквивалентны. Вот что докажет.

N-версионное программирование предполагает, что ваши реализации согласованы. Мы разбираем, почему тестов недостаточно, как SMT-солверы могут реально доказать эквивалентность и где провести границу между «достаточно хорошо» и формально верифицировано.

Что делать, если мои варианты LLM не согласны? Какой из них прав?

Запуск нескольких LLM параллельно позволяет отлавливать ошибки, которые любая отдельная модель уверенно пропустит. Вот как построить систему разрешения разногласий, которая действительно работает.

Пять реализаций и нет большинства: как на самом деле выбрать лучшую

N-version programming звучит просто: запустить несколько реализаций и выбрать лучший ответ. На практике «лучший» определить гораздо сложнее, чем «самый распространённый».

Тот же LLM может написать пять версий вашей функции. Вот как сделать их по-настоящему разными.

N-version programming с LLM не требует нескольких моделей. Можно извлечь разнообразные, корректные реализации из одной модели, варьируя промпты, персоны и ограничения на рассуждения.

Ваш компилятор проверяет синтаксис. Ваши тесты должны проверять архитектуру.

Большинство команд документирует правила архитектуры в вики. Вот как записать их в виде исполняемых тестов, которые ломают CI, когда ваш граф зависимостей уходит от задуманного.