My kids were lucky. They were born at about the same time as the Apple ][ and they grew up during the all-too-brief period when learning to program a computer was considered part of a normal elementary school education. That window only lasted from around 1980 to the early 90s, when the complexities of graphical user interfaces began to kill amateur programming.
It’s time to bring back coding as part of kids’ education. Not because it is important to know how to program a computer to use one anymore than understanding of how engines work is important to driving a car. The virtue of learning programming is that it develops some very useful good habits, especially clear, precise, and careful thinking.
Unlike so much else in life and education, there’s no such thing as a good-enough piece of code. It either runs or it doesn’t and it either produces a correct result or not. But coding does provide instant gratification for doing the job right. Coding problems are inherently fair and objective, giving them all the characteristics of great pedagogical tools.
I don’t have any illusions about programming returning to elementary school curricula any time soon. There’s too much competition for classroom time, and way too few qualified teachers. There’s no one lobbying for it, and no studies showing that learning programming improves scores on standardized tests (though I wouldn’t be surprised if it did.)
Fortunately, excellent free tools exist that will let kids learn programming at home. For younger children, Kodu, a project of Microsoft Research, offers a graphical, drag-and-drop approach. Kids can use it to design simples games while learning priciples of programming.
(One note of learning programming: The choice of a language is largely irrelevant. The principles of programming are the same regardless of language, and the mainstream languages used today all derive their syntax from C++ and in most ways are more alike than different.)
For a deeper dive into coding, the estimable Khan Academy’s computer science section provides more formal training in coding techniques. There’s more of a do-it-yourself element to the Khan approach: To actually work the examples and do problem sets, you’ll have to set up a Python development on your computer. Fortunately, that’s about a five-minute job.
I learned coding in completely haphazard fashion back in the mainframe era. In those days, the only way to do anything with a computer was to program it yourself and the data processing I needed to do for an undergraduate research project forced me to learn Fortran—and debug code by reading a printout of a core dump. In truth, I never became more than a marginally adequate programmer, but I believe the experience made me a better, more analytical thinker.
My kids made better use of their opportunities. One is now a mathematician working at the boundary of math, computer science, and operations research. The other is a down-to-the-silicon operating system developer for IBM Research. The might have gotten their without their expeience as young boys banging away at an Apple ][ (and later, in high school, a MicroVAX), but I think those formative experiences were critical.
So take the resolution yourself and make this the years your kids (and please, don’t forget the girls) learn to code. Some day, they’ll thank you.