Computer Science: The First Year
This is a re-formatted version of transparencies used in a panel presentation at the SIGCSE '96 conference by Max Hailperin of the Gustavus Adolphus College Mathematics and Computer Science Department.
Specific objectives come from an overarching goal:
- Students get a representative trial experience
of thinking and working like a computer scientist.
Not vacuous:
- experience, not exposure
- representativeness, not comprehensiveness or closure
- perspectives and methods, not subject matter
- computer scientist, not programmer or user
But not enough to ensure agreement:
- How do computer scientists think and work?
How computer scientists think and work:
Abstractly
- smart, not hard, by working in sufficient generality
- in terms of concrete abstractions
By
- programming
- proving
- analyzing
- predicting
- measuring
and seeing these as a unified whole.
=> So first-year students must have these experiences!
Why this goal?
Majors: orientation
Non-majors: appreciation
Real students: decision whether or not they are majors
In practice, the last two imply a single, prerequisite-free course must accomplish the goal. (But the rest of the year should continue to do so, better.)
Specifically, students shall
-
use induction not only to prove programs correct, but also to design programs in "one-layer thinking" fashion;
-
capture computation patterns in higher-order procedures;
-
uniformly interface with diversity through polymorphism;
-
asymptotically analyze (and design!) algorithms, make predictions about them, and check with measurements;
-
implement universality as transcendent specificity (one specific computation is to carry out any specified computation).