I once read something about needing to adapt teaching method and subject to the students learning stage. Coming from someone who grepgrew up with a physicist for a father, this rung a bell with me.
The basic idea is that people develop mastery of skill according to https://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisitionthe Dreyfus model the Dreyfus model. You need to understand where a person is in that model and adjust your teaching to that level.
asAs an example, if someone is still getting used to pointer manipulation, loops, pass by value vs pass by reference, etc. an abstract lesson on patterns is going to be completely lost on them.
Its not just a matter of how advanced the topic is. A simplistic view of teaching style would address the mastery levels somewhat like this:
- basic skills/rules to solve simple problems in a rote way. eg: start with simple functions and named parameters.
- when those rules start to fail, or the student sees better ways, introduce optionality. eg replace named parameters with typed data structures
- student starts to anticipate problems based on experience. introduce OO/classes with accessors/mutators and loops vs recursion, defensive programming
- mastery -> patterns