Материал для канала Мы ж программист
Когда разработчики проходят собеседование, их часто спрашивают о принципах, применяемых в разработке. Эти принципы не зависят от языка и могут применяться даже в быту.
▪️KISS (Keep It Simple, Stupid = Не усложняй, придурок)
Принцип означает, что системы будут работать стабильнее, если их делать как можно проще. Приписывают его авиаконструктору ВМФ США Кларенсу Джонсону, который еще в 1960-х требовал от инженеров разрабатывать системы так, чтобы их можно было починить в поле буквально подручными средствами.
При этом существует закон Теслера (закон сохранения сложности): у системы существует определённая сложность, уменьшить которую нельзя. Речь о сложности, обусловленной сложностью решаемой задачи.
И обратите внимание на закон Голла: любая работающая сложная система неизменно оказывается производной простой работающей системы.
Короче, как ни крути, Москва не сразу строилась. Всегда начинайте с простого и потом итеративно накручивайте.
▪️Бритва Оккама (Не следует множить сущее без необходимости)
Принцип означает, что среди нескольких возможных решений предпочтительным будет решение, содержащее наименьшее количество концепций и предположений. С точки зрения кода: при введении новой сущности подумайте, можно ли обойтись без нее.
▪️YAGNI (You Ain’t Gonna Need It = Вам это не понадобится)
Принцип означает, что нужно делать только то, что требуется прямо сейчас, и не делать “на будущее”, “на всякий случай”. Так вы уменьшите кодовую базу и сэкономите силы.
▪️APO (Avoid Premature Optimization = Избегайте преждевременной оптимизации)
Связанный с предыдущим принцип описан Дональдом Кнутом в его работе по структурному программированию: Преждевременная оптимизация – корень всех зол. Не нужно заранее оптимизировать то, что, возможно, и не потребует оптимизации.
▪️DRY (Don’t Repeat Yourself = Не повторяйся)
Принцип означает, что каждая часть знаний должна иметь единое, однозначное и авторитетное представление в системе. Обычно это применяют к коду: в системе не должно быть дублирования методов, делающих одно и то же, это пустая трата ресурсов, т.к. придётся поддерживать все дубли. Но это также применимо и к данным – в системе должен быть один источник истины (single source of truth — SSOT) для любой порции данных.
▪️BDUF (Big Design Up Front = Глобальное проектирование прежде всего)
Прежде, чем начать непосредственно разработку, необходимо провести этап проектирования, это может избавить от негативных последствий, связанных с просчётами и непроработанными деталями.
▪️Закон Парето (правило 80/20)
Это правило говорит о том, что 20% усилий дают 80% результата. Например, 20% работы создают 80% прибыли, за 20% времени можно написать 80% программы, 20% функций используется 80% времени и т.п. Его начал еще в 1940-х применять американский инженер Джозеф Джуран в области управления качеством.
Есть еще ряд законов и принципов, но это будет отдельный пост.