“On the frontier,” he had written in 1965, “man must often chart his course by stars he has never seen. Rarely does one recognize or discover a complex problem, formulate it, and lay out a procedure that will solve it—all in one great flash of insight.”7 When the systems are truly complex, in short, programming has to be a process of exploration and discovery. That had been the whole point of interactive languages such as Lisp, as well as interactive-design tools such as Sketchpad: they made it easy to explore new solutions by making it easy to formulate and then reformulate ideas on the fly.

