They say that those who can – do, and those who can't – teach. This makes me sad for two reasons. Firstly, the general standard of teaching these days is abysmal. From pre-school all the way to university, it just doesn't seem like the people who teach are the best and brightest any more. Sure there are still occasionally some brilliant people doing the job, but overall the profession is not in a good place, or is this just an illusion? It's actually worse than that, especially at higher levels where people go into academia to do research (or whatever) and treat teaching as an annoying distraction they have to deal with, so that they can get back to their pet projects. And this I think is the real problem – at least at the higher education level. It's not that the people who teach are not smart enough; it's just that they approach the act of teaching in a half-arsed fashion. They have skills/knowledge of their subject matter, but have no teaching skills and don't really want to develop any. Of course, the students can only judge their teachers by how well they teach and so we end up with the current sad state of affairs (where just about everyone can relate to sayings like the one above) and this is the second reason why I am sad.
I've been reading Polya's "How To Solve It" and it got me thinking about what it takes to be a good teacher (and a good student, but I will leave that for another post). I've talked about mentoring and software apprenticeships before, but that was more of an on-the-job deal. What I'd like to do is focus purely on the skills you need to be a great teacher in the true sense of the word.
By the way If you haven't read "How To Solve It", I highly recommend you pick up a copy, not only will it help your math skills (infact it takes the number 2 spot on my list – which I am yet to finish writing :) – of books a programmer needs to revive his math skills), it will jazz up your general problem solving abilities and as developers, we can never have too much of that.
Being A Great Teacher
Many people are of the opinion that as long as you know the subject matter, you can teach it. Nothing could be further from the truth. Having programming knowledge doesn't make you a good developer and this goes double for teaching. I see a good teacher as an extremely well-rounded individual, knowledgeable, passionate, a showman with excellent interpersonal and communication skills. Consider that the job is to impart knowledge and teach the student how to solve problems. Not solve the problem FOR the student, but equip them with the ability to solve the problems themselves. This often requires extreme patience and the ability to put yourself in the student's shoes (i.e. empathy) no matter how many times you have been over the same material. Just think about how you would explain a subject that you know really well, to a person who knows nothing about it (like explaining software to a business person, for example). There is a reason why every company wants developers who can talk business language, because most people find it really hard to explain their professional domain in layman's terms. For a teacher, this is a core part of their job. So, good people skills to be able to understand the student and good communication skills to convey the material, but why showmanship?
A teacher is basically a public speaker, it is just that they mostly speak in the same place and usually do it far more often than your regular speaker. It doesn't matter who your audience is, whenever you speak in front of people it is your job to keep them entertained and take them on a journey. They should be excited about what you have to say, a good speaker can do this with the most boring of subjects. But a teacher's job is even harder than that because you want to keep the students interested enough so that they are eager to come back week after week. You think this is a bit overkill just to read a few lectures? Well, we are talking about being a good teacher not a mediocre one, there are plenty of those around, I should know I've slept through most of their lectures and that's when I was actually there in the first place, instead of at the pub :).
What about passion and knowledge? I do believe the knowledge part is obvious, hard to teach something well if you have no clue, but passion is also paramount. You can never really convey to a student how important or interesting a subject is, when you clearly would rather be doing something else yourself. I think we've all had the experience of listening to a boring lecturer droning on and on, monotonously. Did it energise you into further study? Quite the opposite probably, it made you want to do something else, just so you don't accidentally turn out like that guy. Contrast that with a guy who seemed really into what he was saying, he may even have been saying it badly and you didn't really get it, but at least it sounded like it SHOULD be interesting, maybe even worth looking into further.
So, we have knowledge, professional skill, passion, communication skills etc. In short all the same skills that a good developer needs to succeed. What this tells me is that a good teacher CAN do, but they CHOOSE to teach. I really don't understand managers who don't try and build their management skills. I also don't understand programmers who don't try to build their programming skills and in similar vein, I don't understand teachers who don't try to build their teaching skills. You aren't born with elite teaching ability, just like every skill you need to practice and develop. Repeatedly doing something badly, just to get it over with, is not practice.
I guess my point is this. If you're ever in a situation where you have to teach others what you know, approach it like you would approach learning any new skill (like a new programming language). Get the basics down, practice, draw on your existing skills and knowledge, practice some more, prepare, research and follow that with more practice. Don't give your students a reason to think that you couldn't cut it in the "real world".