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:
- Collecting feedback from the community on the workshop report and follow-on efforts.
- Revising the materials as appropriate.
- 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.
- Using the developed materials and the community consensus as input to the various
official curriculum standardization efforts, including ACM and IEEE.
- 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.