So I taught functional programming to >200 students...

Second-time instructor reflects on her spring co-teaching OCaml, advanced data structures, and intro PL concepts.
June 02, 2026

This past spring semester (Spring 2026), I co-taught Cornell's Data Structures and Functional Programming class with Professor Dexter Kozen. This post is to reflect on my experiences this past semester and give readers a taste of how teaching a Cornell class during the semester may go!

Plug: You can read the previous entry on my "teaching experiences" blog series here.

Note: Much like the previous teaching blog post, this post is more of a summary of thoughts and takeaways than a chronological recalling of events.

Precursors

Why did I decide to teach CS3110 this semester?

I'm interested in a CS teaching-focused career because I love helping people understand and learn. Two summers ago, I taught a six-week course on CS2110, Cornell's intro data structures and Java class, to a class of 10 students and had a great time. The class size of this summer course reflected one extreme: a small, seminar-size class. I also went to a small liberal arts college (total 1.6K undergraduates), so most of my classes were <= 40 students. Now that I'm at Cornell, a significantly larger school (total 16K undergraduates, a 10x increase!), I wanted to experience the large lecture-style class.

I also wanted to get a close teaching mentorship experience, so I can learn how to effectively teach and manage such a large class. Co-instructing a class with a faculty member meant that I could hear their opinions on course, assignment, and exam design on a daily basis, and get feedback from someone who is equally invested in the course as I am.

What is CS3110?

CS3110 is Cornell's class on functional programming in OCaml and data structures. It's a required course, and enrollment can be anywhere between 200~400 students. Our iteration of the class ended with 217 students.

Previously students have learned how to program in Python and Java, so a good fraction of the course is focused on introducing OCaml and the functional paradigm. Our midterm exam (partially because it happened earlier in the semester) was solely on OCaml concepts. The class also discusses data structures with more nuance than CS2110, and introduces concepts in programming languages such as small & big step evaluation semantics, type checking & inference, verification, and the interpreter architecture. In our iteration of the class, we had an assignment on building a Scheme interpreter. There is also a course project where students work in groups to develop some large-scale software.

The Teaching Experience

What is lecturing like?

Lecturing to a large audience was very daunting at first! One of the things that suprised me was that our class has held in Bailey Hall, Cornell's largest auditorium. A place that I'd previously thought of as a special place to attend concerts and performances became my workplace. There were a couple of specific difficulties to Bailey: there was no chalkboard to sketch things on when something spontaneous came up; the room was very echo-y since it was designed for concerts rather than lectures, so any amount of other noise was distracting; there was a big microphone picking up my voice. It also turned out to be a lovely location: we had a strong AV support team that we could ask for assistance whenever the setup went badly, and since it was a concert hall we got to perform some music to the students a couple of times :)

At some point, I realized that I still was able to get up there and talk despite the grandness of Bailey Hall, and at some point I had gotten used to it. Even then, there were adjustments. I had to figure out a good microphone volume because my voice is pretty loud by itself, so the amplified volume was too loud (sorry to everyone who I gave ear damage to!).

A particular challenge was figuring out the level of student engagement and understanding, and getting students to be involved during lecture. There were a lot of students, a lot of space, so it makes sense that students would be shy to ask questions or raise their hands for polls. I now understand why polling tools such as iClickers and PollEverywhere are a decently effective way to do active learning at this enormous scale. The bar for participating in them is a lot lower, and they allow you to keep track of the questions that students especially struggled with.

What is the rest of the job like?

Before starting this job, I was told that lecturing is actually only a small part, but course administration was the main beast. I soon realized how true this was. A class like this has so many moving parts: labs for discussion sections, staff meetings, assignments, organizing assignment and exam grading sessions, making rubrics for any new assignments, course project, exams, etc. It felt overwhelming at first, but I needed to simply ride it out and rely on structure when I could. Looking back, I realize that delegation was very much key to alleviate the overwhelming feeling, and there were smaller tasks that I could have asked a TA to help me with.

What was it like co-teaching?

My co-instructor Dexter was a wonderful person to work with because he had a lot of experience, was able to give good feedback, but also very patient and willing to hear my opinions. Dexter walked me through the processes of building a new assignment, building an exam, and calculating grades, all of which I didn't have much learning opportunities in. He also generously came to every lecture that I taught, and gave me feedback on my teaching. (It also worked out in my favor that Dexter was a Professor Emeritus, because he had a lot more time to dedicate to the class than the average Cornell professor.)

My favorite part of this CS3110 experience was getting to learn so much from Dexter, whether it be about teaching the class, PL concepts that I was rusty on, the history of computer science, or even about music :)

How was the time commitment?

Technically, teaching any class for the first time is more than a full time job. Last time, I taught multiple hours five days a week, for six weeks, so I truly did not have any time to do much else (I didn't do any research, and I barely had time to do any social activities).

This time, I was teaching 0-3 times a week for 50 minutes over a five month period. Even with how busy the class was, I was still able to do some non-negligible research work. I was on an artifact review committee, I reworked a paper for resubmission, I attended a conference, I went through multiple rounds of a fellowship application, and I also still held weekly meetings with an undergraduate researcher. That being said, my involvement in the class was definitely lower during the weeks when I was actively working on other research, and I did feel especially overwhelmed. So, if you really need to do other research work, it's doable, but I wouldn't recommend it in general.

During my teaching period I also got to keep attending my weekly extracurriculars (orchestra, playing in an USTA tennis mixed doubles league), and reserve some time for social activities with friends. I'd recommend for the sake of sanity to keep your extracurriculars, as they kept me happy!

Takeaways

For better or for worse, I think my experience and takeaways were more nuanced this time than the previous time.

What did I learn this time?

As mentioned numerous times, managing a large class is in itself a very tough job! There is an unbelievable amount of logistics to handle, and anything can happen. It's very normal for things to not be perfect and instead be a bit messy, especially for the first time one teaches a class. New assignments will have typos, grading will have errors, sometimes you could stutter and say the wrong thing during lecture. I was not perfect, and noone will ever be, and that is ok. The important thing is that these errors get fixed and we learn from them.

Additionally, teaching and managing a class is all about choices, since there is no "universal best way to teach a class". From attendance to exam structure, there are so many choices that the instructor(s) can be flexible on making.

I'll additionally say that the daily course prep is more challenging when you also have to (re-)learn the material yourself. There were days when I had to teach on a material that I have literally never learned before. There was an extra layer of time needed to learn the material. I would say both my worst and best lectures came from a material that I was learning on the fly.

It is absolutely essential to take things one day at a time.

Reflections on CS3110 as a class

CS3110 is an interesting class, especially in contrast with CS2110. To me, 2110 felt like "(object-oriented programming) and DATA STRUCTURES" whereas 3110 feels like "(data structures) and FUNCTIONAL PROGRAMMING". Of course, part of this is intentional, as we intentially emphasized the OCaml and PL parts of the class more.

It was interesting to see what parts of the curriculum students tended to struggle with. In the midterm, it seemed like students over-studied for how to program, rather than OCaml's foundations (evaluation, hand-calculating type inference, etc). When we introduced mutability, students struggled to reason between persistent and ephemeral language features and data structures, which was more expected. Promises was a difficult concept, but it was also a difficult concept to teach (and teaching it the morning after a paper deadline was surely one of the worst decisions I made this semester).

Overall, I appreciate CS3110 as a class. I loved getting to interact with functional programming again, and teach this very elegant but confusing programming paradigm to students. As much as functional languages are not as widely used as Python or C++, I appreciate that all CS majors in Cornell get a chance to learn them, and get a flash of the world of PL so early in their college career.

What I'd like to do next time, if there is such a next time

There are so, so many things I feel like I would do better if I had the chance to teach this class again. Here's a short list of what I would do:

  • I would have a better idea of the concepts in the class and how they are taught, so I'd rework the slides and presentation more.
  • I WOULD SLEEP MORE. I was constantly sleep deprived.
  • I'd like to be more involved with the TAs, and delegate more tasks to them.
  • I'd also like to be a little bit more involved with the students, and make more active learning happen.
  • I'd like to introduce smaller evaluations to figure out earlier where students are struggling.

Special Thanks

TK