Michael Kölling, University of Kent, Canterbury
SIGCSE 2005: “Resolved: Objects First has failed”
Position summary, March 2005
At SIGCSE 2005 in St Louis, a debate was held titled Resolved: Objects First has failed.* Stuart Reges (University of Washington) and Elliot Koffman (Temple University) argued the affirmative case. Kim Bruce (Williams College) and I argued the negative case (“Objects First has not failed”). Owen Astrachan (Duke University) oversaw proceedings as moderator.
This is a summary of arguments used during my statement presented at the debate.
• We need a clear line of pedagogic presentation. Recent or current literature suggests approaches such as objects early, inheritance early, GUIs early, concurrency early, etc. These approaches conflict. We cannot do it all at once. I am not claiming that any one of these is necessarily better than any other, but mixing them all up is bound to lead to chaos. Decide what you want to do, and be consistent. As long as we try to do everything, we will succeed in nothing.
• Objects First has not failed. We have failed to do it.
In order to investigate this claim, I have analysed 41 (yes, 41, not 42!) introductory Java textbooks, and categorised their first programming example presented in the book. The books dated from 1998 to 2004. What I really wanted to know is what teachers currently do in their classrooms. This data is hard to come by on a scale larger than single classes. So I took textbooks to be the closest realistic alternative for evaluation, assuming that many teachers reasonably closely follow the style of the textbooks.
In early years (before 2000) very clearly most books started with a Hello, world example (output of a short segment of static text in all its variations). This is not surprising – we knew that. Then an increasing number of books started to claim to follow an Objects Early approach, until by 2002 almost every book claimed to do so. Closer investigation, however, shows that the examples more often than not convey nothing of the spirit of object orientation. While they syntactically use objects, the examples frequently are so contrived, that nobody could possibly learn anything about objects from these early examples (other than syntax).
I presented and discussed one example in my presentation.
• We are stuck in our old ways. (When I say ‘we’, I am talking about us as the programming teaching community in general. I am well aware that there are exceptional individuals out there for whom my statements are not true. I am generalising over the majority of us, as I see it.)
We are claiming, even honestly trying, to teach an Objects First approach, but our thinking is still stuck in the procedural world. We use procedural examples, procedural course structures, procedural priorities in weighing the importance of course content.
We will never be successful in teaching Objects First while we are reusing our old material and our old way of teaching. This is not a failure of Objects First.
We need to move.
• And, finally, a quote:
"A new scientific truth does not triumph by convincing its opponents and making them see the light, but rather because its opponents eventually die, and a new generation grows up that is familiar with it." (Max Planck)