Share via


How to teach software development

Software development is teamwork. The most important techniques you learn for project success -- or get wrong otherwise -- are about working in teams. The methods that have made the biggest improvements in development success rates are not tools or technical stuff, they're about how people work together -- most notably, the agile methods. Tools are useful to support good ways of working, once you've sorted out what they are.

So it's unfortunate that most computing degrees, in most parts of the world, don't teach these teamwork aspects. If you're lucky, you get some stuff about agility, but actually running a project -- with all the practical stuff that entails -- not much.

Sheffield University in the UK is different. There, Professor Mike Holcombe has been running a course for some years in which the undergraduates get to work on real agile projects in a real company for real customers.  He uses group assessment methods, as applied in other disciplines where teamwork is a necessary part of the curriculum. His students are in great demand by industry, and “more Sheffield CS students than from any other UK University made it to the finals of the 2004 Microsoft Imagine Cup”.

Why don't we see more courses like this? A big factor is that academics haven't often worked in a commercial environment. Lecturers are chosen for the number of papers they've written, so it's difficult (though not by any means unknown) for anyone to move from an industrial into a decent academic job. This is unfortunate in an engineering discipline -- one that owes its existence to the industrial activity. Even though very many academics have close ties with industry -- well, it isn't quite like actually being on the job.

So Mike's methods haven't spread through Universities like the wildfire they should. Which is sad.

Comments

  • Anonymous
    June 21, 2005
    The comment has been removed
  • Anonymous
    June 22, 2005
    The "real projects in a real company" is nice, but unless the course has an educational objective, plan, and evaluation technique, then it's relying on the students to figure out how to learn rather than helping them learn. The key to teaching well is to figure out what you want the students to learn, how you are going to get them to understand the issues and the solutions, and how you are going to figure out if they did. Just throwing them into "the real world" is no more valid than just lecturing to them.

    A colleague and I taught an interesting software engineering course where we simulated "the real world". The key difference was that we could tweak reality in order to teach them specific lessons. Of course, each of us had over a decade of real developer experience so we could simulate pretty well.

    We were just using the same technique that airlines do when they use Flight Simulators for training rather than going up in a A380 and just hoping that an engine will fail in order to provide that (engine fail) lesson.
  • Anonymous
    August 16, 2006
    The comment has been removed
  • Anonymous
    September 23, 2007
    The comment has been removed
  • Anonymous
    November 27, 2007
    PingBack from http://feeds.maxblog.eu/item_1350137.html
  • Anonymous
    May 26, 2009
    PingBack from http://castironbakeware.info/story.php?title=alan-cameron-wills-domain-specific-languages-how-to-teach-software
  • Anonymous
    May 29, 2009
    PingBack from http://paidsurveyshub.info/story.php?title=alan-cameron-wills-domain-specific-languages-how-to-teach-software