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 top topics needed in the workplace are specific programming languages, data structures, software design, software architecture, requirements gathering and analysis, and human-computer interaction.
- Most of those same topics are also those for which employees need additional training, and which are under-taught relative to their importance.
- The most over-taught topics relative to their importance are differential equations, calculus and chemistry. These are also among the topics most forgotten.
The three papers from my original research are below; please cite them:
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):
- What Knowledge Is Important to a Software Professional? (IEEE Computer, vol. 33, no. 5, pp. 44-50, 2000). 100 citations according to Microsoft Academic Search. Interestingly, the first submission of this article (to IEEE Software) was rejected, as being uninteresting to the IEEE software readership. That's good, because IEEE computer has a much larger readership.
- Priorities for the education and training of software engineers, Journal of Systems and Software - JSS , vol. 53, no. 1, pp. 53-71, 2000 - A more in-depth article about this. (24 citations)
- A survey of the relevance of computer science and software engineering education, Conference on Software Engineering Education and Training - CSEE&T , 1998 - The original article with preliminary data. (35 citations)
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.
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).
ReplyDeleteExcellent 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.
DeleteAs 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:
http://www.psy.fsu.edu/faculty/ericsson/ericsson.exp.perf.html
and
http://blogs.scientificamerican.com/guest-blog/2011/06/06/too-hard-for-science-seeing-if-10000-hours-make-you-an-expert/