A case for, and an instance of, objects in CS1

Despite considerable effort and a great deal of rhetoric, the past two decades have seen relatively little progress in the effectiveness with which we teach computer programming. Indeed, the most common programming languages for teaching (Pascal, BASIC, FORTRAN, C) are essentially the same ones that we have used for the past 20 years. To be sure, the implementations of these languages have become increasingly sophisticated. The languages are now more expressive, offer additional features to address software engineering concerns, and support more sophisticated interactive programming and debugging, but the paradigm for teaching programming has remained essentially intact. We teach procedural languages-languages in which the basic unit of abstraction is a procedure, or an algorithm, and there is a clean distinction between an algorithm and the data it operates on. We do so knowing that such languages have well-documented theoretical and practical limitations.