tags:

views:

41

answers:

2

At here: http://www.jwz.org/doc/worse-is-better.html

  1. So according to the worse-is-better philosophy, implementation simplicity is the most important, above all?
  2. Does implementation refer to inner logic or?
  3. What does "especially worthless is consistency of interface" mean? I thought consistency in interface is pretty important.

Thank you all for the insightful points!

+1  A: 

I think it is more or less agile style of coding - working code is preferred over beautiful code. Once you get your code working, you can make it pretty. It's easier than the other way around, going from beautiful code to working code.

In order to achieve working code fast, you have to cut corners. Which implies that implementation should be as simple as possible. And it also implies that interfaces might not be consisted if it makes code complicated. Making working code fast means sacrifices, consistency is awesome to have but not required. As are many other things.

But, there's a catch. You have to be good to get away when you're coding like this. Joel said it good.

vava
+2  A: 

One thing to bear in mind is that the author is painting the picture of the "worse is better" philosophy using quite a broad brush in order to get his point across. The thrust of the article is that something that is designed to perfection may either a) take too long to implement or b) be hard or impossible to implement with adequate performance. Instead, the article argues, it is better to sacrifice absolute perfection because small compromises will usually make the system much easier to implement.

To address your individual points:

  1. Yes. I think what the article means by this is the following: A perfect design is irrelevant if it's so complex that it will never be implemented.

  2. Implementation, in this case, simply means the code that must be written to achieve a specific design.

  3. This comment has to be taken in context: "Consistency can be sacrificed to achieve completeness if simplicity is retained." And the article argues that this applies especially to consistency of interface. In other words, it's better to have an inconsistent interface with complete functionality than a consistent interface with incomplete functionality.

Martin B
+1: On point 3: a simple, inconsistent interface is better than (a) non-working dream interface, (b) working, but complex and consistent. So strive for simpler above all. "A *foolish* consistency is the hobgoblin of small minds."
S.Lott
Nicely put. To go off on a bit of a tangent, I feel that this point can initially be a hindrance when someone with a strong mathematical background comes into programming, because this is where programming and mathematics diverge: Whereas mathematics tends to value theoretical beauty and consistency above everything else, those properties must sometimes be compromised when programming.
Martin B