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 replit.com, 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.
# <- 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(name) print('Hello, World!') choice = int(input("Please chose program 0, or 1: ")) print("You chose " + str(choice)) if (0 == choice): fun0() # 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.