Simplicity and Difficulty are Orthogonal
Simplicity is beautiful. But simplicity is orthogonal to difficulty. Easy things are often simple, and hard things are often complicated. But making a hard thing simple takes skill. It also carries a risk: because it looks simple, it may seem easy to modify or work with, when in fact it is hard, fraught with dangers. An example would be a terse equation from higher mathematics, such as
from Einstein's explanation of covariant tensors. Beautifully simple but formidable to comprehend. Or Haskell code:
defining Fibonacci numbers as an infinite lazy list. Again, elegantly simple but hard to understand for the uninitiated.
Nevertheless, this is far better than the alternative, which is complicatedness. As C.A.R. Hoare remarked, "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult."
from Einstein's explanation of covariant tensors. Beautifully simple but formidable to comprehend. Or Haskell code:
defining Fibonacci numbers as an infinite lazy list. Again, elegantly simple but hard to understand for the uninitiated.
Nevertheless, this is far better than the alternative, which is complicatedness. As C.A.R. Hoare remarked, "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult."
13 Comments:
Wow, you have officially blown my mind.
By Anonymous, at 9/29/2007 10:51 p.m.
Good!
By Jonathan, at 9/30/2007 10:30 a.m.
Hoare's comment reminds me of Blaise Pascal (paraphrasing): "I would have written you a shorter letter but I didn't have the time."
By Thomas David Baker, at 9/30/2007 2:02 p.m.
Ah yes - that's exactly the same sort of thing.
By Jonathan, at 9/30/2007 5:27 p.m.
Tom, I think that was Mark Twain. Pascal was more along the lines of "I would have written anything at all (in the margin here to prove my conjecture about the sums of powers of integers) but I don't have the time because I am too busy wagering that if God doesn't exist I can't go wrong believing in him."
Or something like that. Here's a link to a joke by/about the creator of Pascal.
By Anonymous, at 10/04/2007 1:03 p.m.
Writing well is like designing good software well
By ekbworldwide, at 10/20/2007 11:25 p.m.
Very true. A favorite book on writing well: "The Elements of Style" by Strunk and White. It's deliciously opinionated.
By Jonathan, at 10/21/2007 2:25 p.m.
Simplicity holds the key to a good software design but unfortunately very few professionals realize this. I hope you would keep the good content flowing in. TC :)
By Anonymous, at 3/17/2008 2:35 p.m.
Agreed - simplicity solves a lot of problems. It's hard to do - requires thinking.
By Jonathan, at 3/17/2008 6:30 p.m.
"Controlling compexity is the essence of computer programming." -Kernighan
Amen!
By Jonathan, at 6/07/2008 7:05 p.m.
"Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity."
- David Gelernter
By Jonathan, at 6/14/2008 11:03 a.m.
"Complex software is harder to think about, harder to test, harder to debug, and harder to maintain—and above all, harder to learn and use."
—Eric S. Raymond
By Jonathan, at 9/03/2008 10:00 p.m.
Then again:
"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."
—Richard Gabriel
By Jonathan, at 9/03/2008 10:18 p.m.
Post a Comment
<< Home