Charlie Meyer's Blog

What I Learned From Two Years of Teaching High School CS

(This post is also now also listed on the Pickcode Blog)

Leaving Teaching

I’m posting this on my last day teaching high school computer science. In the past two years, I’ve worked with over 200 students and for many, my class was their first experience coding.

I did not succeed in getting 100% of my students interested in programming. (Not even close)

By the end of my class, many were determined to never try coding again in their lives.

As I leave teaching to start Pickcode (a new platform for teaching CS), my primary concern is how to design the product to engage a higher proportion of students. I don’t need every student who tries Pickcode to become a software engineer, but I want every student who uses it to understand the joy of using coding to create programs they’re proud of.

Python Music and Engagement

While I failed to get 100% of students to enjoy coding, almost every student had a couple of “on” days.

Take Braeden, who took my intro to CS class as a junior and found absolutely every opportunity to goof off in class. His final project for our App Inventor unit was a soundboard app with one button: a picture of Pitbull that made the Taco Bell ding when clicked. (He completed this in 25 minutes and played web games for the other three weeks available for the project)

When it came time to learn Python, Braeden was almost universally disinterested. Project 3.10 however, was called “Python Music” and he was tasked with composing a song using a small library I made to wrap a Python waveform package.

Now, Braeden was interested. After 120 days of the school year spent slacking, for project 3.10 Braeden went above and beyond to produce a version of the Star Spangled Banner. He meticulously hacked away, asking questions about how to use my library to write different pieces of the song. This is what you want to see from a computer science student.

Fast forward to project 3.10 this school year, and lo and behold: students came “out of the woodwork” to produce the Black Eyed Peas “I Gotta Feeling”, and the opening song from the movie “Up”.

Some might look at these success stories and say “Wow, we need to make a music oriented Python curriculum!”. To them, I would need to also point to the sizable fraction of my student population who absolutely despised the project, and may have found that project as the last straw in making their decision that they hate coding.

The lesson we need to take as curriculum developers is that there is no one size fits all solution: students have distinct interests and we need to find ways for students to explore CS content through the lens of what interests them. My goal with Pickcode is to productize this idea, to create a platform that gives students the tools to learn to code in whatever way motivates them the most.

Falling Off the Train or On the Rocket Ship

One thing that led me to start creating Pickcode was the number of bugs I encountered in existing tools for coding education. Fifteen minutes of lost time to a minor bug or incorrect instruction step doesn’t seem like a big issue, but when those fifteen minutes represent some of the first minutes a student is programming, they have an outsized impact in changing the student’s attitude toward the subject. I began thinking of the beginning of a student’s journey as a standard marketing funnel, where at any point they can drop out of the funnel and lose interest in the subject.

From this perspective, the bar for quality in both the tools and the curriculum is exceedingly high. Unattainably high.

What Python Music and other successful projects I wrote taught me was that this model is incomplete. Yes, buggy tools and error ridden curriculum are bad, but students will happily work around them if they have intrinsic motivation in the subject.

Was my library for music bug-free? Did it have a perfect API? Not quite. What mattered more is that Braeden and the other students who engaged with the project finally got what programming actually is. Programming is about identifying a goal for a program, and iterating on code to achieve it regardless of what bugs you encounter. More than that, programming is about harnessing the computer to express yourself creatively, systematizing the contents of your imagination until they come alive in the real world.

To My Students

Leaving teaching this soon wasn’t my original plan, but I’m starting Pickcode because of the lessons you taught me.

Thank you.