I feel like starting with a good ol’ rant: developers suck!.
Ok, this mays sound harsh, but for the record, that includes me. We suck because we write buggy and unmaintainable code. And whenever we overcome those issues, someone will modify the code at a later date and ultimately will render it buggy and unmaintainable! And of course, that someone may be ourselves in the first place.
So what are the causes of this Great Curse?
They are numerous, but ultimately most of them relate to complexity:
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it? (B.Kernighan)
So, in our daily IT related actions, we need to relentlessly focus on simplicity. A lot of work has already been done around design rules, coding rules, frameworks and framework usages, documentation processes. I will refer to significant progress and effort along the way, but my main intention for this blog is to focus around what is usually called multi threading or parallelism. I certainly feel that simplicity if nowhere on the horizon for parallel programming, while our typical 2011 CPU has at least 4 cores.
My first multithreaded development experience dates from the mid 90’s, when I was working on custom three tiers application dedicated to check processing. For the past 6 years, I have been more intensively active on this topic, as I have been working on electronic trading systems for an investment bank. I did
- design multi threaded architecture systems
- code part of them
- test them
- instrument them
- design a event driven multi core aware framework that has been implemented in numerous systems (IA+ Threading)
- hold training sessions and conferences around the subject
My languages of choice are C++ and .Net and I have a significant experience around the Windows kernel.
My next post will be focused on multi threaded related assumptions.