Wednesday, January 22, 2014

What is Software Engineering?

Having become a relatively new initiate to computer programming ( about 2 years ago was when I started), I have really only started on the journey of professional software development. Before it was function this and for loop that; now it's all "what library has the stuff I need?" and "does this fit into some kind of design pattern." This doesn't even begin to touch on all the aspects of software development and as a starter, a more fundamental question must be asked: What is software engineering?


In sticking with our initial assignment, I read the Wikipedia article on software engineering to get a feel for what it's all about and to get my brain ready for what should be a fun semester (hopefully not too much crying on my part!).


To paraphrase Dave on the first day of class, Software Engineering is the design of software to change the world. (not sure if actual paraphrase or actual quote -___-)


On the one hand, this definition carries quite a bit of weight. "Change the world" is a phrase that wont soon be forgotten and, looking back on when I first started college and even now, part of me wants very much to change the world and I think that if a poll were taken, most college students and more broadly, people in general would love to contribute something that would change the world. While this thought is nice, to me it seems a bit incomplete.


The incompleteness I feel stems from the fact that we as people are inherently selfish and so when someone says, "You can change the world" (or something to that effect), we automatically assume that it's going to be only us that does the changing. In reality, society is huge and complicated and much like a watch, takes more than just one gear to function correctly. Much like the gears of a watch, the people that make up the software development team must work together. Even Bill Gates and Steve Jobs, who most lay-men would accredit computers to, worked with other people.


Wikipedia defines software engineering several ways, one of which is as follows:

"The application of systematic, disciplined, quantifiable approach to the development, operation, and
maintenance of software".

This definition, while less inspirational than Dave's definition, does seem to have a bit more of the engineering flavor to it, but is still lacking an emphasis on the importance of cooperation between individuals to achieve a common goal that would be otherwise nearly impossible if attempted alone.

To this end, my working definition of software engineering is as follows:

The cooperative application of engineering principals towards software that can change the world.

No comments:

Post a Comment