Too Much Stupid Software

by clovett 2. October 2011 03:41

Listen to pod cast

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 beetleJ

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.

Too Much Stupid Software.mp3 (5.14 mb)

Tags: ,

Comments

8/20/2011 10:22:41 PM #

p6gxc

The problem is huge monolithic programs that approach 50 million lines of code. THAT is the problem, and thinking that we we need more (billions) to move forward is just plain insane.

I assume you must be talking about lines of code for a single application, because you can't be referring to multiple compiled binaries -- MS Windows with MS Office installed clearly surpasses 50 million lines (before compilation). Yet, those applications and many others can exist and operate on the same system reasonably well.

Software complexity can only be tackled by abandoning this cathedral style development that Microsoft preaches. Systems needs be broken down into independent subsystems, with clearly defined interfaces, purposes and strict communication barriers. You made a human analogy, that's pretty good actually. The human body works as the result of many independent interacting sub-systems.

I would really recommend reading the book "The Art of Unix Programming", and keep an open mind while you do. There is much wisdom in the Unix philosophy which is part of the reason that the OS is so strong today (and responsible for the growth and development of the internet -- one of the biggest and most complex software systems ever).

p6gxc United States

8/31/2011 7:08:40 AM #

clovett

Yes, Windows + Office + Visual Studio is about 150 million lines of code, but that together with autodesk inventor and 3DS Max is a stretch even for the most powerful machines on the planet, and compared to what customers want, these are not enough.  So componentization is not working.  And yes, there is brilliance in decoupled distributed systems that communicate via simple text based protocols (like HTTP & XML), and the Web is connecting billions of lines of code in such systems.  I worked on XML for about 10 years, so you are preaching to the choir on that front.  But this is not enough either.  Async communications protocols add a whole 'nother layer of complexity, not to mention the overhead of serialization, cross-platform, standards commpliance, etc, etc.  All our systems are too complex, and developers are drowning in that complexity, even on Unix.  If we don't fix it, innovation will come to a halt.  Sure there's still lots of fun ways to combine devices, and web services to provide novel new services to customers, like we are seeing on the phone now, but do you like waiting for apps to start?  Do you like all the bugs every system has?  Do you know how freakin hard we work to eliminate those bugs?  The 1980's technology of compentization, interfaces, strict barriers is not enough. Object orientation was a nice improvment, but it is not enough.  Dynamic languages are great, but it is not enough.  All I'm saying is "There has to be a better way".  Who is willing to take the challenge and question everything we do down to the core building blocks of computer science?  I have a hunch that someone will do it soon and we'll slap our heads and say "Doh!"  Smile

clovett United States

Add comment



(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

RecentPosts