Theoretical justification for my curriculum

This blog post is a placeholder of sorts. I had a late night urge to explain the theoretical justification for my “figure it out” curriculum (I need a better name for it).

There are a bunch of threads I want to bring in:

  • Responsive teaching: By not lecturing you are free to listen to the classroom and the students. To respond to changing conditions: breakthroughs, difficulties, and curricular deficits.
  • Krashen’s theories: Admittedly unscientific and discredited but I am really inspired and believe in the idea that exposure is key to learning any language. What better way to expose students then to have them constantly trying to make sense of programs during class.
  • Constructivism: Teachers cannot and should not try to pour information into students heads. What better way to have them construct their own understanding then through sensemaking activities.
  • Constructionism: Have students, alone and in groups, create and present artifacts of their work and learning. Sometimes those artifacts look like completed websites showcasing personality, artistic inclination, and humor. Other times it may simply be a class list of “the rules of python”.
  • Antiracism: This is something I need to work on. There are certainly reasons I think my curricular approach would support those underrepresented in CS but I need to do a lot more work to make sure this is the case and to improve my teaching and curriculum.

Hopefully, this will turn into some kind of theoretical framework paper.

At some point this week, I’ll write a blog post doing my best to detail student’s responses to the program 0 activity. I wish I had taken better notes of what happened.

Comp-140 day 0

Last year I had the privilege of teaching Introduction to Computer Science at Cornell College three times (blocks 2,5, and 6) and I landed on a day 0 curriculum that I think worked really well and illustrates how I currently think CS1 should be taught. I will leave out the parts of the class devoted to introductions, norm-setting, and discussion of the syllabus and mastery grading although all of these are deeply important. I will definitely create blog posts down the line about my thoughts on mastery grading (love it) and about how I have seen more experienced educators here at Tufts do the introductions, norm-setting, and syllabus discussion (I have a lot to learn from these folks).

The actual “content introduction” of the class was broken into three parts: Clerihews, Program 0, and Program 1.

I gave the students 5 clerihews and sent them in breakout rooms in groups of 2-3 with the instructions to “figure out what the rules of Clerihews are” and then to “describe the function of each line in 1 of the 5 Clerihews”. Here is an example Clerihew by Edmund Clerihew Bently:
Sir Christopher Wren
Said, “I am going to dine with some men.
If anyone calls
Say I am designing St. Paul’s.”

The clerihews is an odd, rare, humorous, and almost certainly bad form of poetry but it is simple enough that my students were quickly able to discern the rules of the form and even explain how this line or that in a poem was a setup for the punchline. Once they were back and had shared what they learned I told them that we were going to do the same exercise with a programming language called Python!

At this point, I sent them to a “project” (Project 0) within the Teams feature of, a website with incredible utility when teaching a programming course. I showed them how to run the Python script on Replit (there’s a button labeled run) and sent them into breakout rooms again in groups of 2-3 with similar instructions to the Clerihews. This time I added a google doc (of questionable utility) where students could share their findings about the rules of Python.

Program 0

# <- notice these. What do you think they do?
# int means integer which is math for "whole number"
# feel free to edit this code as you would like

# Write explanations for what each line of this program does

def fun0():
  name = "" # This sets the variable name to ""
  message = "It's nice to meet you "; 
  print("What is your name? ")
  name = input();
  print(message, end="")

print('Hello, World!')

choice = int(input("Please chose program 0, or 1: "))

print("You chose " + str(choice))

if (0 == choice):

# What happens if you:

# Change line 10 to say:
# message = "It's nice to meet you ";

# Delete line 9

# Delete the word int from line 19

# Make some more changes

# Write some python rules in this document:

I’ll talk about how program 0 tended to go (hint: really well in my opinion) and share program 1 in a later blog post.