(Excerpted from my blog.)
As the conference drew to its close on the last morning, our discussions turned to the broader vision of what a great new first course would be like. By the end of CS1, traditional curricula expose students to lots of complexity in terms of algorithmic patterns: booleans, selection, repetition, collections, and the like. We would like to create a course that does the same for object-oriented programming. Such a course would emphasize: objects, relationships among them, and communication. Concepts like delegation, containment, and substitution would take on prominent roles early in such a course.
Current textbooks that put objects front and center fail to take this essential step. For example, they may make a date class, but they don't seem to use Dates to then build more complex objects, such as weeks or calendars, or to let lots of date objects collaborate to solve an interesting problem. Most of the programming focus remains in implementing methods, using the familiar algorithmic patterns.
Our desire to do objects right early requires us to find examples for which the OO style is natural and accessible to beginners. Graphical and event-driven programs make it possible, even preferable, to use interesting objects in interesting ways early on, with no explicit flow of control (drawing program, calculator, tetris). But what other domains are suitable for CS1, taking into account both the students' academic level and their expectations about the world of computers?
Our desire also means that we must frame compelling examples in an object-oriented way, rather than an algorithmic way. For instance, I can imagine all sorts of interesting ways to use the Google API examples I worked on last week to teach loops and collections, including external and internal iterators. But this can easily become a focus on algorithm instead of objects. We need to find ways to inject algorithmic patterns into solutions that are fundamentally based on objects, not the other way around.
Rick: develop more XML code and examples
Joe: find ways to incorporate ideas from here into work on Karel