Mission Statement ================= Background ---------- In the past decade, the field of computer science has grown explosively. Entirely new areas of investigation have emerged. Existing fields have experienced exciting advances. Changing circumstances have led to new challenges. As part of this explosive growth, the state of the art and the practice of programming languages have also changed dramatically, with the industry-wide adoption of high-level programming languages with managed runtime systems, the increasing importance of programming language support for effective parallel programming, the wide-spread use of scripting and domain-specific languages, important advances in type systems, etc. Unfortunately, undergraduate curricula have not tracked recent advances and is therefore severely in need of revision. It is therefore crucial that we in the programming language community do our part and revisit the question of what we teach undergraduate computer science majors about the field of programming languages, why that material is important to a broad audience, and how we recommend it should be taught. Note that when we refer to programming languages, we mean the field of programming languages and not the mechanics of programming in a particular language. Goal ---- The goal of the Programming Language Curriculum (PLC) Workshop is to facilitate the adoption of curricula that ensure every computer science undergraduate learns the programming language topics essential for a productive career as a computer scientist. We note that most such computer scientists are practitioners, not researchers. Consequently, it is particularly important that we prepare our students well for jobs in industry, giving them the skills necessary for success in the field throughout the entirety of their careers. At the same time, undergraduate programming language instruction must also appeal to students interested in pursuing academic studies and research in the field. Our goal requires influencing the curricula of the vast diversity of colleges and universities that teach computer science. Such institutions have widely varying resources, class sizes, and expertise, and face competing instructional demands from other computer science sub-fields. To maximize our potential for success, the programming language community must reach consensus on what should be taught, why these topics are important to teach, and how such instruction can be carried out successfully. We must then document our findings and rationale carefully, disseminate the resulting materials widely, and encourage their use for curriculum development. Strategy -------- The PLC workshop is the first step toward achieving this goal. In particular, as workshop participants, we will strive to produce the following items: [The Why] a clear articulation of why every computer science undergraduate should develop a solid understanding of programming languages before graduation, directed to an audience of people *outside* of the field of programming languages. [The What] a partially ordered list of programming language topics and experiences that every computer science undergraduate should know or have before graduation. Each item on the list should have a description and a rationale for why it is important. [The How] a variety of recommended practices for teaching the identified topics. After the workshop, working groups will summarize the conclusions reached at the workshop in each of these three areas. These summaries, along with the white papers written by workshop participants, will be published as an issue of SIGPLAN Notices. To reach community-wide consensus, workshop participants will also decide how to proceed after the workshop, including the identification of working groups to continue the tasks started during the workshop. These groups will be responsible for: (1) Collecting feedback from the community on the workshop report and follow-on efforts. (2) Revising the materials as appropriate. (3) Maintaining a portion of the SIGPLAN web site devoted to this topic with the goal of providing resources to individuals working on computer science curricula to help such individuals determine what programming language material to include, how to teach it, and how to persuade their colleagues of its import. (4) Using the developed materials and the community consensus as input to the various official curriculum standardization efforts, including ACM and IEEE. (5) Recruiting additional community members to the task, as appropriate. Scope ----- The focus of the workshop is on developing a modern undergraduate programming language curriculum. Given the limited time-frame of the workshop, we will not be able to consider curricular questions related to compilers, software engineering, or other related fields except insofar as they directly relate to the design and motivation of programming language curricula. However, we believe that exploring curricula for these areas is a highly worthwhile activity and hope that appropriate individuals will pursue these questions in other forums. A Note on How ------------- It is unlikely we will have sufficient time to explore fully the wide range of approaches people have used to teach programming languages. At the workshop, we will simply initiate discussion on this question and leave further work to the follow-on activities.