I disagree with the premise:<p>> "We’d all agree that to teach a subject, you must know the subject. So you’d think that experts would be the best teachers, but they’re not. The question is why?"<p>That is like saying that dogs are animals so you'd think all animals are dogs.<p>Moving past of it, I took a class on education which is probably the best class I've ever taken in my life. First they made us create a 1 sentence stating our goal for the teaching material we were going to create. Then we created the content outline and then they made us ask ourselves how the student would profit about each of them for the course objectives. We realized how many of the things we added were abstractions we learned through the years and totally unnecessary for a beginner in the subject.<p>To make the group assignment, we created a series of concrete tutorials where, through concrete examples, we tried to add a specific (or more) new material on each one while strengthening the previous learned lesson (each would build on each other).<p>I am interested mainly in group learning (though I do some one-to-one), so another important point is the speed of the learner due to previous abstraction models. While on one-on-one you can tune up/down to the person, with group learning the most you can do is to put them in knowledge groups or try to automate it (which is quite hard). For instance, unless we are talking about kids, most people know that you read top to bottom in English/most languages and left to right, so explaining that about programming is not only unnecessary but it makes your course boring. Then depending on the level you can skip variables, or variable types.