В знаменитом эссе Ричарда Габриэля « Лучше хуже» он противопоставляет карикатурные версии философии дизайна MIT / Stanford (Lisp) и New Jersey (C / Unix) по осям простоты, правильности, согласованности и полноты. Он приводит пример «проблемы с загрузкой ПК» ( обсуждаемой в другом месте Джошем Хаберманом ), чтобы доказать, что Unix отдает приоритет простоте реализации над простотой интерфейса.
Еще один пример, который я привел, - это разные подходы к числам. Lisp может представлять произвольно большие числа (вплоть до объема памяти), в то время как C ограничивает числа фиксированным числом битов (обычно 32-64). Я думаю, что это иллюстрирует ось правильности.
Каковы некоторые примеры последовательности и полноты? Вот все описания Габриэля (которые он признает карикатурами):
MIT / Стэнфордский подход
- Простота - дизайн должен быть простым, как по реализации, так и по интерфейсу. Для интерфейса важнее быть простым, чем реализация.
- Правильность - дизайн должен быть правильным во всех наблюдаемых аспектах. Неверность просто не допускается.
- Согласованность - дизайн не должен быть противоречивым. Конструкция может быть немного менее простой и менее полной, чтобы избежать несоответствия. Последовательность так же важна, как и правильность.
- Полнота - дизайн должен охватывать столько важных ситуаций, сколько это практически возможно. Все разумно ожидаемые случаи должны быть покрыты. Простота не позволяет чрезмерно уменьшить полноту.
Подход Нью-Джерси
- Простота - дизайн должен быть простым, как по реализации, так и по интерфейсу. Для реализации важнее быть простым, чем интерфейс. Простота является наиболее важным фактором в дизайне.
- Правильность - дизайн должен быть правильным во всех наблюдаемых аспектах. Немного лучше быть простым, чем правильным.
- Согласованность - дизайн не должен быть чрезмерно непоследовательным. В некоторых случаях согласованность может быть принесена в жертву для простоты, но лучше отбросить те части проекта, которые имеют дело с менее распространенными обстоятельствами, чем вводить либо сложность реализации, либо несогласованность.
- Полнота - дизайн должен охватывать столько важных ситуаций, сколько это практически возможно. Все разумно ожидаемые случаи должны быть покрыты. Полнота может быть принесена в жертву в пользу любого другого качества. Фактически, полнота должна быть принесена в жертву всякий раз, когда простота реализации находится под угрозой. Последовательность может быть принесена в жертву для достижения полноты, если простота сохраняется; Особенно бесполезна последовательность интерфейса.
Обратите внимание, я не спрашиваю, прав ли Габриэль (этот вопрос не подходит для StackExchange), но привожу примеры того, на что он мог ссылаться.