Having spent the last 25 years programming everything from IBM mainframes, Apple II, OS/2, Macintosh, Unix, and Windows systems, using assembler, C, C++, Java, JScript and C# I’ve often thought that what we are doing as programmers is absolutely crazy. Deep down I say to myself, “there has to be a better way”! Ryan Dahl expresses this sentiment perfectly on his blog.
We (programmers) are all drowning in complexity and users can tell. They get frustrated and yell at the screen every time the software does something stupid. We programmers hate having to deliver imperfect software. But perfection just seems unattainable on any sort of reasonable schedule which is frustrating and demoralizing.
Some blame management for not giving us enough time to finish the job. Some blame the tools and languages we are using. Some blame the layer upon layer of stuff we are building on top of. Some say we just haven’t invested enough in testing our software.
Either way, I claim it is a complexity problem. We as an industry have hit a complexity ceiling and we can’t seem to break through. The biggest, best, most well equipped team in the world cannot handle more than about 50,000,000 lines of code. At this point they hit a complexity limit that can only be solved by removing stuff.
Everyone I’ve talked to about this acknowledges there is a problem. But what amazes me is the lack of desire to do something about it. The usual answer I hear is “let software evolve” and “it’s too expensive to re-engineer from the ground up”. Well, we’ve let it evolve for 40 years and look at the mess we are in! Saying it’s too expensive to make a quantum leap into something better is a ridiculous argument because we don’t know what that thing is yet, so how can we possibly know it’s too expensive?
Let me make a bold statement. Evolution isn’t working. We are actually just going around in circles re-inventing the same old crap. There’s a radical, scary thought. So we chase the next new thing, jump on it, hoping it will change the world. Some get more popular than others, and in this highly connected world, the rate of new things appearing, and the rate of adoption of those new things seems to be increasing. But in the end we all come away with that sinking feeling that Ryan talks about so eloquently.
They say 50% of the solution is knowing what the problem is. Well I claim the core problem is that we are using 2 dimensional tools and languages to solve an N-dimensional problem. Languages and their accompanying tools are really great at two things, functional decomposition of a problem, and the linear execution & debugging of the resulting code. Well it’s better than nothing, but today programmers also have to worry about threading, security, compatibility, reliability, performance, load balancing, fault tolerance, testability, installation, updating, patching, and so on. I claim there are about 30 dimensions like this dissecting our code turning it into a big stinky pile of dung, and we are the dung beetles scurrying around busily trying to make the pile of crap less stinky. So next time your manager asks how you are doing you can say “I’m as busy as a dung beetle” J
It is clearly crazy that we are still programming for-loops in this day and age. Some say the solution to all this stop writing code, let the machine do it based on a Model Driven Architecture. The idea being computers will be better at solving these N-dimensional problems and coming up with bug free code that implements the desired behavior. Sounds good, but I haven’t really seen it achieved yet.
Some say the answer is intentional programming; the problem is we just haven’t been formal enough about all our intentions in code, and once we add that rigor and provide tools that know how to reduce those intensions to code then we’ll be good. The zed specification language, program proving and all that stuff fit in this camp.
Some say the answer is dynamic languages and/or aspect oriented approaches. This camp essentially says, screw it, systems should be more dynamic, let me just add my piece of crap wherever I want to add it, and get out of my way. Interesting approach for cowboys.
Some say we have enough software, we should just stop making more because we’ll probably only make things worse. We should be happy with what we’ve got. This is the old fart camp and they’re really full of it.
I say we need a quantum leap in computer science, and we need the new generation of programmers coming out of college to grab hold of this idea and run with it. Don’t be happy with the status quo. Continually push the boundaries on every front. Question deeply everything you’ve been told. Whoever discovers the quantum leap and smashes the 50m lines of code ceiling will rule the software world for the next 100 years and lead us into the Star Treckian realm of billions of lines of code working seamlessly together to create a better world.
If you are still reading you’re probably wondering what I’m smokin’ but I claim this will happen sooner than you may think, and I also have a hunch it may well be triggered by a discovery in the rapidly advancing world of biochemistry. Life systems are many orders of magnitude more complicated than any software system we have yet built, yet somehow all that complexity is boiled down to some seemingly simple DNA encodings (I say seemingly because I don’t think we really know yet how DNA actually works). But what is the true DNA of software? What are the proteins, the amino acids, the true patterns that govern entire complex software systems. The amazingly cool thing for anyone entering the world of computer science is that we simply don’t know yet. It is still the wild west.
So I’m a total optimist. While the state of the art is a big stinky pile of crap, the future will bring new and exciting breakthroughs. The opportunity for this sort of discovery is reserved to a very small group of folks who are actually looking for it, so it is truly exciting times ahead for them.