This semester, CSCI 0200: “Program Design with Data Structures and Algorithms” was introduced as the new final course in the Department of Computer Science's undergraduate introductory sequence.
In previous years, students could choose between two alternate courses — CSCI 0160: “Introduction to Algorithms and Data Structures” and CSCI 0180: “Computer Science: An Integrated Introduction” — to fulfill the latter half of the concentration’s introductory sequence. CSCI 0200, which is taught by Professor of Computer Science Research Kathi Fisler and Lecturer in Computer Science Milda Zizyte, effectively merged these two options.
Creating CSCI 0200: The initial inspiration
According to Fisler, the rationale for implementing CSCI 0200 was twofold.
Around three years ago, the computer science department “noticed the similarities (between CSCI 0160 and CSCI 0180) and started … working together on changes,” Fisler said.
In recent years, content between the introductory courses was growing increasingly similar, and both classes required “similar modernization” to ensure all students had knowledge of data structures, socially responsible computing and software development practice, Fisler said.
“There were certain things that all students needed to see,” she added, “but neither of the courses were really doing … justice (to that).”
Professor of Computer Science Andy van Dam added that another issue with the department’s original introductory sequence was that CSCI 0160 and CSCI 0180 were only offered once a year, “traditionally … (during the) second semester.”
Fisler said this structure created a “bottleneck effect” in which students could be left behind if they were unable to take CSCI 0160 and CSCI 0180 in the spring.
Van Dam noted that the department did not have enough faculty to teach CSCI 0160 and CSCI 0180 both semesters. By consolidating the courses into one, van Dam said CSCI 0200 could be offered every semester.
Course content and structure
According to Fisler, CSCI 0200 utilizes both Java and Python, teaching object-oriented and functional programming skills.
We “started the course by pointing out that there are … two trains of thought that emerged in the 1960s,” Fisler said. One used computers to mimic decision-making which led to the rise of functional programming, and the other simulated real physical systems which led to the rise of object-oriented programming, she added.
“Real systems need both,” Fisler said. “You both need to model knowledge and … simulate practices and computations.”
The hope is that students leaving CSCI 0200 will be “multicultural, multilingual, multidisciplinary … and comfortable using the right tool for the right job,” van Dam said.
Students enter CSCI 0200 from a range of introductory class backgrounds. Some have taken CSCI 0150: “Introduction to Object-Oriented Programming and Computer Science,” which is rooted in object-oriented programming, while others have taken CSCI 0111: “Computing Foundations: Data,” CSCI 0112: “Computing Foundations: Program Organization” or CSCI 0170: “Computer Science: An Integrated Introduction,” which include more functional programming.
To accommodate for these differences in experience, the first two weeks of the class are split into two parallel tracks, according to Zizyte.
“I think it was beneficial to do (the two tracks) just because the students are coming from such different backgrounds (and) there were different things that we wanted to catch them up on,” Zizyte said.
Some students in CSCI 0200 said the first two weeks felt overwhelming but noted that the staff have been incredibly supportive and flexible.
“I definitely learned a lot, but it felt rushed because they had to try to fit a bunch of material from the opposite introductory track into just a … few lectures,” said Karma Selsey ’24.
“Shifting back and forth between programming languages … so early on in the semester is definitely a bit confusing and (can sometimes) take away from truly being able to learn the programming concepts because we spend so much time just trying to get comfortable with the syntax,” Nadya Tan ’24.5 said.
Still, Tan said that professors have been “accommodating” with unforeseen challenges that arise due to the difficulty of the assignments and logistics of the course. “The professors (are) really trying their best … and accommodating for the fact that it's a new course and there are a lot of bumps in the road,” Tan said.
In addition to oversight from the professors, the class has been assisted by “a huge army of TAs,” said Isha Ponugoti ’24. CSCI 0200 currently has 468 students enrolled, according to Courses@Brown. There are 63 TA staff, according to Annie Cimack ’23, a Head TA for CSCI 0200.
“Because the CS department keeps (an) eight-to-one TA-to-student ratio, … you also have a huge TA population,” Zizyte said. “And our TAs are phenomenal.”
In order to accommodate different backgrounds, the TAs learn the content from both parallel tracks for each side over winter break. “We’d like the TAs to be able to answer questions from any student coming in … and be as accommodating as possible,” Cimack said.
“On the whole, we've been happy with how it’s going,” Fisler said. We're certainly learning things … We’ve been adjusting as we go, which is what you do on a new course: just stay flexible.”