I had an interesting conversation yesterday about teaching and learning. Specifically about how Amazon teaches newcomers to their internal build systems. This also dovetails nicely with my overall ideas about how programmers think they are generally better and smarter than everyone else — this is, of course, a blatant fallacy.

As it turns out the Amazon way of teaching their development stack is a complete disaster. The writers of both the one-day course and the available internal online documentation assume that the reader knows as much as the writer does.

This is stupid.

If the person trying to learn knew as much as the author, they simply would not be trying to learn it because they already knew it!

But the problem is that programmers think they are abnormally smart. If they are good at programming, it stands to reason they are good at everything else as well, right?

Nope.

As it turns out there is a specific skill to teaching and being a teacher. While I’ve not had formal training on teaching, I’ve taught classes in a professional setting. I think that most programmers seem to lack the empathy it takes to teach… which leads us to the problem my friend was facing: you are tasked with doing a job that comes with no instruction manual, and in her case, a computer that isn’t even suitable for the task at hand.

Way to set someone up for success, huh?

Why do I think I have the knack for teaching? I really don’t know. But I do know that I get joy from teaching people and seeing the light go on above their head when the ideas click into place. I guess it’s something that I’ve cultivated in myself for a long time and it’s something that I enjoy doing; it’s not a chore that I do because I need to. I think it’s just something that comes with practice.

But to put people in charge of teaching who aren’t excited by the prospect does nothing but annoy the people who are trying to teach as well as set up the students for failure.