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.


  1. Are there any studies which looked at hours of programming needed? I'm thinking here of the 10,000 hour model of expertise. I have this feeling students write less code (but do more cool stuff due to prevalence of APIs).

    1. Excellent points. In my opinion some programmers likely need less than 10000 hours to become expert, and many others never get there at all! It is absolutely clear to me that some whz programmers can become consummate experts in well fewer than the 3-5 years of steady work needed to accumulate those 10K hours.

      As for the use of APIs having and effect: As you suggest, this doesn't reduce the amount of programming somebody can do, it just increases the potential of what you can produce with a given amount of programming because the use of APIs means you are operating at a higher abstraction level. This is, in part what I am also trying to achieve with my Umple technology.

      For other readers, the concept of 10000 hours to become an expert can be read about in the following:

  2. Engineering has been one of the most exciting fields to enter for several decades now. Perhaps more than any other industry, field or time in history, during this time in computer hardware engineering there has been more advancement and evolution than ever before or anywhere else. Visit the site for more details.