A Science of Operations: Machines, Logic and the Invention Of
Total Page:16
File Type:pdf, Size:1020Kb
History of Computing Series Editor Martin Campbell-Kelly, University of Warwick, Coventry, UK Advisory Board Gerard Alberts, University of Amsterdam, Amsterdam, The Netherlands Jack Copeland, University of Canterbury, Christchurch, New Zealand Ulf Hashagen, Deutsches Museum, Munich, Germany John V. Tucker, Swansea University, Swansea, UK Jeffrey R. Yost, University of Minnesota, Minneapolis, USA The History of Computing series publishes high-quality books which address the history of computing, with an emphasis on the ‘externalist’ view of this history, more accessible to a wider audience. The series examines content and history from four main quadrants: the history of relevant technologies, the history of the core science, the history of relevant business and economic developments, and the history of computing as it pertains to social history and societal developments. Titles can span a variety of product types, including but not exclusively, themed volumes, biographies, ‘profile’ books (with brief biographies of a number of key people), expansions of workshop proceedings, general readers, scholarly expositions, titles used as ancillary textbooks, revivals and new editions of previous worthy titles. These books will appeal, varyingly, to academics and students in computer science, history, mathematics, business and technology studies. Some titles will also directly appeal to professionals and practitioners of different backgrounds. Author guidelines: springer.com > Authors > Author Guidelines For other titles published in this series, go to www.springer.com/series/8442 Mark Priestley A Science of Operations Machines, Logic and the Invention of Programming Dr. Mark Priestley London UK [email protected] url: http://www.markpriestley.net ISSN 2190-6831 e-ISSN 2190-684X ISBN 978-1-84882-554-3 e-ISBN 978-1-84882-555-0 DOI 10.1007/978-1-84882-555-0 Springer London Dordrecht Heidelberg New York British Library Cataloguing in Publication Data A catalogue record for this book is available from the British Library Library of Congress Control Number: 2011921403 © Springer-Verlag London Limited 2011 Apart from any fair dealing for the purposes of research or private study, or criticism or review, as per- mitted under the Copyright, Designs and Patents Act 1988, this publication may only be reproduced, stored or transmitted, in any form or by any means, with the prior permission in writing of the publish- ers, or in the case of reprographic reproduction in accordance with the terms of licenses issued by the Copyright Licensing Agency. Enquiries concerning reproduction outside those terms should be sent to the publishers. The use of registered names, trademarks, etc., in this publication does not imply, even in the absence of a specific statement, that such names are exempt from the relevant laws and regulations and therefore free for general use. The publisher makes no representation, express or implied, with regard to the accuracy of the information contained in this book and cannot accept any legal responsibility or liability for any errors or omissions that may be made. Cover design: deblik Printed on acid-free paper Springer is part of Springer Science+Business Media (www.springer.com) Preface It has long been recognized that there is a relationship between logic and computer programming. Since the 1940s many logicians, including Alan Turing and John von Neumann, and computer scientists such as Edsgar Dijkstra and John McCarthy, have drawn attention to the connection between the two disciplines and commented on its importance. During the formal methods boom of the 1980s and 1990s it was common to read assertions to the effect that programming could be reduced to a quasi-logical process of theorem proving and formula derivation. However, despite having a background in both programming and logic, I found something elusive about such assertions. My practical experience of programming had led me to understand it as a very different type of activity from the formal ma- nipulations of logical proof. With the intention of resolving this uncertainty, I em- barked upon a Ph.D. to study the ways in which the development of programming languages had been influenced by logic. This book is based on the resulting thesis, although it has a wider focus and marks a further stage in my growing understanding of the connection between the two areas. Broadly speaking, I have come to understand this connection not as a fact about the two disciplines, but as something more like a decision made by identifiable historical actors as to how the new discipline of programming should be understood and structured. A key event in this process was the creation of the Algol language in the years around 1960. The motivation for this decision has very deep roots, however, reaching back to ideas about machines and machinic processes that date from the very beginning of the scientific revolution. From this starting point, the book gives an account of the history of what we now call programming. It is useful, however, to view this not simply as computer programming, but to think more generally of attempts to define the steps involved in computations and other information-processing activities in such a way that they could be performed by machines, or at least by humans mimicking the behaviour of machines. From this perspective, the history of programming is distinct from the history of the computer, despite the close relationship between the two in the twentieth century. v vi Preface The story told in this book stops in the 1970s, at the point where object-oriented programming emerged as a successor, or alternative, to structured programming. This is not an arbitrary cut-off point; rather, I believe that structured programming marks the completion of a particular historical trajectory, and that object-orientation, despite its rich inheritance from existing practices, is something quite different, or at least something which has deep roots in approaches and disciplines other than logic. Untangling these roots is part of a different project, however, and the history of how programming and programming languages developed after the 1970s is part of a different story from the one told here. There are several things this book is not, therefore. Although it contains much historical material, it does not pretend to be a complete history of programming languages, and still less a history of the computer. What it does try to do is to tell a particular story about these historical developments and to show one way in which the history of programming languages can be set in a wider context and seen as an integral part of a development which, ultimately, is central to the project started by the scientific revolution in the seventeenth century. The history of computing has recently been expanding its focus from technical details and embracing wider narratives and historical contexts. These encouraging developments have been principally evident in studies of commercial and military applications of computing and their societal impacts. If I had a single hope for this book, it would be that it might contribute to a similar process in the more technical aspects of the subject and to inspire computer scientists and historians of science and technology to see programming not as a isolated technical field. but as an interesting and important part of general intellectual history. Acknowledgements I would like particularly to thank my supervisor Donald Gillies and external examiner John Tucker, without whose enthusiastic advice, sup- port and encouragement this book would never have seen the light of day. London, UK Mark Priestley Contents 1 Introduction ................................ 1 1.1 Minds, Method and Machines . ................... 3 1.2 Language and Science ........................ 4 1.3 The Age of Machinery ........................ 7 1.4 The Mechanization of Mathematical Language . ......... 8 2 Babbage’s Engines ............................ 17 2.1 The Division of Mental Labour ................... 18 2.2 The Difference Engine ........................ 21 2.3 The Meanings of the Difference Engine ............... 25 2.4 The Mechanical Notation . ................... 28 2.5TheAnalyticalEngine........................ 31 2.6 The Science of Operations . ................... 41 2.7 The Meanings of the Analytical Engine ............... 44 2.8 Conclusions ............................. 48 3 Semi-Automatic Computing ....................... 53 3.1TheCensusProblem......................... 53 3.2 The Hollerith Tabulating System of 1890 .............. 55 3.3 Further Developments in Punched Card Machines ......... 57 3.4 Comrie and the Mechanization of Scientific Calculation ...... 60 3.5Semi-AutomaticProgramming................... 65 4 Logic, Computability and Formal Systems ............... 67 4.1 Gödel’s Construction ........................ 69 4.2 Recursive Functions ......................... 72 4.3 λ-definability ............................. 74 4.4 Direct Approaches to Defining Effective Computability ...... 75 4.5 Turing’s Machine Table Notation .................. 77 4.6 Universal Machines ......................... 89 4.7 The Concept of a Formal Language ................. 92 4.8TheRelationshipBetweenTuring’sWorkandLogic........ 96 vii viii Contents 5 Automating Control ........................... 99 5.1 Konrad Zuse’s Early Machines ...................100 5.2 Mark I: The Automatic Sequence Controlled Calculator ......102 5.3TheENIAC.............................107 5.4 The Bell Labs Relay Machines