Hi everyone. As most people who know me are aware, I’m very passionate about the idea of teaching people, particularly children, how to harness creativity and logic skills. Recently I’ve been reading about academic thought on the subject of teaching these specific skills. Various articles are creeping into mainstream media, (ted.org, wired.com, etc.,) covering the best methods for teaching and in particular I’ve been paying attention to thought relating to teaching children about programming. The consensus seems to be that academia would like to see programming concepts taught at a much younger age. I’m not going to get into that side much. But thinking about this coaxed me out of my cocoon to share some thoughts and I would like to make a request as well.
In Disney Infinity, the entire Creativitoys system inside the Toy Box is our effort to help children learn programming concepts and apply them in a creative way. My belief when I set out to design the logic system was that there is probably no better way to teach children programming concepts than in a mainstream video game. I felt we could essentially sneak in teaching programming concepts in a fun and transparent way.
In Infinity, the, “language,” portion of programming is a magic wand and it works it’s programming magic simply by pointing at various objects and connecting them to each other. In programming terms each object you connect with the magic wand represents a function, operator, or other type of logic controller. By connecting them you create programs, and it scales to handle pretty shockingly complex functionality. It has proven to be a very effective interface or language to teach just about anyone, including children as young as five, to program.
The process of developing the system combined with parsing user data gave us a mountain of insight into the subject of teaching children programming. One of the most shocking observations was that pretty much anyone can program. The easy part of the problem is actually learning the language side. And it doesn’t really matter how old a person is. Within 15 minutes or so I’m pretty confident I can get almost anyone to make their own, “programs,” in Infinity. The takeaway was teaching someone the language of programming isn’t particularly hard if the language isn’t abstract or overtly technical.
By far the most difficult thing to do is to help an individual turn that language understanding into something creative or useful. While it is easy to learn the core functionality it’s very difficult to transition into understanding the potential applications for that understanding. In Infinity I’ve watched countless people connect a trigger plate to a confetti cannon, step on the plate and watch the fireworks. This is a program, but it’s not particularly useful or innovative. However, I haven’t seen too many people do something like this. Why?
This phenomenon where understanding and usefulness don’t necessarily correlate actually parallels both traditional language learning and usage as well as traditional programming. Everyone learns to speak and write but how many of us innovate with it? I think the pinnacle of many individual’s creative writing skills are probably making a shopping list. And how many professional programmers actively engage in writing innovative code to create compelling and valuable applications? What are a legion of students who understand the concepts of programming going to do with it? Will they do more than the average person does with any other primary school taught skill?
So, to me the great challenge is how can educators, parents, and *gasp* video game creators, take a pupil, (or, “player,” as we call them,) by the hand and lead them from understanding programming principles to creatively applying them to create art, solve problems, or simply innovate? And, can we make this process more engaging and, dare I say, fun? Moving towards a better way of doing this is at the core of my responsibilities on our current project. I would love to open a dialog with Infinity players, parents, kids, and academics on how to better accomplish this. If you or someone you know with an expertise in this would be willing to volunteer some insight I would love to start a dialog.