When it comes to schools with the best computer science programs, the University of Chicago is not among the first universities that come to mind. Indeed, UChicago ranks 28th in the nation for computer science. While not terrible, a ranking this low in a popular and highly employable major is hardly impressive for a university that costs more than four times as much as several universities ranked above it, such as the University of Texas at Austin and the University of California, Berkeley, which have in-state tuitions of about $40,000 and $44,000 respectively.
The issue begins with UChicago’s current undergraduate curriculum: It favors a more theoretical approach but fails to complement theory with more applicable, real-world material. Although theory is a critical component of computer science and allows a distinction to be made between true computer scientists and simple “programmers,” UChicago’s computer science department does not prioritize equipping students with marketable skills in the short run. Developing skills in relevant programming languages and widely-used software tools should be just as prioritized as theoretical knowledge. While the computer science department’s recent decision to restructure its introductory course sequence will enable it to provide more instructions on programming languages, it should continually revise its curriculum to include the most relevant software tools being used at the time.
To understand how little emphasis UChicago places on programming skills, one only needs to look at the current introductory sequence––in particular, the introductory course. CS 151 focuses on key concepts but does little to develop a student’s programming and software skills. Although the course does provide a satisfactory overview of the field by covering programming basics, data structures, lists, graphs, trees, and other foundational topics, these subjects are taught through various programming projects in Racket, a functional programming language that is not widely used in the real world. Upon completion of the course, a student might master the concepts but will have no experience with useful programming languages meant for most research or career settings.
While using a language like Racket for an introductory course has some benefits, it has greater drawbacks. Most incoming students with programming backgrounds do not have previous experience with the language, as it is more typical for languages such as Python or Java to be taught in high schools. Thus, Racket creates a level playing field by ensuring that not many individuals have the advantage of extensive practice with the language. It also introduces students to functional programming, which is useful in certain areas of computer science such as machine learning. The benefits of Racket, however, end here. Subsequent courses for the major never use Racket again, and the language’s syntax does not relate to any other languages used in the remainder of the introductory sequence. As fellow columnist Tejas Narayan pointed out, the course further deters students who struggle with the language from majoring in computer science. Amid such drawbacks, Racket’s benefits are not enough to justify using the language in the first computer science course.
Universities with more highly respected computer science programs introduce programming concepts alongside theory in their introductory computer science courses. The Massachusetts Institute of Technology, the number one school in computer science, starts its computer science curriculum with a course in Python programming. The University of California, San Diego (UCSD), also teaches Python in its introductory course. The first course in the University of Illinois Urbana-Champaign’s computer science major program teaches students about Java’s features and libraries and explains fundamental programming concepts such as object-oriented programming, encapsulation, and abstraction. These universities, all ranking much higher than UChicago in terms of their computer science programs, teach theoretical computer science and useful programming skills.
What is considered a “relevant” programming or software tool will inevitably change over time, and UChicago’s computer science curriculum should adjust accordingly. Computer science, more dynamic than other STEM fields, continues to expand in its breadth of content. While its theoretical foundations remain relatively immutable, new tools are constantly being developed for use in real-world applications. Researchers at Queen’s University Belfast argue that computer science curricula should instill “both the theoretical foundations…and also the latest industrial needs and trends” to address skill deficiencies of computer scientists at the beginning of their careers. The new set of introductory computer science courses will move toward this recommendation by incorporating theoretical components, such as algorithms and data structures, with programming knowledge in Python, which is now one of the most highly sought-after skills by employers. Nevertheless, UChicago’s CS department should continually alter its curriculum to teach students the most applicable and up-to-date software development tools. This may mean further updating the introductory courses to include instruction on new libraries and tools in Python or new programming languages altogether, depending on what is relevant at the time. Teaching students such material will successfully prepare them for their entrance into the professional world and ensure they do not begin with knowledge gaps.
Restructuring the introductory sequence is long overdue, but it should not be the last change to the curriculum. The CS department should equip students with marketable skills by continuing to adapt to the dynamic trends of widely used software. These skills will eventually open the door to new opportunities that will reinforce the theoretical foundations emphasized here at the University of Chicago.
Luke Contreras is a second-year in the College.