Отличное эссе про “хуже это лучше”: http://dreamsongs.com/RiseOfWorseIsBetter.html
Там рассказывается, что когда хочется сделать все правильно, то дизайнер (тут имеетcz ввиду дизайнер в общем смысле — создатель продукта, дизайнер API и так далее, например в тесте про дизайнера языков программирования) думает про правильные вещи: простоту, правильность, согласованность, полноту. (в тексте interface не означает именно графический интерфейс, а скорее интерфейс взаимодействия с API, например)
То есть хотят вот такую идеальную ситуацию:
- Simplicity — the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation.
- Correctness — the design must be correct in all observable aspects. Incorrectness is simply not allowed.
- Consistency — the design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness.
- Completeness — the design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness.
Подход “хуже это лучше” немного отличается. Он вот такой:
- Simplicity — the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.
- Correctness — the design must be correct in all observable aspects. It is slightly better to be simple than correct.
- Consistency — the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
- Completeness — the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.
Автор заявляет, что хоть этот подход и хуже, но позволяет продуктам чаще выживать и доказывает это на примерах.
The lesson to be learned from this is that it is often undesirable to go for the right thing first. It is better to get half of the right thing available so that it spreads like a virus. Once people are hooked on it, take the time to improve it to 90% of the right thing. … A wrong lesson is to take the parable literally and to conclude that C is the right vehicle for AI software. The 50% solution has to be basically right, and in this case it isn’t.
Эссе потрясающее, но с одной штукой я не согласен. Считаю, что в большинстве случаев, особенно если взаимодействие с конечным пользователем, надо делать интерфейсы проще за счет усложнения невидимой имплементации. То есть “работают машины — отдыхает человек”.