Wednesday, January 22, 2014

Reaction to Wikipedia Software Engineering article.

Reading the Wikipedia page on Software Engineering, I was interested to learn that there are certifications for software engineers in the U.S., even though there is still disagreement about whether such certification is necessary. Obviously, companies like Apple and Microsoft have their own set of certifications that they oversee. I have heard about certification programs for other engineering disciplines, such as mechanical engineering, but, like software engineering, it is not a pre-requisite to getting a job (though, obviously, it probably helps). However, the article did not really state exactly how many software engineers are currently certified (through one certification program or another) in the U.S. and it is interesting that there does not seem to be any real agreement on what constitutes "software engineering." I wonder if this is because, apart from testable technical skills, software engineers must also have the ability to effectively communicate and present their work and ideas and this is much harder to quantify in an educational program.

As I mentioned, the article seems to indicate that there is a conflict between these two disciplines (software engineering and computer science) when it comes to defining what "software engineer" means. For instance, in Canada, the Professional Engineers Ontario groups refuses to certify anyone with a computer science degree. This brings up an interesting problem, particularly in the U.S. where, if you do a search of schools that offer Software Engineering degrees versus those that offer Computer Science degrees, you will get about 20 or 30 schools for the first search and close to 80 or 90 schools for the second search. Chances are, more people are getting computer science degrees than software engineering degrees. Thus, I think it is important that computer science programs put students in situations where they have to use communication skills in a team setting (such as this class).

Obviously, as mentioned in class today and in the article, software engineers are expected to have more than just programming skills--they need (in the words of Office Space) "people skills." As a self-proclaimed nerd/geek, this can be hard when you are used to dealing with a computer more than people, especially in high-stakes situations where the tension and stress can make things even more difficult. From a personal standpoint, I feel that helping computer scientists learn communication skills--both oral and written--is extremely important and can help make them more than just "code monkeys." However, we must also be able to communicate technical information to people who may have very little technical expertise; this is, in my experience, one of the hardest things to do.

The Wikipedia article on software engineers also mentions that even the use of the term "software engineer" is still contested as some countries, such as Canada, where people believe that the field is too young and is changing too rapidly to be given a title that includes "engineer." Some people believe that there should be no software engineering certifications (because software engineers are not truly, in their eyes, "engineers"). I do not completely agree with this assessment because to be more than just a programmer, you need skills that I feel are inherent in any engineering discipline--the ability to communicate effectively, the ability to be a productive member of a team, the ability to be professional and follow specifications for appropriate software engineering practices, etc. I do feel that it is important, especially for people who work on software that is high-consequence (e.g. for hospital equipment or traffic systems), that they can be certified as someone who is capable of not only programming but also of following approved design, debug, and maintenance procedures during software development.

On the other hand, there is the Agile software development movement, which challenges the belief that software engineers should be subjected to restrictions, procedures, and certifications and instead emphasizes the coding ability of the programmer and their willingness to take responsibility for their creations. I find this to be an interesting compromise between the more traditional view of a "software engineer" and a "computer programmer." One the one hand, there are not as many rules, regulations, and procedures, which can bog down a process to the point that it becomes useless and meaningless. On the other hand, it introduces responsibility and flexibility, allowing the programmer to make decisions and answer for them, which I feel is very important in any field. Personally, I find the Agile philosophy to be appealing because of this approach. Too often, trying to quantify skills for certifications, especially when it comes to software (where even quantifying materials, man hours, and product results can be difficult), is something that nobody can agree on and just leads to regulations and restrictions that vary so widely that it is impossible to compare them.

No comments:

Post a Comment