I’ve been thinking about what I’d like to do when I leave U of T, and I think I can use what I enjoy most about my present job—mentoring students—to make some company more attractive to talented Canadian Computer Science grads, while at the same time improving CS education in this country. Here’s my pitch.
Most schools have a third or fourth year “Intro to Software Engineering” course where students work in teams on an extended project that’s meant to teach them real-world development skills. In my experience, these courses aren’t particularly effective because:
- the content is usually the traditional (ritual-intensive) stuff found in textbooks, which bears only a passing resemblance to the way good teams actually get things done,
- many of the important aspects of modern software development, such as working in distributed teams, are absent completely, and
- the faculty teaching them usually don’t have much real-world experience themselves.
I propose talking half a dozen schools across Canada into running their courses in tandem, so that each team has members from three or four schools. I’m well positioned to do this: I’ve been running project courses at U of T since 2002, and I’m prototyping the “tandem” idea this term with students from Waterloo, Lakehead, Alberta, and Havana on my team.
I think a lot of SE profs will like this idea, particularly if someone else (me) is doing the organizing. I also think it’ll give students a much better education: if we go from Newfoundland to Vancouver Island, and include schools in Quebec and New Brunswick, students will be exposed to time zone and language issues (and also have a chance to make links with peers across the country, something that they currently have no way to do).
As part of this, I would offer training courses for profs and grad students on how to teach team-based software engineering courses. I think there’s a lot of demand for this, and my experience in industry, open source, and university education gives me at least a fighting chance of pulling it off.
Finally, I would start writing and blogging about what’s new and exciting in computer science, as opposed to the computer industry. Magazines like New Scientist, Discover, and American Scientist cover everything from math and physics to biology and medicine, but not computer science. Similarly, there are dozens or hundreds of good blogs about developments in evolutionary biology, cosmology, and neuropsychology, but nothing accessible to the educated layperson about computer science. I think a weekly screed about AI, computer graphics, algorithm theory, software engineering, and computer systems would have a lot of readers; I’d certainly like a chance to find out.
The trick, of course, is finding someone to pay for this. The last two and a half years have taught me just how slowly regular channels move, so I would instead look for corporate sponsorship. The main thing the sponsoring company would get out of this is a high-value recruiting channel. Want to know who’s worth interviewing? Look at the students who do well in this course, or ask the profs who are taking part in it who their stars are. The sponsor would also increase its mindshare: students think Microsoft and Google are destination employers because they’ve used those companies’ software. If their core SE course is organized by a Canadian company, and they’re using tools provided by it, they’re more likely to think of it as a good place to work. Similarly, if that company is providing real value to software engineering faculty, those faculty are more likely to steer students toward the company.
More broadly, I think this could help create stronger software development culture right across Canada. Students at Toronto don’t know what students at Queen’s or Waterloo learn, much less what’s going on at Dalhousie or UBC, and vice versa. The same is unfortunately true at the faculty level as well: there simply aren’t very many venues for cross-Canada discussion about CS education. The real long-term value of something like this would be to strengthen ties between programs from coast to coast, which would benefit everyone.