I’m sometimes asked about how to start your child in learning how to program a computer. Here are some evolving thoughts I have on the subject.
First, even though I respect the efforts to make coding instruction available to all children, I don’t believe learning how to program is as important as reading, writing, and mathematics. It’s an important add-on, but I would not sacrifice these core subjects for coding. Additionally, if given the choice between my child learning how to code versus a musical instrument, a foreign language, or organized athletics, I would probably choose any one of the latter three (from a time spent standpoint) over coding. Again, this is not because coding is unimportant but rather because the latter three topics or skills can have a much higher bang-for-the-buck for a child than learning how to code. While exposure to coding as a child is helpful, coding is something one can learn as an adolescent or as an adult. The same is not the case for learning piano, Chinese, or gymnastics, and the secondary benefits of music, a foreign language, and athletics go beyond academics (or employability) to influence one’s physical, emotional, and social well-being. Of course, this doesn’t have to be an either/or—it can be a both/and—and different children benefit from different activities.
Second, while people have studied how we learn to program for decades, our understanding of the process of learning how to program is less settled than the process of how we learn to read, write, and do mathematics. While there is a diversity of approaches with regards to teaching reading, writing, and mathematics, many of the fundamental elements of how to learn these topics are settled. No one, for instance, would recommend learning algebra before learning how to count. With programming, however, there is disagreement about whether recursion should be taught before iteration, whether object-oriented programming should be introduced earlier or later, and so on. As a result, my advice regarding how to start your child in learning programming is one pathway, but it is certainly not the only one or necessarily the best one for your child.
The main idea behind this pathway is to start with introducing programming concepts using games (on the computer or a board game), teach concepts using a graphical language, then teach the student a text-based language. The sequence might look something like this:
- Introducting programming concepts: A game like Lightbot (which used to be available on iOS, but isn’t any longer) or a board game like Robot Turtles can teach children how to think algorithmically—step-by-step—like a computer does. Also, at earlier stages of learning programming, the emphasis should be on having fun. If your child enjoys learning how to program, it will make everything easier.
- Graphical language: Scratch and Snap! are examples of graphical programming languages. These differ from text-based languages in that the instructions to the computer are made up of interlocking blocks rather than purely-written commands. Robotics education systems, such as LEGO® Education SPIKE™ Prime Set, also may use a graphical programming language. Turtlestitch uses Snap! for writing programs to control a sewing machine to create embroidery!
- Text-based language: These are the languages used by software developers to create apps and other computing programs. The two most popular introductory text-based programming languages today are Java and Python. Both languages are relatively easy to learn and also are used for professional software development. For both languages, I would teach structured (a.k.a., procedural) programming first then object-oriented programming. There is also the Processing programming language, which uses Java syntax (there is also a version that uses Python syntax) but is both simplified and turbo-charged to enable students to create sophisticated drawings and animations with very little code. Processing is a nice transition language between a graphical language and full-on Java or Python. (Bitsbox is another transitional text-based language option. They provide a comprehensive curriculum using a web app-focused high bang-for-the-buck approach using Javascript.)
However, I want to reiterate that you do not have to follow this path in order. I think it’s a reasonable, logical sequence, but it’s not required. For my own eldest son (who is currently 13), we played Robot Turtles when he was young, and then I started him with Python—just a few lessons with me over a few years to dabble in the language (using Pygame Zero). Now, I will do some lessons with him in Processing. So, we essentially skipped graphical languages and are trying different languages in the text-based language space. If I find his experience with Processing doesn’t go well, I might introduce him to Scratch, but we’ll see. Again, the pathway I described earlier is flexible.
In terms of where you can find curriculum or classes, there are all sorts of options. Your local school or school district might offer classes or summer coding camps. Science museums, libraries, etc. might also have coding camps. A robotics course might introduce your child to coding. There are online courses, such as Code.org, and books galore. And, there are companies who run coding camps, just like there are companies who run soccer, baseball, etc. camps, and companies who offer tutoring services (for instance, I offer tutoring for kids to learn coding). I don’t have any strong recommendations of any one option except to say that whatever you choose, if you choose a resource that teaches your child not only how to following instructions (e.g., “duplicate this program to make your device work”) but how to break down a task into simpler tasks the computer can understand, that will be more beneficial for your child. You can also be that resource: you can take a more “following instructions” curriculum and introduce questions that help your child develop skills in breaking down tasks into subtasks.
Finally, regardless of what path you start your child on, remember the two most important ingredients to learning programming: patience and practice. I think many students (and parents) have an unrealistic expectation of how quickly one learns to program. We hear stories of teenage phenoms who start their first multi-million dollar company before they are able to vote and think this is normal. My experience is that many students (including myself) take a long time to really get how to program. In my case, it took 15 years after high school (not counting the programming summer classes I took in middle school, etc.). But, I’m not ashamed it took me that long. God has made us all different. What matters for learning most skills is not necessarily your gifting but your perseverance. In this, for many students, learning programming is more like learning the piano than learning philosophy. It’s the patience and practice that leads to proficiency, not a book knowledge of the concepts.
First posted January 24, 2023. Last updated March 18, 2024. Thanks to Stephanie Pease for her ideas and feedback! All opinions, though, are my responsibility. Trademarks used above are properties of their respective owners.