When I joined an engineering college, I chose Computer Science. All my peers whose chose the so called ‘pure engineering branches’ (mechanical, civil, electrical, electronics etc) said “Oh that’s not engineering, any person who does an NIIT course is as good”. To add to that it was right after the dot com bust and IT professionals were not supposed to have jobs. Well, to answer them, why are most of them in the software industry today ? That is not the point of this post. To be frank, I just took a wild guess by choosing computer science. I had just gotten my first PC the year before and I liked playing games and surfing the net (even though the dial ups were really slow those days). That is probably the only IT exposure that I ever had. I chose engineering because everybody else was doing it (like most engineering aspirants in India).
The degree was called (still is called) Computer Science and Engineering. We were taught computer science alright (Finite automata, Turing machines, Algorithms etc). We were also taught programming languages (C, C++ and Java). In the Engineering section, we were taught stuff about other branches of engineering and very few things about software engineering. Well, we did have a course on software engineering. It was a dry theoretical subject which was boring to say the least. It was mostly about different ‘methodologies’ like waterfall, iterative and blah blah blah. When we did our final year projects, we wrote code alright but did we engineer it well?? Nope, because nobody taught us the application of good engineering practices. Well most professors were academics, people who passed out of college twice (without any real exposure to engineering). So did I pass out of college as an engineer. On paper yes, but in reality I was just a graduate who knew the syntax of some programming languages and some principles of computer science.
Wikipedia defines an engineer as : An engineer is a professional practitioner of engineering, concerned with applying scientific knowledge, mathematics and ingenuity to develop solutions for technical problems. Ok let me see if I qualify as an engineer. I am certainly a professional (I pay Professional tax to the Government of India). Do I apply scientific knowledge. Well I do apply my knowledge of computer science, operating systems and the world wide web. I am not sure if it qualifies as ‘scientific knowledge’, but I sure do try to have scientific temper and it is enough for me as a software developer to be logical and make my decisions on facts rather than biases. Do I apply mathematics ? I have to sometimes munge performance testing stats to make decisions on the logical and physical architecture of a system (yes arithmetic is maths for me). Most importantly I think what makes an engineer an engineer is ingenuity to develop solutions that make stuff work. You can have all the degrees you want, all the scientific and mathematical fluff you want, but the bottom line is that in the end the system you built should work. Since a software developer is a person who designs and writes solutions that work and help the customer, a software developer is most certainly an engineer. I think software developers do more ‘real engineering’ than most of their peers in other fields of ‘traditional engineering’. Most other fields of traditional already have processes well defined and most people just follow them in their day jobs. Where is the innovation there ? I contrast as a software developer/ architect I can try out new stuff if I want to and if it works. So who is the real engineer ?