A few weeks ago I attended the 23rd annual software engineering education and training conference in Pittsburgh. One of the keynotes was given by Alistair Cockburn, one of the authors of the Agile Manifesto. His lecture was titled “Teaching the next generation software engineering”, and the slides he used can be found here: http://alistair.cockburn.us/Teaching+the+next+generation+software+engineering.pps. In his lecture, Mr. Cockburn explained that people can learn skills in three stages, following a Japanese martial arts concept: Shu – Learn one technique, Ha – collect techniques, and Ri – Invent / Blend techniques. Mary Shaw, who always has good questions that are hard to answer, was in the audience and seemed very interested in the subject. This time her hard question was: “How do you teach students how to choose between different techniques?”
I often say that the best software engineer is the one who knows many different tools, techniques, methods, and has the skills and judgment to choose among them. Now… the question is: how do you do that? This is like going to a restaurant. On a plane, the dinner decision “chicken or pasta” only takes a few seconds. In some Argentine restaurants the menus are up to 10 pages long, and it takes forever to make up your mind. Of course there are several standard decision making techniques that we can use as software engineers. But I’ve never seen that as a focus of our education or the skills that we need in our job. Maybe it’s time to review that. Also, we might need specialized decision making techniques. For example, the SEI has done a nice job by linking quality attributes to architectural decisions. We need more of that for other key decisions we have to make when we develop software, both for managerial and technical issues.