On teaching programmers and mathematicians

I have been lucky to be exposed to some very good teachers with different approaches as well as collect my own experience: I am teaching C/Assembly since around 2009. I've also taught things like Lambda-calculus and functional programming, mathematics and playing piano. This post is intended as a summary of how I see an ideal education in virtually any domain. I will speak about teaching mathematics and or programming; the principles however are sufficiently abstract to be applied anywhere.

Based on how our memory and perception work, the following points seem to be generally true:

  1. We remember better when the brain connects information to an emotional event.
  2. We need to connect new knowledge to the knowledge we already have.
  3. We need to repeat new things several times over a short period of time in order to forget them on a much slower pace. See Forgetting curve (Wikipedia).
  4. Different people base on different types of perception: sound, visual, touch. That's what they remember most easily; it does not mean that even if information is not representable in audible format, it should be presented like this to those who tend towards sound perception.
  5. Some people like the top-down approach (deductive thinking), while others prefer generalize examples (inductive thinking).

Based on them, I think that the ideal way to teach should incorporate the following points:

An animation, or, even better, an interactive playground are perfect to provide an intuition about a mathematical notion. This is because we need to connect mathematics to the sensory experiences.