Despite recent energy in the US around K-12 computer science education, the situation here is dismal. Prospective Bradfield students typically love computer science in spite of their secondary school experience; most complain that their teachers didn’t understand the content and that the curriculum was dull. My friend Zach Latta even built the tremendously successful Hack Club on the premise that students have no better option than to teach one another.

Meanwhile I’ve been playing SHENZHEN I/O by Zachtronics (no relation to Latta):

In the game, all of the embedded systems jobs have moved to China (not so far-fetched if we continue to turn kids off of CS) so you take a job in Shenzhen making miscellaneous trashy electronics. To complete each project you must select appropriate hardware components, plan how they will execute and coordinate, and write their software in a simple assembly language.

The game is incredibly fun and challenging, even for those with programming experience. Incidentally, it emphasizes many of the important lessons that we hope K-12 CS education will impart:

Success comes from thinking precisely . There is no margin of error; to pass a level your circuit must match the verification output exactly.

. There is no margin of error; to pass a level your circuit must match the verification output exactly. You must develop a deep understanding the problem , as well as the tools with which to build a solution. It would be almost impossible to progress in the game without carefully reading the 41-page manual covering the instruction set architecture, hardware specs and many of the problem descriptions.

, as well as the tools with which to build a solution. It would be almost impossible to progress in the game without carefully reading the 41-page manual covering the instruction set architecture, hardware specs and many of the problem descriptions. You must plan . Most levels are hard enough that they require careful thought and diagramming before you attempt a solution.

. Most levels are hard enough that they require careful thought and diagramming before you attempt a solution. Abstractions are powerful ; abstractions are limiting. The later levels require enough components that it’s natural to ascribe each a responsibility, define the interfaces, then code them in isolation. However, clean abstractions do not lead to the most efficient solutions, so you must climb up and down the ladder of abstraction to attain the best outcome.

; abstractions are limiting. The later levels require enough components that it’s natural to ascribe each a responsibility, define the interfaces, then code them in isolation. However, clean abstractions do not lead to the most efficient solutions, so you must climb up and down the ladder of abstraction to attain the best outcome. Engineering is about tradeoffs. While correctness is non-negotiable, you must often choose between elegant solutions, the cost of components and the power usage (number of instructions executed) of the program.

Beyond CS, there is a life lesson: those who strive for excellence come closest to attaining it. I finished the “drinking game” level days ago, but I am still thinking about how Jonathan Blow may have managed to do it with just ¥3 production cost!

This is not the first game by Zachtronics to be both educational and impressively entertaining: SpaceChem and TIS-100 are also superb.

Tomorrow Corporation deserves praise too for Human Resource Machine, which taught my wife how to program assembly on a Harvard Architecture machine, despite her insistence that she did not know how to code. The game was cute enough to be approachable and entertaining enough for her to play it to completion; once she accepted this as an act of programming it was not long before she had the confidence to learn Python and other “real” languages.

Given how successfully these games teach what we’d like to see in K-12 CS education, it seems entirely reasonable that we should build “curriculum” around these and similar experiences. I can think of few better investments as a nation than to buy a copy of SHENZHEN I/O for each child. Perhaps Zachtronics would give us a bulk discount.

Of course I am not an expert on education policy or teaching K-12. You should not listen to any specific suggestions I have about that; this post is mostly an excuse for me to express my excitement about SHENZHEN I/O :)

Having said that, the folk I’ve met who fell in love with CS at a young age did so through play and experimentation rather than any kind of typical classroom experience:

My own first exposure to programming came when a teacher showed me QBasic and let me skip class to code up literally whatever I wanted. I mostly made little drawings and animations.

Myles learnt by typing up the code for games that had been published in magazines.

Many of our friends made games and websites for one another, or wrote Doom mods, or tried to hack things for fun.

I recently met a student whose first programming experience was to teach himself LISP so that he could understand other folks’ Age of Empires AI mods. He is now itching to take an AI class at college, although I’m sure he already knows the material.

Every time I hear a story like this or play a game like SHENZHEN I/O, I wonder if formal K-12 computer science education does more harm than good. While we may not be able to figure this out for sure, I have no doubt that you should by copies of the Zachtronic games, Human Resource Machine, and similar gems for friends and family.

Thank you to all the folk who build games likes these, and to the teachers who embrace playful exploration of technology in their classrooms. I am sure that your legacy will be reflected in the high impact work of the students you inspire.

If you were interested enough to read this far, you will probably enjoy the remarkable documentary Shenzhen: The Silicon Valley of Hardware. Also, Bradfield is accepting enrollments for our next cohort.