Архитектура

Дженерики, шаблоны, erasure: параметрический полиморфизм в разных языках

Дженерики, шаблоны, erasure: параметрический полиморфизм в разных языках

Один вопрос — как написать код, работающий для многих типов, без дублирования — языки решают принципиально по-разному: мономорфизация (C++, Rust), стирание типов (Java), гибрид GC-shape stenciling (Go), реификация (C#). За синтаксисом стоит выбор компилятора, и он даёт измеримые последствия по скорости, размеру бинаря и выразительности

TDD и BDD на практике: red-green-refactor, outside-in и цена Gherkin

TDD и BDD на практике: red-green-refactor, outside-in и цена Gherkin

TDD — это техника дизайна через обратную связь, а не про 100% покрытие; BDD — общий язык примеров, а не «TDD с Cucumber». Разбираем цикл red-green-refactor, школы Detroit и London, BDD как спеку через примеры и честную цену Gherkin — на живом Go-стенде с реальными прогонами и mutation-тестированием

Тестирование распределённых систем: уровни, границы, асинхронность

Тестирование распределённых систем: уровни, границы, асинхронность

Юнит-тесты не поймают то, что ломается между сервисами: несовместимый контракт, потерянное сообщение, гонку в eventual consistency. Как выстроить уровни для распределённой системы — юнит → интеграция (Testcontainers) → контрактные тесты (вместо хрупких e2e) → немного e2e, где тест-дубли ставить на границах, и как тестировать асинхронность и eventual так, чтобы тесты не были флаки. Стратегия, а не набор фреймворков

Тестирование в разных языках: пирамида, Testcontainers, property-based

Тестирование в разных языках: пирамида, Testcontainers, property-based

Одна дисциплина — пирамида тестов, дублёры, property-based и реальные зависимости через Testcontainers — в Go, Java и Python на одном домене. Что идиоматично, чем различаются экосистемы и почему на настройках по умолчанию property-тест находит реальный дефект ненадёжно во всех трёх сразу

Защита от перегрузки: карта

Защита от перегрузки: карта

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

Эволюция схемы: что ломается молча в Avro, Protobuf и JSON Schema

Эволюция схемы: что ломается молча в Avro, Protobuf и JSON Schema

Девять изменений схемы через Avro, Protobuf и JSON Schema в двух направлениях, и три исхода вместо двух: прочиталось, отказ и — самый дорогой — прочиталось неверно. Одно изменение дало три разных операционных ответа: два декодера и реестр схем

Зачем бинарный формат и что он стоит: JSON, Avro и Protobuf на весах

Зачем бинарный формат и что он стоит: JSON, Avro и Protobuf на весах

Сколько на самом деле стоит бинарный формат: вес записи, вес схемы и что остаётся от разницы под сжатием. Плюс проверка того, что нужно иметь на руках, чтобы данные вообще прочитались — и почему у контрольного плеча этот вес равен нулю