Possible Responses
Spring 2022
Introduction
The previous group of papers shed light on a turning point in the history of computer science. Computers had gotten dramatically more powerful in the two decades since they had burst onto the scene, and high-level languages had allowed the development of increasingly complex software systems — too complex for programmers to fully grasp in many cases. Prominent computer scientists were sounding the alarm and urging changes in how software was developed. The papers this week are a continuation of that theme: Two distinguished computer scientists present possible ways to manage software complexity.
Hoare wrote "An Axiomatic Basis for Computer Programming" in 1968, outlining a technique for using axioms to formally describe the behavior of imperative programs. It's really just a starting point, but gives the flavor of his proposed method: Apply standard proof techniques to programs in an effort to prove that they correctly implement the desired behavior (assuming the desired behavior can also be formally specified).
John Backus, who led the team at IBM that developed FORTRAN in the 1950s and was later part of the ALGOL team, made the remarks in the second paper in the 1970s as part of his Turing Award lecture. He argues for a break from imperative programming, which is a pretty strong statement coming from FORTRAN's inventor! After documenting the "inherent defects" in imperative languages, he makes a case for what we would now call functional programming.
Questions
Here are some questions you might try to answer as you read:
-
When Hoare writes things like P{Q}R, where do the P and R come from? What are they?
-
Describe Hoare's "Axiom of Assignment" in actual English.
-
Describe Hoare's "Rule of Iteration" in actual English.
-
Why does Hoare's axiomatic system avoid side effects? He's got a way to formally describe the effect of an assignment statement, after all.
-
Why do jumps (or pointers) present "real difficulty"? How might you add them to the model?
-
How might Hoare's approach be extended to handle parallel programs? Looking at the example proof in Table III of Hoare's paper, how is iteration being handled?
-
How might a modern IDE assist in building program proofs?
-
What does Backus think about Hoare's approach?
-
Backus critiques an imperative program in Section 5. Which of his complaints do you support? Which is the largest concern?
-
Why do "conventional languages create unnecessary confusion in the way we think about programs"?
-
What's the difference between an "AST system" and "FP Systems"
-
What is the "von Neumann bottleneck"? Is it still a problem today?
-
What are the "two worlds" in imperative programming?
Papers