Simplicity is Wonderful, But Not a Requirement

Whenever I write about the overwhelming behind-the-scenes complexity of modern systems, and the developer frustration that comes with it, I get mail from computer science students asking "Am I studying the right field? Should I switch to something else?"

It seems somewhere between daunting and impossible to build anything with modern technology if it's that much of a mess. But despite endless claims by knowledgeable insiders as to the extraordinary difficulty and deeply flawed nature of software development, there's no end of impressive achievements that are at odds with that pessimism.

How could anyone manage to build an operating system out of over ten million lines of error prone C and C++? Yet I can cite three easy examples: Windows, OS X, and Linux.

How could anyone craft an extravagant 3D video game with pointers and manual memory management woven throughout a program that has triple the number of lines as the one in the space shuttle's main computer? Yet dozens of such games are shipped each year.

How could anyone write an executable specification of a superscalar, quad-core CPU with 730,000,000 transistors? One that includes support for oddball instructions that almost made sense in the 1970s, multiple floating point systems (stack-based and vector-based), and in addition to 32-bit and 64-bit environments also includes a full 16-bit programming model that hasn't been useful since the mid 1990s? Yet the Intel i7 powers millions of laptops and desktops.

If you wallow in the supposed failure of software engineering, then you can convince yourself that none of these examples should actually exist. While there's much to be said for smallness and simpleness, it's clearly not a requirement when it comes to changing the world. And perhaps there's comfort in knowing that if those crazy people working on their overwhelmingly massive systems are getting them to work, then life is surely much easier for basement experimenters looking to change the world in smaller ways.

(If you liked this, you might enjoy Building Beautiful Apps from Ugly Code.)