On Thursday, February 24, the Department of Computer Science (CS) announced that it will retire its three introductory sequences: the CS 120s, CS 150s, and CS 160s. These sequences will be replaced by the CS 140s, a single four-course sequence. The decision came after a series of meetings among the computer science faculty last year.
The department will launch the 140s sequence in autumn 2022. The department will immediately retire the 120s and 160s sequences at the end of the 2021–22 academic year but will continue to offer CMSC 15200 in autumn 2022 and CMSC 15400 in both autumn 2022 and winter 2023 to allow students in the middle of the 150s sequence to complete it. The 150s sequence consists of three courses total: CS 151, 152, and 154. Additionally, CMSC 15100 will be offered during the summer 2022 term as previously planned.
The current CS 151 course is structured around functional programming, which is a way of structuring code as a composition of functions to be executed. Imperative programming, on the other hand, requires the programmer to specify steps that the computer must take to accomplish its goal. Though useful for data analysis and machine learning, functional programming is typically used less by software engineers.
The computer science department emphasized that the new sequence would focus on imperative programming and only briefly cover functional programming in CMSC 14200.
The new sequence will begin with applications programming in Python and then transition into systems programming in C. Both Python and C are built around imperative programming. The 150s will no longer teach the language Typed Racket, a functional programming language.
Associate professor and Director of Undergraduate Studies in computer science Anne Rogers said there are “strong, valid arguments” for starting with each type of programming language. However, according to Rogers, the gap between python and C is smaller than the gap between languages like Racket and C.
“Part of what we’re trying to accomplish is to have students develop fluency, and it really is fluency in the same sense as fluency in a foreign language,” Rogers said. She explained that the smaller gap between Python and C would help students achieve a greater level of fluency in programming languages.
“There are lots of reasons [Python] is a good starting place,” Rogers said. “It has a low barrier to entry, so you can write a Python program that’s just a few lines long, and you can understand every word in the program.”
Rogers also noted the prevalence of labs across campus that look for students who have experience with Python. She thus sees the new curriculum as a way to open up these research opportunities for students.
“People come here to learn about ideas. Part of the goal [of the new sequence] was to give people more fluency, and by having more fluency, that makes the ideas in their upper-level classes more accessible,” Rogers said.
The announcement also discussed the decision to structure the 140s around four courses. “Expanding to four quarters will also allow us to devote more time to existing topics, especially data structures and concurrency, and will give students more time to become proficient programmers before diving into advanced material,” Rogers said.
Rogers noted that the department decided to expand the introductory sequence to four quarters instead of three in light of the shortened academic quarters, which were reduced from 9.5 weeks to nine weeks in 2020.
“The combination of already packed classes and having lost time…meant that we were struggling to get the material in,” Rogers said.
First-year and prospective computer science major Alexander Eckinger felt that the workload, specifically projects and exams, for CMSC 151 was difficult.
“Now actually, the beginning of the course, I thought, in terms of workload, wasn’t too bad,” Eckinger said. “But near the end of the quarter, things got really busy…. I know multiple people who dropped out of the class because of [the workload]…. As an intro CS class, it’s pretty hard.”
Despite the difficulty of the work, Eckinger noted that he still enjoyed the course.
“In terms of the curriculum, I really enjoy functional programming,” said Eckinger. “I like the computer science aspect of it. I would rather take a class in functional programming for an intro class than, say, Python.”
The department emphasized that academic programs requiring students to complete one of the current introductory courses are aware of the shift and are already working to adjust their major or minor requirements. The department also plans to offer two placement exams for students with prior experience in coding. These will be offered in multiple programming languages.
“Computer science is a fast-changing field,” said Rogers. “In five years, the faculty should have this discussion again. It was a mistake to go for so long without a really careful rethinking of what we were doing. In a field that changes so quickly, it can’t be that this conversation doesn’t [happen] for more than a decade.”