Talking with Bill Gates – Code Simplicity

02.21.08 | Category: Simplicity

Bill Gates President Hennessy at StanfordNBC's Scott Budman, Drue and Jack Hubbard, StanfordFront row, beneath the podium in the press box, I had a great vantage point to observe Bill Gates speak at Stanford’s Memorial Auditorium Tuesday. The following section from his speech on code simplicity made me think:

“Now, we also need to revolutionize how we write software, where we can define things at a much higher level. That really hasn’t changed much in these last 30 years. We’re still writing declarative code that can take something like two banks whose products are 90 percent identical, and you can end up literally with a million lines of code that are different between these two banks. And yet if you describe say in English their products, you’d only find like 40 pages of difference.

And so you say, what is that explosion of complexity that is expensive, it’s fragile, it’s hard to prove it’s correct? Well, it’s a failure of abstraction. We have not changed that level of abstraction. And finally we have the computing power and some of these ideas that can create runtime environments that particularly in domains that you focus on like the business domain that so much software is written to, we can make some huge breakthroughs.”

Writing code is not Zen: it is not experiential or simple. It is complex and structured (e.g. object-oriented programming).

Also while some code is Zen-efficient (see how Steve Wozniak talks about how he wrote the OS for the Apple II in the most efficient, minimalist and robust way, due to his hardware engineer training), most of it is not. Right now the end result of a great program is Zen (experiential, intuitive, with clean interface). But the code in it is not, and the process that leads to its creation is not.

Is this a paradox or what?

4 Comments so far

  1. Bill C

    Very applicable and very true! As a software developer the best code to look at and work with is code that embodies Zen (simple/no clutter, austere/bare, natural/unforced).

    Software development, especially with the availability of so many open source projects and libraries, has made great strides in terms of abstracting common code. More than ever, applications these days are sharing more and more common code (common web server code, common logging mechanisms, common application frameworks, etc).

    We do have a lot of room for growth, obviously, but as we find more and more ways to abstract commonality I think that the actual development of software CAN become a Zen experience.

  2. Andrew Zamler-Carhart

    Object-oriented code allows us to minimize the complexity of our applications to some extent, but the source code for a modern program can still be quite bulky.

    Apple’s Cocoa development environment offers graphical solutions to each part of the Model-View-Controller paradigm: with Interface Builder, Bindings, and Core Data it’s possible to develop moderately complicated programs with *no* code.

    Using only standard objects, it’s the connections you make between these objects that define what makes your program special. Now that’s more of a Zen experience.

  3. Drue

    Bill, Andrew — thanks for your thoughts — I agree.

    Indeed leveraging shared objects can simplify the writing of the code. However every time you use such pre-prepared libraries, you unfortunately lose some efficiency in the code. So while the writing of the code becomes more Zen, the code itself may become more cluttered/less efficient. However, maybe this will matter less & less as computing power increases…?

    What do you think?

  4. dave mcclure

    i believe the only paradox here is the assumption of software being created by humans, as opposed to other creation systems.

    it’s very possible that other systems of creating software that might be auto-generated could be more efficient at abstraction and/or aggregation that results in great simplicity.

    but he’s correct that currently our software is a friggin’ mess ;)

Leave a Comment