Talking with Bill Gates – Code Simplicity
Front 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?
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.