Abstract: In March, 2000, the ACM-IEEE CS Curriculum 2001 committee released a "strawman" version of their proposed curricular recommendations. Those recommendations give short shrift to programming languages compared to previous curricula, and the material on programming language is also significantly reduced from the Programming Languages Knowledge Area Focus Group's recommendations. This document reports on the recommendations of the focus group and the curriculum committee's proposals on programming languages. We urge those interested in undergraduate computing curricula to write to us and the full Curriculum 2001 Committee to present their views on what programming languages material should be required of all undergraduates. The curriculum report will be finalized by the end of the year, so prompt action is necessary to have an impact on the process.
In the Fall of 1998, ACM and IEEE-CS created a joint task force to create a new set of curriculum guidelines for undergraduate programs in computing. This was to build on the work of earlier curricular committees, including those resulting in Curriculum 68, Curriculum '78, and Curricula '91. The charter of the task force was as follows:
To review the Joint ACM and IEEE/CS Computing Curricula 1991 and develop a revised and enhanced version for the year 2001 that will match the latest developments of computing technologies in the past decade and endure through the next decade.
The outline of topics for Curriculum 2001 produced in the fall of 1998 did not include the area of Programming Languages. Instead a few programming language topics were included in the section on Programming Fundamentals, a section which "enumerates the basic programming skills that all students of computing must acquire to prepare themselves for more advanced study." These topics seem to correspond to the topics normally expected to be taught in CS1 and CS2 courses.
After receiving complaints about the omission of programming languages, the Programming Languages Knowledge Focus Group (PL KFG) was formed at the end of July, 1999. The members of the group contributing to the original deliberations were Kim Bruce (PL KFG chair, Williams College), Benjamin Goldberg (New York University), Chris Haynes (Indiana University), Gary Leavens (Iowa State University), and John Mitchell (Stanford University). Joseph Hummel (University of Illinois at Chicago) has since joined the group.
Because of an impending meeting of the full curriculum committee in mid-August, 1999, this group pulled together a proposal for Knowledge Units for Programming Languages for Curriculum 2001 over a very short time period. We have had extensive discussion of the topics included here, but wish to present our ideas to a larger group of programming languages experts to get feedback on our ideas. We began with the knowledge units (KU's) of Computing Curricula 1991, but made extensive changes to update and change the balance of material. Our proposal discusses the changes from Curricula '91.
Like the Curricula '91 report, the Curriculum 2001 report and the PL report distinguish between core and non-core material. The core topics are those topics to be required of all students in computing. According to the Curriculum 2001 Task Force "the core will consist of those topics for which there is a broad consensus that the topic is essential to undergraduate degrees that include computer science, computer engineering, and other similarly named programs." The PL report also includes some topics that are designated as intermediate and advanced, though the intermediate and advanced topics are not complete.
The Curriculum 2001 committee decided early on to attempt to reduce the total number of lecture hours of core material from that of the Curricula '91 report, yet update the report to add areas of increasing interest. The PL working group followed suit by reducing the number of lecture hours of core programming languages material from the 46 lecture hours of Curricula '91 to 35.5 lecture hours in the new proposal.
We had hoped to get feedback from the full curriculum committee, but so far the only feedback we have gotten was through the release of a preliminary report on Curricula 2001 dated March 6. That document has a section on Programming Languages whose overall structure is similar to our proposal, but, rather than including 35.5 lecture hours of core material, as we had proposed, it cuts the core material in programming languages to 5 lecture hours. The topics included in the core include the history of programming languages (2 lecture hours), a discussion of virtual machines (1 lecture hour), and an introduction to language translation (2 lecture hours). This consists of the material presented in the PL KFG report as PL1, PL2, and the core sections of PL4.
The rest of the material presented here (and listed in that report) is considered non-core. Obviously the full curriculum committee has judged that the programming languages content of computer science core material has shrunk precipitously over the last ten years, from 46 to 5 lecture hours.
To be fair, a few of the topics proposed for the programming language area have migrated to other subject areas in Curricula 2001. For example, context-free grammars are one of the five topics in the 6 lecture hour core knowledge unit, AL5, on basic computability, and may comprise most of the core material in our PL3. Similarly PF3, Basic data structures, includes a brief mention of static, stack, and heap allocation as well as runtime storage management, and may comprise roughly 2 of the 3 lecture hours we allocated to storage management in our PL8 (garbage collection is omitted).
Of course some other topics included in our knowledge units are covered lightly in terms of teaching a specific language in the Programming Fundamentals knowlege units. For examples, exceptions (from PL6), classes, subclasses, inheritance, and subtype polymorphism (from PL11), some discussion of encapsulation and information hiding (from PL7), and a brief discussion of concurrency (from PL12) as part of a discussion of event-driven programming and OS3. However, virtually all of these are from a much more elementary point of view than is proposed here. In particular we emphasize both the understanding of the key concepts and alternate implementations in programming languages.
Examples of topics in the programming languages area that we feel are extremely important, but were omitted completely from the report include discussions of static (or dynamic) type checking, parameter passing mechanisms (let alone type parameters), functional programming languages, and modules.
Perhaps if Computer Science majors were only expected to know one language (e.g., C++ or Java) for the course of their careers some (but not all) of these omissions might not be too harmful. However, it is clear from past history that languages and paradigms change over time, and that different projects are often supported better by different kinds of languages. Moreover, learning a new programming language paradigm teaches computer scientists new ways of looking at old problems.
The PL group is not happy with these precipitous cuts in programming languages. We are looking for feedback from others as to what programming languages content should be part of the core. Please look carefully at our proposals and at the Strawman Curriculum Report. Please send e-mail to the Programming Languages task force with your comments on what should be part of the core. You may also want to express your feelings on the size of the Programming Languages core directly to the Steering Committee at firstname.lastname@example.org. We look forward to hearing from you.