I remember back in the Mid 90ties I integrated University for a Major of Computer science Degree. I was coming from a Mathematics background having spent about two or three long years studying Maths; and in which solving hard and complex math problems was my sole activity. I was told that mathematicians were the first to write computer programs and were the best ones to do that. So I came with a certain confidence and serenity that i’ll be doing well as a Software Engineer Student. Needless to say that the first three or four months were so frustrating for me. Almost all the computer programs i wrote in Lab assignments were broken. My confidence began to shake!
I remember at a certain time during this semester, I felt a deep need to Talk to my adviser. I told him:
Sir, before i came here i was told that software writing is merely doing mathematics. why is it ,then, I’m capable solving hard math problems but yet incapable writing a correct computer program ?
My advisor smiled and told me :
Well, try to think about a computer program as a Dynamic Math problem. A Math problem in which all variables and data are constantly moving and changing. Before, you were doing Static Math. Now it’s time for you to start doing Dynamic Math!
I admit this advice helped me start thinking differently about computer programming. However, It didn’t gave me the full answer. I was feeling that the Software Engineering discipline couldn’t be easily categorized as being Science or Engineering or Art or any other known field. It turns out I was not the only one facing this dilemma. Recently I read an article by Bruce Eckel in which he claims that Writing Software is Like … Writing.
While i do agree with most of what Bruce said in his article; Yet i still tend to believe that software is more than writing. In my view, it’s a complex mixture of disciplines involving at the same time pure science , Engineering, Art , Writing and probably many other disciplines. A good software developer -for me- should be Many Men in one Man. He must be able to switch his mind pattern of thinking between different modes (To say disciplines). There are circumstances where the programmer should act as a pure scientist. In other situations he should behave as an Engineer; and In other times he has to think and feel like an Artist.
I Read an article in ACM Magazine (CACM , issue March 2009) by Peter J.Denning and Richard D.Riehle ; in which they are -too- complaining that
software Engineering Is Not Engineering !
They Note that :
software Engineering may suffer from our habit of paying too little attention to how other Engineers do Engineering.
In their article they propose :
we need to encourage system thinking that embraces hardware and user environment as well as software.
It seems that each discipline veterans are trying to adapt software writing to make it fit their own field. For me, I would love to see software continue being an obscure and undefined profession. It’s this obscurity that makes the beauty of this field. It is this nature of such a Multi-discipline , Multi-skill, Multi-facets activity that makes software an exciting , rich and continuously evolving discipline.