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.