I attended SIGCSE for the first time!

I just got back home from my first academic conference as a PhD student. I absolutely love conferences and I had a really wonderful time attending talks and meeting all kinds of people. I wanted to share some of the things I learned at SIGCSE:

  1. There is incredible excitement among the younger folks I met to make CS more inclusive and accessible. No one under the age of 35 would shut up about how important it was to make CS truly for all. I loved it
  2. Attendees seemed to have surprisingly little background in ED theory. I think there is a need to educate the community of CSEd researchers and practitioners on the broad strokes of learning sciences and how they relate to CSEd. Ideas like Behaviorism and Social Constructivism are helpful both in discussing and generating new ideas and in figuring out ways to measure the success of interventions.
  3. There is an incredibly wide range of opinions on what CS students need.
  4. There is a continuing crisis of (CS) educator numbers in K-12 and at smaller colleges and universities. This seems to be one of the drivers of the interest in teaching CS “at scale”.
  5. The big drama seems to be about the two AP computer science courses. Although I didn’t hear anyone angry or arguing, almost everyone seemed to care deeply about the content, purpose, and above all programming language of these courses.
  6. Everyone I met seemed more than happy to discuss my ideas about CS1 but few seemed interested in critiquing them.

Here are some of my favorite things I saw and read that I think are worth looking at:

  1. Subgoal Labeling for CS1
    1. Cool research on adding “Subgoal Labeling” as a scaffold for students. The idea is to label, for students, chunks of sample code in “worked solutions” to help them build a higher level mental model used to understand code and its constituent parts.
    2. They have some really impressive results over 3 papers
    3. https://www.cs1subgoals.org/
    4. They are working on adding Python and are looking for research partners
    5. They have a runestone textbook that supports this work
  2. CS + Ethics
    1. Teaching ethics by teaching ethics pedagogy The idea here is to create a CS Ethics course whose final project is an ethics module for another CS course. Seems like a very cool thing to replicate in the engineering school at Tufts.
    2. The House of Computing: Integrating Counternarratives Fascinating and difficult to summarize. Argues for integrating counternarratives (in all CS courses) to undermine the dominant narrative that CS is “objective, apolitical, and unbiased, with little need for ethics education”

Also everyone should check out CSEdResearch.org!

Volunteering at TS was a blast! I just wish I had taken more pictures

Legitimate Peripheral Participation

I haven’t posted yet this year and felt the need to post something so here are some thoughts I am having here at the end of January. They may be more appropriate to twitter but I am posting them here nonetheless:

I have started reading Failure to Disrupt by Justin Reich and I cannot recommend it highly enough. I also recommend Justin Reich’s podcast “TeachLab” where he goes into a lot of detail about how to improve educational systems in the US. One of his guests recommended a large edit to his book, replacing the concept of “scalable education” with “public education”. The book would be much improved by this change. I may do a book review on this down the line.

I grew up in a community and family full of chances for legitimate peripheral participation. I got to experience it within my synagogue, my dad’s lab, and at summer camp. I got to experience it again in some ways within the startup community here in Boston and a lot during my masters in CS at Tufts. However, I feel that it is missing from my current Ph.D. experience. I think Covid is largely to blame here. It is such an important way to learn and I miss it dearly.

Relatedly, I think that the curriculum idea I have about CS1 could be improved by designing it to explicitly create environments that support LPP. If anyone is reading and has ideas about how to engineer for it, or why it is impossible to induce, I would love to hear them.

I found my first “expert” who agrees with me that Computational Thinking (CT) is a load of crap! I just joined the class Children & Technology taught by the wonderful Dr. Marina Bers and we had a short chat about it today. The short version on why CT is a bad concept, in my opinion, is that it describes too broad a set of skills and ideas to be useful to anyone. You can teach programming, algorithmic thinking, computation modeling, proof, etc. but the idea that you can teach a student something that will improve their skills across all of these things seems wrong to me.

I am working with Dr. Trevion Henderson to develop my CS1 curriculum within a course at Tufts called ES2! It has already been a spectacular experience to work with him and to watch someone teach my curriculum. The best part has been watching and listening to students while someone else stands at the front of the room. I have already learned a lot doing it as well. I’ll post more about it when appropriate.

This is going to be a very busy semester but I am very hopeful that I will have the time and energy to update this blog a bit more regularly. A belated happy new year to all!

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.