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 best way to teach maths should incorporate the following points:

  • We need charismatic teachers with great personalities who can inspire emotions. An average teacher in person is worse than a world class guy on tape. By no means do I mean sweet talking “popular science” guys, they are disgusting and superficial.
  • Every class should draw examples from the previous ones and force students to decide, how to apply the knowledge from the previous courses in the course they are studying (very important!)
  • A lot of practice, and all exercises should not only be written on paper, but explained by students to the teacher or his assistant to enforce better understanding, enable other types of memorisation and expose the flaws in reasoning.
  • Use a lot of illustrative material. Slides are mostly useless, but infographics and videos are VERY useful when done correctly. Check, for example, this YouTube channel:

  • Nothing is better to give a nice intuition about the meaning of a mathematical notion than a good animation.

  • Very few people can memorize a lot of abstract stuff and then deduce everything from it when asked to apply it in practice. Hence we need to provide examples. In my opinion, some nice explanation patterns are:
    • Deductive and inductive: start with definitions, show examples, explain how exactly each example follows from definition
    • Inductive and deductive: Start informal, give intuition, provide examples, then give precise formal definition, show how exactly the given examples are generalized to these definitions. Then give more examples, but derive them from formal definitions.
  • Your students should know, which topics will be covered during the next session. Ideally, they should start studying them on their own. Then when they come they will be more prepared to listen to you and their minds will produce more useful questions. you more prepared.

Related Posts

When functions dissolve

Writing essays

Variance in programming languages

Advice for programming students

Why every programming student should learn Coq

Taking notes in markdown: insert a part of a screenshot

Bigger sphere inside of a smaller one

Memory in CompCert: overview

A beautiful intuition on associativity

On teaching mathematics -- a summary of Kudryavtsev's book