Since I started graduate school in 1997, I have considered myself a member of the programming languages research community — and I continue to attend and publish in the annual conferences of this vibrant computing subfield. But over the last 5-10 years, I have also found myself increasingly passionate about opportunities for computing researchers to focus on ways to influence computing education beyond, for those of us who are academics, our own classrooms and independent studies. Let me share some of the projects I have enjoyed (seriously!) and others I wish I had more time to pursue.
First, several years ago I led my department’s first multicourse curriculum revision in many years. It is a fascinating engineering exercise to design a set of courses together. In our case, we did not change our introductory programming courses nor our senior-year electives, but we completely revamped and modernized everything in between them. Each step of this multiyear process, from the first meeting to last course rollout, can be described in computing terms: There was iterative top-down design, logical dependencies, cost tradeoffs, and more. Since having students “reboot” halfway through a degree program is not an option, there was also the complexity of “hot swapping” the system in a consistent way without dropping any packets (err, students).
Second, I was proud to serve on the steering committee for the ACM/IEEE Computer Society 2013 Computer Science Curriculum Guidelines for undergraduate degree programs in computer science. The roughly once-a-decade effort to update curriculum guidelines goes back to 1968, so the evolution of the guidelines is interesting in and of itself. Moreover, trying to make something that will be “at least mostly valuable” 10 years into the future requires a subtle mix of conjecture and conservatism. It is also challenging to write descriptions that make sense in a variety of cultural and institutional contexts, as well as to write sections (in my case, programming languages) in a way that both experts and non-experts can gain value from them. Finally, these efforts are deeply collaborative, requiring consensus from dozens of helpful volunteers and processing hundreds of public comments. While surely such a process is not for everyone, it is an interesting complement to my usual work of building a research prototype with a handful of colleagues.
Third, when Massive Open Online Courses (MOOCs) went viral in fall 2011, I sat somewhat jealously on the sidelines for the first several months before jumping in the following summer, offering my own MOOC in programming languages, starting in January 2013. I also subsequently mentored colleagues on their own MOOC creations, and helped my university navigate the changing landscape of online education.
Creating and maintaining a MOOC was far more work than I had expected, but it is also immensely satisfying. As an author and instructor, I have consistently viewed it as a modern analogue of a textbook combined with multimedia and a social and interactive component. It is safe to say the impact of the MOOC has exceeded that of most of my research–and that the perspective I gained from my research community is infused throughout the course I have shared with the world.
Finally, last summer, in addition to my other CRA board roles, I joined the CRA Education committee (CRA-E). CRA-E is tasked with “addressing society’s need for a continuous supply of talented and well-educated computing researchers,” which operationally means working to ensure research opportunities are widely available, both while students are undergraduates and by encouraging young researchers to pursue graduate school.
Toward that end, please be sure to provide nominations for the awards that CRA-E administers, take advantage of the resources that CRA-E provides, and let us know if you have suggestions for helping generate future generations of computing researchers.
Alas, there are never enough hours in the day, or days in the week, so there are important computing education questions to which I have not yet seen satisfying answers. I hope my fellow computing researchers will help answer them.
Here are some examples:
- What are best practices for a minor in computer science?
- If vibrant efforts to get computer science to become a standard part of American high schools succeed over the next decade, how should universities adjust?
- As the field of computing research continues to expand, with applications to all of society’s most pressing challenges, how should computing education adapt?
- Even as we work urgently to better scale undergraduate computing education, is training in computing research inherently less scalable?
- Can we make curriculum-evolution more agile, or will rare Herculean revamps remain necessary?
About the Author
Dan Grossman is a professor in the Department of Computer Science & Engineering at the University of Washington where he has been a faculty member since 2003. Grossman holds the J. Ray Bowen Professorship for Innovation in Engineering Education, and is his department’s associate chair for education.
Grossman completed his Ph.D. at Cornell University and his undergraduate studies at Rice University. His research interests lie in the area of programming languages, ranging from theory to design to implementation. In recent years, Grossman has focused on better techniques for expressing, analyzing, and executing multithreaded programs. He has collaborated actively with researchers in several other disciplines of computer science, particularly computer architecture on problems at the interface between hardware and software including approximate programming.
Grossman has served on roughly 30 conference and workshop program committees and will serve as Program Chair for PLDI 2018. He currently serves on the CRA Board, the ACM Education Board, and is the instructor for a popular MOOC on undergraduate topics in programming languages and functional programming.