Jon Aquino's Mental Garden

Engineering beautiful software jon aquino labs | personal blog

Saturday, September 29, 2007

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."


  • Wow, you have officially blown my mind.

    By Anonymous Anonymous, at 9/29/2007 10:51 p.m.  

  • Good!

    By Blogger 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 Blogger Thomas David Baker, at 9/30/2007 2:02 p.m.  

  • Ah yes - that's exactly the same sort of thing.

    By Blogger 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 Anonymous, at 10/04/2007 1:03 p.m.  

  • Ha!

    By Blogger Jonathan, at 10/05/2007 8:26 p.m.  

  • Writing well is like designing good software well

    By Blogger 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 Blogger 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 Anonymous, at 3/17/2008 2:35 p.m.  

  • Agreed - simplicity solves a lot of problems. It's hard to do - requires thinking.

    By Blogger Jonathan, at 3/17/2008 6:30 p.m.  

  • "Controlling compexity is the essence of computer programming." -Kernighan


    By Blogger 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 Blogger 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 Blogger 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 Blogger Jonathan, at 9/03/2008 10:18 p.m.  

Post a Comment

<< Home