I write this blog to share the solutions and problems I have found with fellow software engineers. I also do it to remind myself of what I've already figured out ;)

Friday, April 10, 2009

What is Software Engineering?

This question has consumed me lately. People everywhere are calling themselves software engineers or the even more popular "software architect", but what does that mean. It's easy to give a flippant response such as:

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

This comes straight from the SWEBOK, but that thing was written almost five years ago, which is of course decades in software time.

The application of engineering to software. Okay, I know what software is. Engineering? That's another nut to crack. Software engineering is nowhere near mature as civil, mechanical, or electrical engineering. We don't have the "CRC Handbook to Software Engineering". Grady Booch is starting one on Software Architecture, but that's not our topic here. Mary Shaw, from CMU, published a great article on the maturation process of engineering disciplines and where software engineering is in that process entitled, "Prospects for an engineering discipline of Software".

I think the biggest disconnect is between industry and academia. Practitioners on a daily basis don't care about this question, we just code up a solution using best practices. Professors on the other hand spend all day theorizing about new ways to do software engineering, but don't face the same pressures as practitioners to actually make their stuff work. Steve McConnell, in his legendary book "Code Complete", was able to bridge the gap and bring academia's ideas to practitioners. We need more like him. The Gang of Four were able to write the closest thing we have to a "CRC Handbook" with their design patterns book.

Maybe software engineering is not the best term. Software developer and architect are getting a whole lot more airtime lately. For me, "Developer" brings up connotations of a real estate developer just putting up strip malls. I'm betting that software engineering will stand the test of time and come out as the dominant term (I'm getting my MS in it after all). In the meantime, I think it is fruitful for us all to think about what that actually means, even if only for five minutes. And then get back to coding before we all get fired! :)

No comments: