Thursday, May 31, 2012

What's Important in Software Engineering Education articles still having an impact

Over a decade ago I conducted research in which I determined that certain areas of software engineering education are under-taught and over-taught, based on their relevance to the careers of software professionals.

The three articles published from this research continue to be cited and discussed. Just recently Robert Glass and Johann Rost summarized some of my findings in their Dark Side of Software Engineering blog. They invited me to add some of my thoughts, which became part of their blog post. I invite you to read their blog entry by clicking here.

In my original papers, I found:

The three papers from my original research are below; please cite them:

Note that the raw survey data is still available online, and has had over 10,600 hits, suggesting the data is being used quite a bit.

I am planning on repeating the study and comparing the new data with the original. I will add a few topics that have become important in recent years such as web development, mobile development, agile methods, and game development. I will also examine recent curricula for additional items.

If you are interested in helping either as a participant or to help distribute the survey in your company, please email me with the subject line Education Relevance. In the original survey it was extremely useful to receive the assistance of senior managers and HR personnel from several companies. I was able to give those companies sub-analyses relevant to their employees.

In my comments in Glass and Rost's blog, I added a few additional points worth reiterating (these are my opinions, not based on any survey):
  • Central to becoming a productive software developer, in my opinion is practice, practice, practice, but structured so the practice is spread out over diverse technologies, problem types and application domains.
  • There are different sub-contexts for education. If you want to be a quality-assurance expert, you would want to focus on material that would be of much less interest to the 'average' developer; and clearly many of the less-important topics such as calculus will be critical to certain application domains. The survey results should not be interpreted as meaning that all software engineering or computer science educational programs should give uniform emphasis to the same set of topics.
  • The notion of agility is becoming not only important in the work force, but also in education: Educational programs need to become more agile at responding to the needs of students (actually I think the reverse is happening in some contexts where fear of losing accreditation drives decisions). But, even more importantly, having students work on agile projects can, I think, help them learn the most important material they will need. I have found UCOSP student projects very successful in this regard.

Tuesday, May 29, 2012

All sugar is just as bad, even organic cane sugar

I was watching this video in which a nutritionist points out correctly many important facts about sugar:
  • In the rush to remove fat from foods manufacturers are adding sugar. She rightly says sugar is toxic and addictive. From the evidence I have seen (she doesn't say so explicitly) it is worse than the fat.
  • Artificial sweeteners have been found to make us crave even more sweet things
  • There are many hidden sources of sugar.
Excellent video I thought. Until near the end.

Just before the end she suggests using organic cane sugar as a substitute. What! In that one statement she totally destroyed her credibility. The added nutrients and reduction in undesirable elements in the organic cane sugar are negligible. In terms of effect at increasing obesity and hear disease, the organic cane sugar is chemically pure sucrose, and will be just as fattening and addictive.

Wednesday, May 16, 2012

Software engineer is top career, yet again

Here's yet another article ranking "software engineer" as the top ranking career choice:

The following InformationWeek article comments on this and gives a few reasons why software engineering is so great.

They talk about flexitime, problem-solving excitement, team-orientation, creativity, and freedom to fail. The latter is interesting and I am not sure I fully agree with it: Yes, a software engineer will often try alternatives and discover some don't work, but I think 'freedom to fail' is not the way to describe this. Ideally any organization employing software engineers will want people who can spend very little time on 'failing paths'. Instead, a good software engineer will prototype and explore alternatives relatively quickly, and then actively design for a solution that is highly unlikely to fail, or 'refactor' when they see failures looming. A key aspect of engineering is designing robust systems that do not fail.

Another thing I question in the Information Week article is the way the author contrasts software engineering and programming. "Unlike programmers, software engineers typically work in teams ", they say. Firstly, I have long been convinced that there is little meaningful distinction in the workforce in most companies, it is really only a matter of education, skills and attitude that makes you capable of being a software engineer. In reality essentially all programming should be done by people with some software engineering background. Secondly, most people who one might call 'mere' programmers (lacking software engineering core skills) still have to determine requirements, do design and end up managing projects. They just can't do these things as well as someone who is trained. Finally, contrary to the article: Software engineers and programmers are all equally likely to work in teams (or not) in todays world.

Here's my take on why it is truly great to be a software engineer:

  • The sheer number of diverse jobs with good pay
  • The opportunity to be creative
  • The sense of satisfaction from getting something complex to work and be happily used by others
  • The feeling of gratitude from thankful clients
  • The rush from solving complex problems.
  • The chance to interact with people and technology from all aspects of society. You like health care, music or games? Go find a software engineering job designing systems in these domains.
  • The human interaction with clients and colleagues and the resulting team spirit
  • The respect from being part of the professions of engineering and computing. Note that I am careful to indicate that there are two intersecting professions you are part of.
  • The flexibility of the work environment. Opportunities to work at home, or have flexible hours are common.
  • The ability to be always learning. Technology and application fields change. Learning is fun.
  • The opportunities to lead and manage for those who want