Tuesday, October 2, 2012

The Holy Grail of Programming

Bugs, bugs everywhere!

Even Buzz know that bugs are everywhereIn August, 2012 the financial services firm Knight Capital Group Inc. released a new version of their trading platform software. A 'technology issue' (a software error, aka bug) created a bizarre stream of trading events  that lead to a loss of some $400M.

In May, 2010 the Dow Jones Index fell by 9 percent in just 5 minutes. A software error caused a new stock market crash without human control. For our luck the stock market regained the loss in the next fifteen minutes.

These examples show that our field of study - computer programming - is unable to systematically create software that won't collapse.


Why are we so stupid?

People who want to study programming at a university will be told that the field of programming is called computer science in academic terms. This may create the illusion that one can learn part of science and apply the scientific method when creating software. This is false. In the real world there is no scientifically (or mathematically) proven methodology that is able to create software. Not yet. We are not stupid to create one but we are not experienced enough in this field.

Let's compare ourselves with architects or civil engineers. Their fields are a few thousand years old, they built good  buildings that stood for several thousand years and bad buildings that collapsed and learnt how to design and build structures that don't collapse.

Our field is only a little bit older than half of a century yet everybody depends on software now. Software transforms the world, algorithms shape our life and the thing that you are able to read this blog post shows that our world's most used building material are numbers: ones and zeroes.

That's sad because we don't really know how to build software that will not collapse. There are some methodologies and tools but we are constantly searching the Holy Grail of Programming (HGoP): systematically create software that will not collapse. We tried hard to do that and invented Waterfall, RUP, Kanban, Scrum, XP, Pair programming, UML, CMMI, static code analysis, memory analysis tools, code conventions and a bunch of other useful yet useless tools and failed.

No one is really able to systematically create bug-free software on the planet today. If you tried and succeeded - kudos for that. There is absolutely no guarantee that you will succeed next time. NASA programmers are pretty close but at the same time really far.


How to get there?

How can we get the HGoP? I don't know. I do not have any idea. Really. It's possible that we are unable to get there. What I do know is that we need to achieve a better understanding of our field and encourage every developer out there to actively think about  the problem. Our job is not just typing code, fixing bugs, designing classes or writing documentation. Every developer in the world is responsible for moving our profession forward.

In the next blog post I'll tell you what I think about the basics of our field. 


No comments:

Post a Comment