Идеи и инсайты

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

Да, но ваша система типов должна знать, что такое доллар

TypeScript видит все числа как одинаковые. Вот как научить его различать USD и EUR, чтобы компилятор отлавливал баги конвертации валют ещё до продакшена.

В 2022 году крупная финтех-платформа обработала массовый перевод на 32 700 000,00. Сумма хранилась как обычный . Даунстрим-сервис предполагал, что она в…

Число — это не просто число: как заставить компилятор ловить баги с единицами измерения

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

Функция просит таймаут в миллисекундах. Вы передаёте . Позже другая функция просит таймаут в секундах. Вы передаёте . Где-то между ними вызываете и ничего не…

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

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

В прошлом квартале мы допустили баг, из-за которого вернули деньги не тому клиенту. Функция получила идентификатор пользователя там, где ожидала идентификатор…

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

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

Можно доверять differential testing без формального доказательства, но только если точно понимать, где оно даёт сбой. Эта слабость называется common-mode…

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

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

Вы построили n-версионную систему. Три независимые реализации одной и той же критической функции, voter, который выбирает результат большинства, и приятное…

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

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

Вы отправляете промпт в GPT-4o. Он возвращает JSON с уверенностью 0.97. Вы отправляете тот же промпт в Claude 3.5 Sonnet. Он возвращает другой JSON, тоже с…

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

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

У вас есть пять реализаций одной и той же функции. Три возвращают одинаковый результат. Одна немного отличается. Одна выбрасывает исключение. Какая из них…

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

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

N-version programming предполагает, что разнообразие приходит от разных авторов. С LLM это означает разные модели, разных провайдеров, возможно, разные…

NASA запускала 27 копий одной программы. Баги голосовали единым блоком.

N-version programming обещало, что независимые команды допускают независимые ошибки. Эксперимент Knight и Leveson в 1986 году доказал обратное, и NASA тихо отказалась от этой идеи.

В начале 1980-х NASA столкнулась с вопросом, который до сих пор преследует критически важную инженерию: как смириться с багами, которые вы ещё не нашли? Их…

Половина ваших сценариев Cucumber пропущена. Вот почему этот статус вам лжёт.

Статус 'skipped' в Cucumber скрывает три совершенно разные проблемы. Вот как диагностировать, какая из них пожирает ваш тестовый набор, и как это остановить.

Половина ваших сценариев Cucumber пропущена. Не упала. Пропущена. Этот жёлтый статус хуже, чем красная сборка. Он заставляет набор выглядеть здоровым, скрывая…