2009-12-30

The Software Development Mismatch Problem

How often do you think that you have not been well prepared in school for the real life?

To me it often happens that I find particular realms where I did not learn the really important things in several subjects. However, for my career as a software developer I feel that I had a quite good start. Later, when attending university I experienced more difference in what I was taught and what I found useful. That said, I must admit that I am a practically oriented person. I don't deal a lot with theories although I know that it can be useful sometimes.

However, I thought several times that there is a mismatch problem (see Malcolm Gladwell about the mismatch problem) in the whole software development branch.

Recently I followed two podcast episodes that confirm my doubts that in a lot of cases software development results do not fit customer needs or economical concerns. I found them on se-radio.net: "Episode 149: Difference between Software Engineering and Computer Science with Chuck Connell" and "Episode 150: Software Craftsmanship with Bob Martin".

I agree with most of the content - for instance about the fact that computer science is way different from software engineering - see also the article about Software Engineering <> Computer Science from the show notes of the podcast - or more articles about "Beautiful Software".

In my opinion (also):
  • A lot of time is wasted later, when the software architecture is bad and the code is not kept clean.
  • The developer needs to choose wisely and master his primary tools - the programming language(s) of choice and the IDE.
  • Focus must be on the code and not on the usage of some tools or too many documents.
I also find it very useful where Chuck Connell draws the separation line between Software Engineering and Computer Science (written in free words from my understanding): When people are involved in a crucial manner (compare a custom development project of a desktop or web application with developing or analyzing an encryption algorithm) then you are on the software engineering side.

What I can see from all this is as a personal conclusion:
  1. It is extremely important to think well and communicate well with the customer before creating the architecture of the software.
  2. Don't forget about the importance of creating clean readable and well documented code (code comments are more important than other documentation that is created along with your implementation as that tends to be more outdated).
  3. Experience is an important factor. A well experienced developer is worth a lot!
Related posts: About agile software development, The good, the bad and the ugly.