Teaching (and Learning) Programming Is Difficult

This is a short manifesto on teaching and learning programming.

It is easy for both teacher and pupil to blame one another just like in any other discipline. However, the problem of teaching programming is especially arduous because specific factors:

  1. The student has to learn to think and express more formally.
  2. The teacher has to encourage the student to read and process hard text and not just rely solely on a more simplified transmission of knowledge.
  3. The student has to be willing to be able to find resources for a topic and commit to learning them on his own as soon as he is able to.
  4. With now the widespread usage of a large language model, the student has to maintain discipline to avoid this shortcut: while AI bootstraps immediate competency, complete understanding remains naive and self-potential capped.
  5. Within the context of formal schooling, the student must manage his time well. This would also eliminate the desire to use shortcuts with AI to fake a course grade.
  6. Programming connects various other disciplines and deep understanding requires the discipline to be more well-read and investment into fields such as mathematics and physics. (E.g. Donald Knuth’s The Art of Programming famously requires prior understanding in mathematics).

Teaching Kids Coding

Younger students usually come because of their parents’ interest in developing an extracurricular. Logistics aside, the students are here partly to have fun. Having fun is most commonly reflective of something silly happens or as a result of delayed gratification → they manage to create a complex project.

A typical coding program could incur about an hour per week for the student. In any sense of learning effectiveness, the student will not be able to remember the concepts learned without a rigorous level of practice and questioning.

Lack of Standardization

When I first began working as a coding tutor handling students 2:1 or 1:1, I would usually go into asking, “what is the student working on?”, or “what specific mechanic do I help them make today?”. This casual approach was convenient when I just wanted to “do my work for the hour”. The result is a feeling of discontinuity between the sections.

This lack of a game plan is something that’s to be learned from formal teaching. A formal curriculum must be developed for learning programming fundamentals.

Sample roadmap
  1. Variables
  2. Data Types
    • Number (int, float, double)
    • String
    • Boolean
  3. Functions
  4. If-statements
  5. Array/List
  6. For-loop

Standardization requires and partly enables the creation of teaching materials. The student must be able to define concepts in their own word, vaguely describe why the concept is useful (this gets reinforced as they practice), and attempt to connect concepts with each other. My teaching materials are created to fit these requirements.

Memorization Is Needed For Understanding

As part of my job’s requirement, the projects that the student were going to create must stem from their own personal interests, which leads to complementing strategies to keep engagement and student uniqueness. However, at the beginning when the student does not know anything, it is always challenging to keep the student engaged and make them remember important concepts even with standardized plan.

Introducing the Notebook

A notebook should be employed. I find that having a notebook that serves as a learning journal works better than asking the student to copy down the topic they are being learned at hand. I created this website partly as a way to host my teaching notes so that students can access and read. I would only simply ask the student to note down things they need to focus or re-learn.

Without a notebook at all, the student forgets the larger picture of their learning process. It’s time-consuming to be repeating ideas covered just a couple of weeks ago. It’s also part of a toolbox so that the student could study what they have learned.

Why Teaching Notes - Learning From Just Lecture Sucks

Forcing the student to copy down the definition and use-case of a topic from a reference (web pages, textbook, teaching notes, from lecture) even if summarized is mostly a waste of time. Part of my approach during a session is to tell them to open up my notes as a reference and use their notebook in the way I discussed.

I find that my talent as verbal communicator is extremely limited when it comes to teaching technical topics, much less telling the students themselves to write the words from my mouth. Every “structured” chain of explanation that I thought the student was able to follow completely (which is never the case… at most 80%) is a risk that could delay the effectiveness of the upcoming session.

How a Motivated Student Can Use a Notebook

Tutoring kids coding lacks the pressure of exams and grades compared to formal schooling. Part of what I do as a tutor is asking my students questions that consider the construction of a concept from most fundamental understanding of computers. Oftentimes, I like to give very vague assignments where students have to write a paragraph that explains a concept in their own words; as the complexity increases, the student is asked to work from the most basic ideas.

Feynman Technique

The Feynman technique is a powerful way to develop understanding as a learner.

  1. Choose a concept
  2. Teach it to someone (student to session partner or back to the teacher)
  3. Identify gaps in your knowledge (through tests, challenges)
  4. Refine and simplify your knowledge (with a learning journal)

How to Introduce New Concepts

Introduction of new concepts are divided between direct practice and theoretical lecture. The instructor can either discuss the theoretical knowledge first or last. A direct practice should be used for simpler topics or for students who need more time to adapt to the lesson.

Best For Engagement

This approach is best suitable for a game engine education tool like pixelPAD or Roblox.

The instructor can best engage the student through first mechanic demonstration. He can then let the students do it on their own with help from one another as an intermediary step before letting the student create the text box on his own.

When mechanic creation is achieved, only then the instructor should go and explain the theory.

An example of this can be seen in the first activity of my pixelPAD notes.

Best For Heavy Topics

The student should prepare by reading the notes before the session. Then regardless of the level of preparation, the student then goes through the teaching notes with the instructor. At the end, the student will do a quiz from the teaching note or implement a small coding exercise.