The first year is addressed, rather than the first course, since similarities emerge more distinctly when the entire first year is used as the metric. Panelists may address both courses individually as well as addressing the first year as a whole.
Each panelist uses a different language in CS 1 --- languages represented include (alphabetically) Ada, C++, Eiffel, ISETL, Pascal, and Scheme. Panelists will discuss the goals of their first year courses, addressing both CS1 and CS2 when appropriate. An internet survey of educators will be used to generate another list of goals.
Perhaps this will help us as computer science educators focus on what is similar rather than on what is different. How languages and other issues affect these goals will be used to generate panel and audience discussion.
Computer Science should be seen as a profession, especially when we are discussing a curriculum for students majoring in it. Students should aspire to design and implement the computer systems that influence our lives: telephone switches, airliners and air traffic control systems, automotive systems (ABS, speed-control, fuel systems), ATMs, and other banking systems, supermarket scanners, medical electronics, and so on. Word processors and video games are fun, but they pale in importance to the above. Therefore, the over-arching concerns in an undergraduate sequence should be:
By these measures, students coming out of the first-year sequence should be equipped with knowledge of the classical CS1/CS2 subjects, treated in an "objects-early" fashion such that inner control structures, data structures, and "system structures" (subprograms, encapsulation constructs, exception propagation) all "scale up" at the same rate, as the student's sophistication increases. The goal is to balance the three kinds of structures right from the start.
Students should experience programming as a means of solving problems. Programs should not be written simply to demonstrate some programming constructs, but instead should be motivated by applications. The student should leave with an appreciation of how computers can be used to solve problems, experiment with, and analyze data.
Students should be exposed to different approaches to problem solving. Being able to see different ways to attack problems, e.g. functional vs. procedural or procedural vs. object-oriented, allows the student to more adeptly apply techniques to problems. Of course, common themes such as abstraction and design-for-reuse can be stressed across the paradigms.
Students should have a broad sense of what computer science is about. The student should not leave thinking that computer science is just programming.
The first year should engender in each student the realization that there is more to this field than ``just" programming. We are problem solvers, and programming is one means to solving a problem. This field is made up of many subareas, each of which offer opportunities for further study, and they should realize there are ethical and professional issues in this field.
Students should be able to do some very modest design, programming and testing in some language - be it object-oriented, functional or procedural. They should realize which of those three domains they are in. Reuse should be encouraged as a way of doing business, to reduce development time and errors. This should reinforce the need for good documentation, as without it you can't reuse things, as well as provide opportunities to read other's code.
Design includes understanding how to choose an appropriate structure for a problem, including a modest understanding of the time/space tradeoffs involved. It is not important that they know how to build each of these structures at this level. It is important to have experience working in a group.
The overriding objectives of our first year-and-a-half sequence (for CS majors) are an emphasis on software engineering design, and integration of the 5-quarter sequence so students learn and practice one specific design approach in some depth. We are convinced that design is the central issue, that it matters greatly which design approach is chosen, and that -- at least at a large institution where one person cannot be responsible for teaching all sections of these several courses -- it is crucial to have a critical mass of faculty who understand and subscribe to the particular design techniques being used. Language is an issue because an utterly poor choice stands in the way of understanding. C++ is hardly ideal, but it is a rational compromise for us between pedagogical needs and local practical and political considerations.