Ответ
YAGNI (You Aren't Gonna Need It) — это принцип экстремального программирования (XP), который предписывает не добавлять функциональность, пока она не станет абсолютно необходимой. Его цель — борьба с преждевременной оптимизацией и избыточным усложнением архитектуры.
Суть принципа: Не тратьте время на написание кода «на будущее», основываясь на предположениях о том, что может понадобиться. Добавляйте фичи только при появлении явного, актуального требования.
Пример нарушения и следования принципу:
// ❌ Нарушение YAGNI: "А вдруг нам понадобится несколько форматов?"
class DataExporter {
enum Format {
case json, xml, csv, protobuf // protobuf и csv пока не нужны
}
func exportData(format: Format) -> Data { ... }
}
// ✅ Следование YAGNI: Реализуем только то, что нужно сейчас.
class DataExporter {
func exportAsJSON() -> Data { ... }
// Методы для xml, csv добавятся ПОСЛЕ появления требований к ним.
}
Преимущества следования YAGNI:
- Снижение сложности: Меньше кода → проще читать, тестировать и поддерживать.
- Быстрая доставка: Команда фокусируется на реализации текущих требований, а не гипотетических.
- Гибкость: Отсутствие «забетонированных» решений позволяет легче адаптировать код к реальным, а не предполагаемым будущим изменениям.
- Избегание waste: Не тратятся ресурсы на разработку, тестирование и поддержку неиспользуемого функционала.
YAGNI не означает отказ от проектирования. Он означает отказ от реализации функциональности, не подтверждённой текущими нуждами. Архитектура должна допускать изменения, но не содержать лишних абстракций.
Ответ 18+ 🔞
Да ты посмотри, какая хуйня вылезла! Сидит программист, чешет репу, и думает: "А вот щас я тут наворочу архитектуру на три метра вглубь, чтобы потом, когда придёт Большой Заказчик и скажет 'а давайте ещё в протобуфе', — всё уже было готово!". И сидит, сука, неделю, эти интерфейсы, фабрики фабрик, ебушки-воробушки... А в итоге заказчик приходит и такой: "А можно просто в JSON'е, да в файлик?". И всё, пиздец. Полгода поддержки этой многослойной прослойки, которая нихуя не работает, но зато "расширяема", блядь.
Вот именно от этой ебалы и спасает принцип YAGNI — You Aren't Gonna Need It (Тебе это, блядь, не понадобится). Суть проще пареной репы, хоть и иностранная: не пили хуйню, которая не нужна прямо сейчас. Вообще. Никаких "а вдруг", "а вот когда", "а для будущего". Будущее, блядь, ещё хуй знает какое будет, а ты уже накодил слона, который сдохнет, не родившись.
Смотри, как это выглядит на практике. Вот чувак решил, что он пророк:
// ❌ Нарушение, блядь, YAGNI. Уже вижу, как он потирает руки: "О, я гений, я предусмотрел protobuf!"
class DataExporter {
enum Format {
case json, xml, csv, protobuf // protobuf и csv пока не нужны, епта!
}
func exportData(format: Format) -> Data { ... } // И тут начинается ад с switch/case на 100 строк
}
И что? Полгода этот protobuf висит мёртвым грузом, все его боятся трогать, тесты для него писать надо, документацию... А спроси — а где юз-кейс? А него нету! Просто чуваку показалось, что это круто. Ёперный театр!
А теперь по-человечески, по YAGNI:
// ✅ Так, бля, стоп. Что нужно прямо сейчас? JSON? Вот тебе JSON.
class DataExporter {
func exportAsJSON() -> Data { ... }
// И всё. Точка. Никакого xml, csv, protobuf.
// Приползёт заказчик с требованием — вот тогда и добавим. И сразу протестируем. И будет ясно, зачем.
}
Чувствуешь разницу? Как будто гора с плеч свалилась. Кода — минимум, ответственности — только за то, что реально используют.
И главное, не путай это с полным распиздяйством! YAGNI — это не "да похуй, будем хакать". Это про то, чтобы не делать лишнего. Архитектуру продумать надо, чтобы потом не пришлось всё переписывать с нуля, но реализовывать — только подтверждённые фичи. Как на стройке: фундамент и стены — это проектирование, а вот встраивать в стену нишу для аквариума на 500 литров, когда у хозяина даже кота нет — это уже ебать мои старые костыли.
Что выигрываешь, если не страдаешь хернёй:
- Меньше говнокода: Меньше кода — меньше, блядь, багов. Это же элементарно, Ватсон!
- Быстрее делаешь нужное: Не распыляешься на ерунду, а пашешь на конкретный результат.
- Остаёшься гибким: Не закопался в своих же "гениальных" абстракциях, которые через месяц окажутся ни хуя не нужными. Легко повернёшься, если что.
- Не тратишь силы впустую: Не пишешь, не тестируешь, не документируешь то, что никому нахуй не упало.
Короче, запомни, как "Отче наш": сначала требование, потом — код. Нет требования — нет кода. Всё остальное — от лукавого, от желания выглядеть умным или от скуки. А скуку, блядь, лечи дебагом своего же навороченного говна в три часа ночи. Один раз попробуешь — и YAGNI станет твоей любимой мантрой.