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

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.