Wednesday, September 03, 2008

Engineering

Engineering is the professional art of applying science to the optimum conversion of natural resources to the benefit of man.  - Ralph J. Smith


"Scientists build to learn. Engineers learn to build."


Applies to software engineers as well? Not sure. May be to some. But, certainly not to the majority of people who would like to call themselves as 'software engineers'. Software engineers creating resumeware (i.e. software written using latest fads just so that your resume looks good) 'learn to learn'. That's about it. XP has a term called 'technical debt'. Resumeware is probably the worst form of technical debt. Resumeware is over engineered solution. It's like using sledge hammer when a small wooden or rubber hammer would do the work.


Steve McConnell, popular author, writes passionately about the profession of software engineering and why it has not matured like other engineering disciplines. If you get a chance, read his book 'gold rush'. Fantastic read. He has touched upon this subject in other books as well. Software engineering has been aptly described like this - ' if we were to build buildings as we build software, first woodpecker that made rounds would have resulted in the building collapsing to the ground.' Not always. There is always good software written but a lot is fragile enough for one wood pecker of a change to push it down to ground.


Steve McConnell makes a compelling case in his books that people are taught computer science in schools and then pushed to become software engineers. Go back and see what scientists and engineers do differently. Computer science programs are extremely light on rigor and discipline that it takes to develop commercial software. Some people learn engineering aspect of software engineering in good companies under the mentoring of some veterans and some may go entire career without having that opportunity. Universities should have computer science programs but also should have a separate software engineering program where after learning basics of computer science, students are trained in software engineering so that when they join industry, they can start writing some commercial strength software. People who want to be computer scientists can take theoretical courses and can go to graduate school  and get advance degrees to become computer scientists. Software engineers, good ones, are a different breed altogether.


It is good that a lot of schools (at least in the US) have started offering graduate degrees in software engineering. Of course, many times, courses offered are still tilted heavily towards science than engineering but it is a good start


Of course, if you are smart, you can learn anything, anywhere, anytime. Question is at what expense and at whose expense.


More on Steve McConnell's books later.


Cheers!



Powered by Qumana


No comments: