slice of life content in undergrad PL
Post Metadata
Hi! My name is Matt (he/him), one of the new teaching faculty at the Allen School this fall. I’ve been given a warm welcome by the community at UW, including at PLSE – where I’ve already met some wonderful people who do all things software engineering, programming languages, and running!
Rather than a typical research blog post, I’ll instead touch on my experience teaching programming languages (PL). I’ll later be giving a talk at UCLA (my alma mater) on some of my work in the complete refresh of their undergraduate programming languages class (CS 131). The talk (and this post) is broadly aimed at engineering educators: while some familiarity with broad PL concepts is helpful, it’s certainly not necessary.
In this post, I’ll touch on what I call “slice of life” content: micro-modules on people and languages of the week. They offer light-touch ways for students to learn about the history of PL, gain conversational familiarity with topics not covered in traditional undergraduate classes, and plant seeds for conversations on societal impact, diversity, and inclusion. I think this strategy is broadly applicable to any undergraduate PL class, and potentially, to any computing class!
people of the week
Both the person of the week and the language of the week are micro-modules: I collectively spend about 10 minutes total (in a 2-hour section) on them per week. They’re meant to be low-lift and fun!
But, I was very intentional with how I picked both the people and languages of the week. In both cases, I took special care to relate them to what the students were learning that week.
Let’s start with people. I saw this as an opportunity to do a handful of things:
- talk a bit about foundational PL history
- introduce some novel PL topics that are not a part of core course curriculum
- challenge students’ notions of who can be a “programming languages person”
I really want to hone in on that last idea. A common critique of integrating diversity or societal impact content throughout computer science curricula is the “shoehorning-in” of content. I frequently hear this about PL as a field – but, I disagree! There are always humans in the loop – from language designers to end users – and their stories reflect issues in society. Beyond that, there are active choices that language designers (and communities) make that directly impact who is included.
In particular, “person of the week” gave me an opportunity to spotlight women in programming languages – who are often underrepresented in the typical “history of languages” stories. I had a chance to talk about both foundational heroes, like Grace Hopper, Frances Allen, or Sophie Wilson, and some of the great research happening now in PL from folks like Sarah Chasins or UW PLSE’s very own Eunice Jun!
Sophie Wilson is a stellar person to showcase for so many reasons. For one, there are so many interesting pieces of little trivia embedded in her story: I haven’t met a student who knew that the BBC used to make computers! The history of RISC processors (and ARM’s now-dominant position) is often absent from many x86-dominated computer organization and architecture classes. And, the photo shown in the slide (of the first ARM processor compared to an equivalently powerful, 100x smaller version) always blows my mind! Beyond that, her story as a trans pioneer in computing is an important one to tell. When developing these slides, the majority of my peers couldn’t name any trans computer scientists, let alone pioneers in the field. As an educator, I believe I have a responsibility to correct the record – particularly as trans rights are being attacked across the globe.
I spotlighted Eunice after seeing her wonderful (and immaculately designed!) job talk at UCLA. Her work on Tea is a stellar conversation starter (along with just being so cool). Are all (or even most) users of programming languages computer scientists or software engineers? What does it mean to design software for non-experts (in statistics or something else)? What is PL + Human-Computer Interaction (HCI), what is a Domain Specific Language (DSL), and what does this mean for interdisciplinary PL work?
It also gave students a glance at what current PL research could look like – and that it wasn’t all monads or higher-kinded types or equality saturation. This is particularly valuable in broadening the spectrum on who can do PL research, and who PL research affects.
Initially, I was worried about how well this material would be received – it wasn’t tested content, and I’ve had mixed success with societal impact content in the past. But, these iterations of people of the week were super well received! Several students cited it as their favorite part of section. Students overwhelmingly voted to continue them in my mid-quarter feedback forms. And, I had several students tell me how it changed their perception of PL as a field: one student told me that she didn’t “see herself as a PL person until learning about Professor Chasins and Eunice,” and could “see herself as Ellie.”
languages of the week
I took a similar approach to “language of the week”. In a short presentation, there’s no possibility of students truly learning the language; instead, my focus was to give them some idea that there’s more in the world beyond C++, Java, and Python! I was able to link most languages to what they were learning in class (e.g. memory safety and undefined behavior naturally led to a discussion about Rust). It also allowed me to discuss language design decisions that affect inclusion, such as Ruby’s early support for Unicode in variable identifiers.
As you might expect, one of the biggest outcomes of this work is to answer the question, “Why do people make new programming languages?”. Beyond that, the biggest benefit was giving students a place to start fascinating deep dives into rabbit holes. Anecdotally, I found that most students resonated with the problem statement of at least one language. This led to some of my fondest memories of class: students coming to my office hours to show me their tinkering with the language of the week and interrogating me for more information!
Go was particularly fun: we had the absolute pleasure of having Robert Griesemer as a guest speaker in our class. Our intro sequence is taught in C++, which provided a great backdrop for the motivations behind Go and started some stellar conversations! The ability to continue that in the small group setting of discussion section – and tie it to principles in undergraduate PL – was the cherry on top.
If you’re curious, you can browse my archive of people & person of the week slides.
more people, languages, and weeks
I only had one year to iterate on this idea; I have so much more I want to do!
For people of the week, I’d like to have:
- better undergraduate-accessible explanations of people’s research (particularly for PL theory, type systems, and verification)
- more diversity: I have limited knowledge of non-American/European researchers in PL and early work in PL theory, among other blind spots
- more people who are not academic PL researchers (Alexis King, for example is on my shortlist – but I don’t know enough about her to do the topic justice!)
Similarly, many concepts and languages of the week never materialized; I’d like:
- to introduce Quorum!
- a better explanation of dependent types (mine was the classic “arrays of length N”, but it wasn’t great)
- some discussion of reflection within a language (this was going to be my Ruby example, but I pivoted last minute)
- a good simple demo for a proof assistant/automated theorem prover (I never really talk about Coq, Lean, etc.)
And of course, this content certainly isn’t perfect (and I’m sure there are errors)! It also doesn’t replace true integration of diversity, societal impact, or justice-oriented content in a course – which is certainly necessary in CS curricula. Nevertheless, the positive reception was encouraging, and I’m planning on continuing this style of light-touch slice of life content – particularly in upper-division classes.
thanks and acknowledgements
While most of this work is my own, I had the pleasure of working with many others to make this new CS 131 a reality! It was a pleasure to teach under Carey Nachenberg and Paul Eggert, who brought stellar unique perspectives to teaching PL. Thanks as well to Ashwin, Boyan, Siddarth, and Ruining for bearing with all of my work as co-TAs. And thanks to Arjun, Kendrake, and Sharvani for inspiring many of these innovations – Kendrake’s work with Jean Ryoo (SIGCSE ‘23) was a big motivator for me.
Of course, I have to thank the many people that I’ve featured – whether it be as the person of the week, or by writing the resources that helped me develop this content. And, special shoutout to Eunice, who did end up joining UCLA!
Finally, thank you for reading this on the new PLSE blog! If you have any thoughts or suggestions – I’d love to hear them!