The philosophy of any discipline must account for the goals, methodology, and subject matter of the discipline . There is a well-developed body of scholarship on the philosophy of mathematics and of science, especially physics and biology, and more recently chemistry. This book addresses the fundamental topics as they relate to computer science (CS).
The discipline of CS shares aspects of mathematics and of engineering and technology. For example, the overlaps with mathematics include the methods of proof and assurance of correctness. With engineering, similar concerns are the philosophy of design and the intentionality of the creators of artifacts in computing. The central phenomenon in CS is the creation of computational artifacts that have to be executed on a technological device.
This book is comparatively brief considering the scope of the subject. It has 30 chapters, each of which is a relatively brief exposition of a subtopic within a broader topic. These chapters are collected into five parts.
The first part contains two chapters--one to describe CS to philosophers and the other to describe philosophy to computer scientists. The author anticipates that both philosophers and computer scientists may read this book and provides an overview for each discipline for the other group. The second chapter is an outline for the other four parts of the book: “Ontology,” “Semantics,” “Methodology,” and “Epistemology.”
The second part of the book is on ontology--the artifacts of CS are computer programs that will be executed on some type of machine. The artifacts are more than algorithms on paper. The computer program embraces the interface of the conceptual and the concrete: a logical structure is expressed in a language that will be executed on a device that is also an artifact--either basic hardware or an intellectual construct upon a hardware platform (for example, a virtual machine).
Part 3 is “Semantics.” The artifacts described and analyzed in Part 2 have meaning based on the intentions of the programmer and the facilities provided by the computer languages in which they are written. The focus of Part 3 is on languages--the types of languages, the translation of a program expressed in one language into another (again, for example, translating a high-level language into a virtual machine’s language), specification languages, and semantic theories (for example, denotational semantics and operational semantics). Again, the concept of computational artifacts permeates this discussion since the languages themselves are computational artifacts and their compilers and interpreters are artifacts, and all have meaningfulness embedded in their expression.
In Part 4, “Methodology,” the usual software system development methods are reviewed prior to an extended discussion on the philosophy of design. Computer scientists create artifacts that meet needs. The emphasis of this part is on design. It discusses the characteristics of good design in programs, formal methods of describing software systems, the design of programming languages, and data abstraction.
The last part of the book is on epistemology--the knowledge created by computation. Do the programs created behave correctly? Are there gradations in “correctness”? Do they contribute any knowledge? Are the explanations generated by computation meaningful? The computational artifacts model some physical system. For example, a library book checkout system models what occurs when a patron borrows a book from the library. Book borrowing had taken place for decades before computer systems took over. Hurricane forecasting is another example. The accuracy of the computer models affects the life, property, and social organization of the state or region threatened by a hurricane. Correctness and explanation are the principal topics in this final part of the book. We expect the computational artifacts to be correct at every level--as written, as translated to a machine, and in the model representing the “real” world. We expect the artifacts to reveal details of the behavior of the system to be modeled to illuminate the mind.
This superb book addresses fundamental issues for developing insight into the nature of CS as distinct from other physical sciences, engineering, or mathematics.