There’s been quite a bit of discussion lately about whether programming should form part of the standard K12 curriculum. My own personal view is that yes, it should – but not necessarily for the reasons that are being proposed. As with math, writing, the arts, history – pretty much everything that we teach, come to think of it – there are (at least) three good reasons to teach programming:
- It gives kids a powerful tool to make things. What kind of things? You name it – one child might choose to make a game; another, a funky musical instrument. A third might choose to create an applet to understand math, while a fourth might gather and analyze data to better understand their world. Not to mention modeling proposed economic solutions for their community’s needs, and scrutinizing patterns in the speeches of politicians to see whether they respond to the virtues of these solutions, or the winds of public opinion…
- It also provides a valuable tool for thinking. The skills and methods embodied in the design of algorithms and their translation into code – generally known under the rubric of computational thinking – are powerful conceptual tools that can inform and shape thinking in other arenas. At the same time, they can provide a salutary check on overblown expectations. For instance, there is much to be said for the potential of what has sometimes been called the uses of “big data” – but without a decent background in algorithmic thinking, it is also far too easy to be taken in by snake oil vendors that have hitched a ride on a legitimate development.
- It introduces children to the beauty and pleasure of research and creation in computer science. This is an important – and far too frequently neglected – reason to teach programming. This is no different than what happens when we teach math or English: if we just teach the mechanics of algebra or essay-writing, say, without giving students at least a taste of the beauty of pattern or the power of communication of the medium, we are shortchanging our students, and potentially doing harm by creating a quasi-bureaucratic impression of these topics.
It is clear that the “write one boring Hello World program after another” approach is very far from what I would recommend. Instead, I suggest that the topic be taught in such a way that every child can apply it immediately in an area of their interest. And for people who might say that “first you need the basics before you can make anything” all I can reply is: sorry, but you’re not doing it right. It is in fact possible with modern tools to jump-start students in creation right away, while developing a framework of concepts and skills that allow for rigorous and deep development. Come to think of it, that’s been possible for quite some time – after all, the reason I learned to program by punching cards in FORTRAN IV many moons ago was because I had some questions that I couldn’t answer with a slide rule, pencil, and paper, and once I got those questions out of the way, I turned my attention to more formal computer science.
As with many other areas, the beauty of the mobile device as lively sketchbook in programming is that it allows users to quickly write snippets of code anytime, anyplace, in response to passing curiosity, phenomena in the world, or ongoing inquiry. Students stand to gain much more from writing code frequently and spontaneously than from waiting until they find themselves in traditional coding scenarios on a more sporadic basis. For best results, the toolset has to be agile: complex languages with involved compile sequences and slow turnaround are a poor fit here. Fortunately, several tools have sprung up which are an excellent match for these requirements. In my next blog post I’ll discuss several such tools for the iPad, together with the features that make them great.