Charlie Meyer's Blog

The New Coder's Hierarchy of Needs

tags: #cs-education

Part 1: Define Terms


Turning on the computer, remembering your password [1], installing Python.

Let's face it. Most people don't get past step three but we can mostly forget about all of this now thanks to Replit et. al. [2] Thanks, guys!


Adding forgotten parentheses, spotting unclosed quotation marks, and eliminating Unexpected Indentation Errors, etc.

Typing code is hard. Most people didn't realize there are so many types of braces. Most people don't realize that this one \ is the backslash. But this can become easy with practice.


Ability to predict the behavior of code before it runs and generate informed hypotheses about how a change to the code changes its behavior. (See also: the notional machine)

There are a lot of syntactically correct programs out there and writing one is easy once you get the hang of it. Understanding how the relatively simple rules of a programming language compose into complex behavior is a little more complicated.


I received a specification, and I created a computer program that meets that specification, hooray!

If computers are your thing, the hooray in the preceding sentence might be genuine. If you're 90% of students completing 90% of school assignments, there's a 90% chance it's sarcastic.

Self Actualization

I invented a specification for a computer program that would be entertaining/useful/profitable for me, and I succeeded in implementing it, hooray!

Yeah, this is the good stuff.

Part 2: Draw and Subsequently Invert Pyramid

Figure 1 (Tired) Doing things in order

Figure 2 (Wired) Flipping Pyramids

Filling in this section of the blog post is left as an exercise to the reader.

Part 3: Status Quo

Scratch successfully inverts the learning-to-code pyramid to our preferred orientation. Scratch meets students where they are, getting them engaged with computer science by allowing them to quickly prototype animations and games. Using a block coding environment on your Chromebook to make a game circumvents problems of setup, syntax, and to some degree semantics. The platform's focus on sharing creative projects is amazing, and its usage numbers reflect how good it is.

Somewhere in 7th, 8th, or 9th grade, most students switch from block coding to "real coding", whether that be in Replit,, CodeHS, or elsewhere. Now, instead of animations and apps, students work on making command line versions of blackjack and if they're lucky, turtle graphics. For 90% of students, graduating to "real coding" means graduating out of having fun. Python and Javascript (or Java lol) programs are more complicated to construct and even more difficult to understand. If they're lucky, students can succeed in writing programs, but whether they're making a command line casino or knock off Mondrians, the "self actualization" end of the pyramid is de facto chopped off. All of this results in figure 3.

Figure 3 Word Cloud representation of a student's mind

Part 4: Future Solutions

It would be pretty cool if someone was working on a platform where students make chatbots, games, and apps using their choice of a nice new visual programming language, Python, or Javascript. [3]


[1] The closest I've ever come to quitting coding was 10 minutes into Comp11, where I couldn't figure out why the computer wouldn't accept my input for my password. Turns out, Unix systems don't display *'s as you type your password, so my password was in fact being typed. Who knew!

[2] Even in Replit, the default project type is a "Blank Nix Environment". The number of times I've seen a student accidentally type 20 lines of python into a config.nix file is crazy

[3] (We're about 15% of the way there)