Developing Developers
Matthias Felleisen
Ninety percent of our undergraduates enter the job market as developers of
software, and it is our moral obligation to prepare them for this phase of
their career as well as possible. At the same time, we must teach in such a
way that everyone with some basic understanding of algebra can pick up the
necessary skills.
At Northeastern, I have created an undergraduate introductory programming
curriculum with this goal in mind (the first four to six semesters).
Starting with the first semester, courses focus on explicit and systematic
approaches to program design. To accommodate the full range of freshmen,
the first course uses a simple teaching language that is tailored to this
goal. Follow-up courses explain how the explicit design principles apply
to industrial programming languages, how they enable logical reasoning
about code, and why they matter when programmers deal with large and
complex software.
In parallel, these introductory courses insist on presenting programming as
a communicative discipline. Students find out that people write programs to
inform other people of ideas. Working with compilers and interpreters also
teaches them that these tools provide only shallow feedback. For true
insight, they must turn to other people. Hence, the freshman course
introduces pair programming so that students learn to articulate their
thoughts. Downstream courses teach students how to present their ideas to
large groups and how to listen/evaluate such presentations.