Carnegie Mellon Revamps Courses
For Introductory Computer Science

New Curriculum Emphasizes Parallel Computation, Software Reliability

PITTSBURGH—Carnegie Mellon University’s School of Computer Science is implementing a major revision of its introductory computer science curriculum. The new courses reflect a more rigorous approach to developing reliable software and a greater emphasis on parallel computation — routinely breaking problems into parts that can be solved simultaneously by multiple processors to increase speed.

The changes also incorporate concepts of computational thinking — the idea that computer scientists have developed unique ways of formulating and solving problems. This way of thinking can inform other disciplines, such as math, science, engineering, business and the arts.

“Computation’s central and growing role in science, the arts and commerce — virtually every aspect of modern life — requires that the next generation of computer scientists be better prepared than ever,” said Randal E. Bryant, dean of the School of Computer Science. “We believe the changes we are making to our introductory curriculum will shape computer science education and practice for many years to come.”

Three of the new courses were introduced at the freshman level this academic year, with a sophomore-level course slated to begin in the fall. One notable change was to supplant the use of the popular Java programming language in first-level programming courses.

“We certainly haven’t stopped teaching or using Java, which was developed by one of our alumni, James Gosling, and is widely used by software developers,” Bryant said. “But we believe other programming languages do a better job of helping beginning students understand the principles underlying this science.”

Java supports object-oriented programming, an approach to building software that helps to keep large programs from crashing in unexpected ways. But writing even simple programs in Java requires a lot of work for a beginner. Also, its use of “objects,” which combine data and the methods necessary for accessing and managing that data, can obscure how some tasks are accomplished.

“Objects are another layer of abstraction,” said Frank Pfenning, a professor of computer science who developed one of the new courses, Principles of Imperative Computing. “It was important for us to remove that layer so students really see what’s happening in the code.”

Students in that class use a subset of the C programming language and learn to annotate, or write “contracts,” for each step in their programs. Pfenning said annotating code is not a new idea, but it is now being taught at the freshman level because it enables students to quickly find bugs in their programs.

“When we talk with our alumni who have been out in industry for awhile, they tell us this is something students need to know,” he said. “Of the 60 million lines of code in Microsoft Windows, three million are annotations. This is becoming industrial practice.”

Mathematical specifications that can verify the correctness of a program likewise are the basis of the new Principles of Functional Computing course developed by Robert Harper, professor of computer science. Functional programming, in which programs are expressed as mathematical transformations on data, also lends itself to teaching parallel computation, and even to the distributed computation that takes place in systems such as Google’s, in which many computers work together without any of one of them being in charge.

“I’ve been amazed at what the students are able to do,” said Harper, who has begun a blog, Existential Type, http://existentialtype.wordpress.com/, to share his thoughts and experiences teaching the class. Because functional programming builds on mathematical principles students already know, “they know what the code should look like,” he explained. In object-oriented programming, by contrast, “they don’t get the ideas — they get lost in the details.”

A new sophomore-level course on algorithms and data structures, to be introduced this fall, also will emphasize parallel computation. Object-oriented programming will be integral to another new sophomore course, Principles of Software System Construction.

All of the new courses, but particularly the freshman-level Principles of Computer Science taken by majors and non-majors alike, emphasize the idea of computational thinking that has been championed by Jeannette Wing, head of the Computer Science Department. More than just computer programming, computer science is a way of solving large problems, often by use of generalized algorithms, abstract representations of data and ways to compose multiple layers of abstraction.

“Too many students have the misperception that a career in computer science consists of sitting in a cubicle all day churning out code,” Bryant said. “The reality is that computer scientists are influencing virtually every scientific discipline today and many artistic ones as well. We believe that changing the way we teach introductory computer science at Carnegie Mellon will have a ripple effect on how society views computer science as an intellectual discipline.”

Carnegie Mellon’s School of Computer Science is at the top of U.S. News and World Report’s rankings of computer science graduate programs. Its educational innovations include Alice, http://www.alice.org/, a free learning software package that enables novices to create 3-D computer animations, and programs to boost female enrollments in computer science, http://women.cs.cmu.edu/. CMU researchers also lead a four-year initiative, Fostering Innovation through Robotics Exploration (FIRE), sponsored by the Defense Advanced Research Projects Agency, to increase the number of college students majoring in computer science, science, technology, engineering and mathematics (CS-STEM).