What We've Swept Under the Rug: Radically Rethinking CS1
Introductory computer science education is entrenched in an outdated computational model. Although it corresponds neither to our computing environments nor our work, we teach our students a single-thread-of-control static problem-solving view of the role of the computer program: computation as calculation. In this model, the job of a computer program is to start with a problem, calculate its answer, return that answer, and stop. This program-as-an-island bears little resemblance to most of today's software. We can dramatically improve this situation--and, as a corollary, all of undergraduate computer science--by teaching our students from the very beginning to conceptualize computation with a model of computer programs as simultaneous ongoing entities embedded in and interacting with a dynamic environment: computation as interaction; computation as it occurs in spreadsheets and video games, web applications and robots.