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.

I gave a lightning talk

This afternoon I gave a lightning talk at Tufts. The whole event was really wonderful and it was fascinating to learn about all the different kinds of research going on here at Tufts. Every talk I saw was unique and fascinating. Since I wrote a speech, I figured I might as well share it here:

Hello, my name is David Zabner and I am a first-year STEM Education Ph.D. student here at Tufts. I have spent the last few years teaching computer science, at bootcamps, here as a TA, at Cornell College as a lecturer and for two weeks in China as a visiting faculty member at a university there.

I am going to start by describing my experience of teaching in China and I will argue that we should teach computer science in as much the opposite way from how it is taught there as possible. This is necessarily an extremist argument and I will happily admit that the most perfect way almost certainly lies somewhere in between the two extremes.

So there I am at a small Chinese university, hired to lecture about Java programming for two weeks, 10 1.5 hour classes, to about 100 students. My plan had been to review Java basics over the first three days to get students used to listening to lectures in english, and then to move on to more advanced topics in Object Oriented Design. On the first day I found out three things:
1. I needed to speak slower than I thought possible in order to be understood,
2. The classroom I was teaching in had one wall covered in answers to a multiple choice exam on english and
3. My students knew absolutely nothing about how to program in Java or for that matter in any other language.
These students, many of whom brought laptops to class, had not even installed the tools necessary to actually program on their machines. This was very surprising to me as I was teaching at the end of a semester in which they had all been studying java and I knew that they had all already taken a class in C++.

I asked around and got a basic explanation for why this was the case: the programming classes these students had taken consisted of a semester of lecture, followed by a high stakes final, which was not changed from year to year and which every student cheated on. The faculty informed me that given that every single student cheated they had the option every semester of failing all the students, and losing their jobs or allowing them all to pass. 

In short, this classroom of pedagogic hell had the following characteristics:

  1. Education based purely on lecture
  2. No chances to practice the thing being learned
  3. No feedback from classmates or instructors
  4. A single event that decides a students grade

When I got home, knowing that I would get a chance to teach an introduction to Computer Science class of my own the next year at Cornell College so I set about designing the opposite class. It had these characteristics as goals:

  1. Education without any lecture at all
  2. Constant practice of the thing being learned
  3. Regular feedback from classmates and instructors
  4. Many chances to affect a students grade

To give the students practice, feedback, and many chances, I used mastery grading and a huge quantity of optional homework, which I highly recommend, but I want to focus here on “content delivery”.

This consisted of coming to class every day with some code that I wrote and handing it over to students with a button that ran it (I did this using a wonderful platform called Replit). I then asked the students, alone, in groups, and as a class to de-code what I had given them, explain it, identify patterns and rules, and make changes. I was inspired by a poetry class I took at Cornell that focused on learning to do close reading before writing your own poetry. Once they had decoded and were comfortable with reading the day’s code, the homework consisted mainly of prompts asking them to edit and extend the code.

I found that teaching this way was spectacular! Firstly, with a little structure and support from a partner, every student in my class was able to, in an hour and a half, go from never having seen code before to confidently explaining the behavior of 100 lines of Python. By the first midterm students were able to do the same in a programming language, Golang, that they had never seen before, while under the time pressure and stress of an exam. Secondly, by untethering myself from the lectern I was able to dedicate more time to supporting students alone and in groups. This meant not only individual attention for the students, it also meant that I could focus on discovering what my students were and were not learning. Finally, students reported that they loved this method of learning and I had zero incidents of students falling asleep in class. 

I also hope that this gives my students a durable ability and confidence to learn a new programming language, a skill critical to anyone who is programming regularly and even more important for those who program rarely, as every time they sit down to do it it will probably be in a new language!

One of my goals over the next few years is to find ways of answering the question of whether or not this way of teaching works as well as I think it does. Since I am just starting to learn about how to do educational research I am still a little unsure of how I will answer that question but if you have ideas, I would love to hear them.

Thanks for your time! Any questions?

Getting into the groove

Every single year I get two or three weeks into the school year and have a day where I feel like I will die of the strain. “How do people keep all these balls in the air!”, I hear myself screaming in my head. Then, often the next morning, I wake up and find myself mostly in the groove of school again. I wonder if anyone has written about a way to ease that transition. If it’s this hard for an over-schooled PhD student it must be an incredible strain for those less acclimated. (I am not happy with that last sentence but hopefully, you get what I mean). On the other hand, it is possible that I am alone in this yearly ritual.

This week I think I am falling into the groove. Last Friday, I finished working for Ramp. I must admit that when the workday was over I felt incredibly happy to have one less ball in the air but I’d be lying too if I said I don’t miss it. The predictable 9-5 of work as a Software Engineer is much less stressful than grad school and the people at Ramp were really fun to work with.

Before signing off I should also mention that I went to a truly spectacular wedding on Sunday of a dear friend from here at Tufts. I met some wonderful people there and danced until much too late, only to learn that if you don’t get enough sleep on a Sunday night it can make your week more difficult than it needs to be. 100% worth it though.

In my next blog post, I am going to get back to curriculum stuff. I want to talk about what kind of stuff I saw while students worked on program 0.

Finally, this Friday I am taking part in the School of Engineering Lightning Round research presentations! Info here: https://www.eventbrite.com/e/school-of-engineering-research-sharing-lightning-round-tickets-171174767337

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.

Clerihews
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.

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(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.

It’s almost been a week

I am just about 7 days into my newest journey. Starting a Ph.D. in STEM Education at Tufts University. It has been a wild week, to say the least. I am still finishing up work at Ramp, a video distribution startup in Boston, and had my first classes almost a week ago on Sep 8th. On top of that, I am trying to reintegrate into student life, celebrate the Jewish High Holidays, and get to know my advisors and the research cultures in their labs. Covid has certainly not simplified this transition. With all this going on I am feeling deeply behind but also incredibly excited.

I was originally planning to blog only about my thoughts as a CS educator but given that I have not been doing that since May a slice of life update seemed more reasonable for my first post.