slice of life content in undergrad PL

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:

  1. talk a bit about foundational PL history
  2. introduce some novel PL topics that are not a part of core course curriculum
  3. 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!

A slide describing Sophie Wilson. She is a Prolific architecture / assembly language designer; helped create BBC Micro / Basic at Acorn (making one of the first assembly macro systems!); Designed the ARM RISC! (used in 95% of smartphones, M1 macs, most embedded systems; ARM stands for: Acorn RISC Machine);
Transitioned in 1994 🏳️‍⚧️. A photo of Sophie is pictured, with the first ARM processor (the size of a large poster board - about 4 sqft), and an equivalently-powerful processor now (smaller than a fingernail).

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.

A slide with the heading "Eunice Jun", with some bullet point bio items (PhD student at the University of Washington (grad 2023); PL research: PL tools for "reliable" statistical analysis; broader mission: "To empower more people and organizations to understand and act on data."; from LA!) and some "why Eunice" questions (some of her work is on extending Python!; some of her work is making Domain Specific Languages (DSLs); she’s on the job market & we should hire her :)) ). A photo of her smiling against a wall is shown.

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?

A slide with the caption "Tea (statistical testing for non-experts). Core idea: focus on study design, assumptions, hypothesis; automate and abstract away test picking and validity!". Accompanying the slide is a diagram that shows the source code of a Tea program (a Python DSL) being "compiled" into a set of statistical tests that are automatically chosen based on the user parameters.

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.

A slide captioned "first-class unicode support in Ruby!". It shows a few cases of Japanese characters being used as strings and identifiers in the language.
In particular, it runs the lines:
irb(main):001:0> matz = "まつもとゆきひろ"
=> "まつもとゆきひろ"
irb(main):002:0> 最高の = matz
=> "まつもとゆきひろ"
irb(main):003:0> 最高の + 最高の
=> "まつもとゆきひろまつもとゆきひろ"

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! 

a slide on the programming language Go, with the subtitle "We hated C++ so much, we made a new language". It emphasizes the points "made by a team at Google because they really, really, really hated C++", "first-class primitives for parallelism", and "simple enough to hold in your head". It mentions why Go was picked: "we’ve learned about weird C++ behavior!", "we met Robert Griesemer!!", and that it's "super related to many course concepts: GC, first-class functions, concurrency, …".

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!