10 Golden Rules For Teaching Computer Science

It's often amazing what you find while you are looking for something else. Last week while following a bunch of links from my referral logs I can across a PDF of a presentation deck by Andrew Tanenbaum. Now Professor Tanenbaum is one of the great names in computer science education. He's an ACM Fellow, an IEEE Fellow, and winner of many awards including the 1997 ACM CSE award for Outstanding Contributions to Computer Science Education. It appears that the presentation I found was the one he gave when accepting that award. And it is brilliant.

You can find the paper here and I recommend looking at it. It may be ten years old but it is not really dated in any way that matters. In fact it is that he sticks to principles not fact and follows the rules in his talk that it stands up so well. What are his ten golden rules?

  • Think long term
  • Emphasize principles, not facts
  • Expect paradigm shifts
  • Explain how things work inside
  • Show students how to master complexity
  • Computer science is not science (He is of the school that says it is engineering I talked about that debate here)
  • Think in terms of systems
  • Keep theory under control
  • Ignore hype
  • Don't forget the past

Look at the presentation where he elaborates on these points for added value of course. These "rules" work for me. I think that my teachers over the years have stuck to them pretty well. When I look back at my own teaching I think I was aware of most of these and tried to practice them. My undergraduate degree is in Systems so that was always part of my thinking. I'm not sure I always did a good job of teaching how to master complexity though. That is an area I think many of us need to work at.

I think this is a great list. What do you think? Anything missing? Anything that should be gone? Anything you don't agree with the way it is worded?

[Update: Check out this blog post with a great review of the list. ]