Complexity & Verification: the History of Programming As Problem Solving

Complexity & Verification: the History of Programming As Problem Solving

COMPLEXITY & VERIFICATION: THE HISTORY OF PROGRAMMING AS PROBLEM SOLVING A DISSERTATION SUBMITTED TO THE FACULTY OF THE GRADUATE SCHOOL OF THE UNIVERSITY OF MINNESOTA BY Joline Zepcevski IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF DOCTOR OF PHILOSOPHY Arthur L. Norberg February 2012 © Copyright by Joline Zepcevski 2012 All Rights Reserved Acknowledgments It takes the work of so many people to help a student finish a dissertation. I wish to thank Professor Arthur L. Norberg for postponing his retirement to be my advisor and my friend over the course of this project. Thank you to my committee, Professor Jennifer Alexander, Professor Susan Jones, Dr. Jeffery Yost, and Professor Michel Janssen, all of whom individually guided this dissertation at different times and in specific ways. Thank you also to Professor Thomas Misa for his guidance and assistance over many years. I had a great faculty and a great cohort of graduate students without whom this dissertation would never have been completed. I particularly want to thank Sara Cammeresi, whose unending support and friendship were invaluable to the completion of this project. I wish to thank my family, Jovan Zepcevski, Geraldine French, Nicole Zepcevski, and Brian Poff, who supported me and loved me throughout it all. I also want to thank my friends: Tara Jenson, Holly and Aaron Adkins, Liz Brophey, Jennifer Nunnelee, Jen Parkos, Vonny and Justin Kleinman, Zsuzsi Bork, AJ Letournou, Jamie Stallman, Pete Daniels, and Megan Longo who kept me sane. I need to thank Lisa Needham for all her assistance. Without your help, I wouldn’t sound nearly as smart. You’re a great friend and a great editor! Thank you also to Karl Brophey for his feedback. I was lucky to have a great early experience in this field at the University of Sydney, under the leadership of Rachel Ankeny and, later, at the University of New South Wales with David Miller and John Schuster. Finally, without the early guidance of a dedicated and caring professor, Dr. Katherine Neal, I would never have pursued this path. I was so lucky to have had a teacher who could make such an enormous impact on a student. i For my mother, who taught me everything I know – including how to use a computer. And my father, who gave me the opportunities he never had. ii Complexity & Verification: The History of Programming as Problem Solving Abstract Changes in computer programming methods were responses to specific stimuli, and that (contrary to much existing analyses) the development of programming methods does not fit an ideal of “progress.” I focus on the rise of two fundamental computing problems: complexity, or the proliferation of people and methods; and verification, which is the (in)ability to verify that a program functions as intended. Complexity and verification were the catalyst for the development of automatic coding systems but also increased exponentially as a result of automatic coding systems like FORTRAN and COBOL. These systems have English-like commands that simplify programming. The adoption of automatic coding systems opened up the programming field to more software engineers and allowed the creation of more elaborate software systems, creating ever more complexity in the discipline. I argue that since the introduction of automatic coding systems in the 1950s, methodological changes and new programming languages have been attempts to solve long standing problems faced by programmers. Not, as the traditional insider narrative suggests, a steady evolution based on a better understanding of programming. In this dissertation, I focus on the changes motivated by two stimuli — complexity and verification. iii Contents Table of Figures ................................................................................................................... vi Chapter 1 .............................................................................................................................. 1 Overview: A Case Study of Complex Technological Change ................................................... 1 Introduction ........................................................................................................................ 1 Definitions ....................................................................................................................... 9 The History of Software in the History of Science & Technology ................................................. 26 Agents of Change ............................................................................................................ 30 Programming as Duality ................................................................................................... 32 Opening a Black-Box ........................................................................................................ 36 Using Programs as Historic Documents ............................................................................... 38 Historiography .................................................................................................................... 42 Chapter Outline .................................................................................................................. 55 Conclusion ......................................................................................................................... 58 Chapter 2: A Pre-history of Programming ........................................................................... 59 Early Computing ................................................................................................................. 59 Stored Program Concept ...................................................................................................... 66 Treating Data and Instructions Identically........................................................................... 69 Hierarchical Memory ........................................................................................................ 70 Sequential Processing ...................................................................................................... 70 After the Stored Program Concept ......................................................................................... 71 Sub-Routines and Virtual Addressing ................................................................................. 78 Symbolic Notation and the Road to Automatic Coding Systems ............................................. 80 Complexity and Verification .................................................................................................. 85 Chapter 3: Automatic Coding Systems .............................................................................. 89 FORTRAN ....................................................................................................................... 94 COBOL ......................................................................................................................... 100 ALGOL ......................................................................................................................... 107 LISP ............................................................................................................................ 114 ALGOL & LISP: the theoretical equivalent of FORTRAN & COBOL? ............................................................ 117 Complexity, Verification, and Automatic Coding Systems........................................................ 120 Chapter 4: Structured Programming ................................................................................ 123 Discontent ........................................................................................................................ 123 SABRE ......................................................................................................................... 131 Coding SABRE ............................................................................................................... 135 State of the Field ........................................................................................................... 145 Dijkstra and the Origins of Structured Programming .............................................................. 166 What is a Go To Statement and Why was it Controversial? .......................................... 169 iv What is Structured Programming? ....................................................................................... 184 What is StepWise Program Composition? .......................................................................... 184 What did Dijkstra Mean By Testing Aids? .......................................................................... 189 Controversy .................................................................................................................. 192 Redefining Structured Programming .................................................................................... 197 Structured Programs use a specific design methodology ......................................................... 205 Results of the Structured Programming Conflict .................................................................... 208 Chapter 5: Object Oriented Programming ........................................................................ 213 What is Object Oriented Programming? ................................................................................ 214 Classes ........................................................................................................................ 218

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    350 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us