In 1967 Robert Floyd (who later won an ACM Turing Award) explained how logical propositions could be used to assert useful properties of programs without the need to use a computer or a specific programming language.
a computer operator during the night shift) • Never earned a PhD • BS 1953 (aged 17) • Wrote one of the first ALGOL compilers • Primary pre-publication reviewer of Knuth’s The Art of Computer Programming Assigning Meanings to Programs | @bytemeorg
referred to by Robert Balzer in these words: It is well known that software is in a depressed state. It is unreliable, delivered late, unresponsive to change, inefficient, and expensive. Furthermore, since it is currently labor intensive, the situation will further deteriorate as demand increases and labor costs rise. If this sounds like the famous "software crisis" of a decade or so ago, the fact that we have been in the same state for ten or fifteen years suggests that "software depression" is a more apt term.” Assigning Meanings to Programs | @bytemeorg
caused by their members' conversion to the new paradigm. But there are always some men who cling to one or another of the older views, and they are simply read out of the profession, which thereafter ignores their work. Thomas S. Kuhn In computing, there is no mechanism for reading such men out of the profession. I suspect they mainly become managers of software development…I believe the best chance we have to improve the general practice of programming is to attend to our paradigms. Assigning Meanings to Programs | @bytemeorg
be defined independently of all processors for that language, by establishing standards of rigor for proofs about programs in the language appear to be novel...” Assigning Meanings to Programs | @bytemeorg
graph of computation. § These logical predicates define the state the computer must be in. § The logic statements have a 1:1 correspondence with programming language statements. § In Assigning Meanings to Programs Floyd defines logical statements for an abstract flowchart “language” and for certain ALGOL60 instructions. § Also defined logical predicates for “start” and “termination.” Assigning Meanings to Programs | @bytemeorg
invariants: a program has certain properties which are never violated during its execution. §Assert equivalence: one program and another program are the same program. (Thus any invariants also hold.) §Assert termination: computation will end. Assigning Meanings to Programs | @bytemeorg
language and computer implementations. §Using logical statements lets us assert various useful properties of a program. §Visualization and code (AST) analysis are powerful techniques to understand how code behaves. §Historical papers are dope! Assigning Meanings to Programs | @bytemeorg