Commonwealth School teachers bring an infectious intellectual energy to their classrooms, fueled, in part, by their own innate curiosity. What happens when that curiosity is unleashed? The Hughes/Wharton Fund for Teachers aims to do just that. Named after the late John Hughes, who taught English at Commonwealth for nearly thirty years, and after recently retired Head of School Bill Wharton, who founded the original Hughes fund in 2011 and championed faculty scholarship throughout his tenure, the Hughes/Wharton Fund ensures faculty can pursue their academic passions, access fulfilling professional development opportunities, and have the latitude to create new courses and reinvigorate existing ones.
Drawing on both her time in Silicon Valley and work as a mathematician, Meena Boppana set out to make the theoretical practical in Commonwealth’s third-year computer science course by introducing more industry-standard programming languages earlier in the academic year while helping students understand the more esoteric aspects of Web development, like sorting algorithms, topological sort, binary search trees, and dynamic programming.
I began my Hughes/Wharton project with a goal to illuminate the theoretical underpinnings in Commonwealth’s Computer Science (CS) 3 course with programming assignments. I knew that students would be eager to see their knowledge applied and benefit from this motivation. I focused my efforts on the second half of the course, covering algorithms and data structures. I surveyed the curriculum and picked out a handful of topics which lend themselves to implementation: sorting algorithms, topological sort, binary search trees, and dynamic programming.
Before jumping in, I surveyed the CS3 course more broadly using the materials passed on to me by my fellow CS teacher Matt Singer. In previous iterations of the course, the year concluded with the algorithms and data structures unit; I wanted to emphasize this important topic as well as create more time for students to complete the programming assignments. To make room, I cut selected topics from the first half of the course on the theory of computation (cutting context-free grammars in the Sipser text), with the goal of reaching algorithms and data structures earlier in the year (during the third quarter).
Computer Science 3 is still a theoretical course, and any programming is largely in service of greater algorithmic understanding. In programming a binary search tree, students must understand it at a level so granular that they deeply know it.
My next step was to choose a programming language for student use in CS3. Previously, students were allowed to choose from a number of languages for any programming required, including Racket and Java, which they had used in CS1 and CS2. However, with a renewed emphasis on programming assignments, I decided that introducing a new language, Python, would be best. Due to its lightweight structure, Python is often used for writing short programs (“scripts”) and is most commonly employed in algorithm programming interviews in the tech industry. Students will benefit from knowledge of Python programming outside of the confines of the course.
The first assignment on sorting algorithms serves as an introduction to Python and programming in CS3. Since students have already seen sorting algorithms in CS1, it will be somewhat familiar as students pick up a new language. I plan to spend relatively little class time introducing Python, expecting students to use their programming skills from CS1 and CS2 to search and read documentation on their own. However, the assignment includes detailed instructions on Python installation.
The second assignment on topological sort introduces students to a more complex algorithm in addition to object-oriented programming in Python. Due to its complexity, students are given helper code so that they are responsible for implementing some but not all of the topological sort procedure. Writing this helper code was my main focus as I designed the assignment.
The final assignments on binary search trees and dynamic programming include less “helper code” scaffolding. For these assignments, the desired output is given but the actual functions are blank. Students are expected to build fluency and comfort with Python and with algorithms over the course of the second semester.
Ultimately, Computer Science 3 is still a theoretical course, and any programming is largely in service of greater algorithmic understanding. In programming a binary search tree, students must understand it at a level so granular that they deeply know it. My hope is that the theory aids the practice and vica versa.