I remember when I wrote my first lines of code. I was a freshman in college, and I had signed up for the introductory computer science course on a whim after choosing my practical career-advancing courses: writing, chemistry, poetry, and go. I had never really thought about programming as something you could do, even though my dad was an engineer, and it’s not like my high school offered any programming courses.
At first it seemed boring, abstract. String string = new String(“This is a string.”); – Okay, so what? But by the end of the semester, there was an exercise to code a bit of logic inside a graphical simulation of rabbit and fox populations. I finished the assignment and then added zombies. The infection spread. Chaos reigned. I was hooked. Programming was actually more creative than my creative writing class–I was making something out of pure imagination, and it was cool!
But most of my classmates failed the intro course. It seemed like programming was just too difficult, too geeky. The year after mine, the entire college graduated only three computer science majors (out of 700 grads), and they had been coding from an early age. Was it something you just have to start learning early, like a foreign language? If so, why had I already had like sixteen years’ worth of math classes, four years of Latin, and zero minutes of coding? Virtually no one uses multivariable calculus. Everyone uses computers.
Fast forward to today, and everything is changing. Eighteen countries and dozens of US states and school districts are scrambling to offer computer science classes across K12, with everyone else soon to follow. In a world where computers outnumber humans and virtually none of us speak their language, we want our kids to become native speakers of code. Soon everyone will have the opportunity I wish I’d had when I was eleven.
Yet we haven’t really changed how we teach computer science. Kids don’t think that coding is for them–especially girls and minorities. They try it, and it’s either boring or difficult or both, and they give up. A third of undergraduates taking Introduction to Computer Science courses fail. Sometimes we give students training wheels in the form of visual block-based programming, but when the training wheels come off and they switch to real code, learners often quit in frustration in that moment when they think they can't code at all.