A meditative and enlightening work that creates a new philosophical approach to programming, a book in the tradition of The Existential Pleasures of EngineeringThe Philosophical Programmer is a fascinating combination of extraordinary insights about the philosophical and ethical meanings of programming, a book that is likely to become a much needed primer in the years to come, a work whose accessible and practical chapters apply fundamental concepts to the actual writing of programs.
While computer books tend to be overwhelming, and to assume a great amount of reader knowledge, The Philosophical Programmer familiarizes the reader with the general nature of programming before addressing the idiosyncracies of particular systems and languages. By first accustoming the reader to the words a programmer uses, and to thinking the way a programmer thinks (which includes an introduction to ethical issues -- such as piracy and privacy -- which are inextricably linked to computers and programming), Daniel Kohanski paves the way to a more profound and lasting understanding of programming.
Kohanski, whose prescient ideas echo those of Nicholas Negroponte, Esther Dyson, and Marvin Minsky, has created the most profound, yet simple, computer book that will appeal to everyone, from expert programmers to the computer illiterati.
I think this is a must-read for any business person who supervises software engineers or relies on their products.
Kohanski does an admirable job of helping the reader understand the challenge of taking a thing that functions in the real world and reducing it to 0's and 1's.
Damn! Would have been fantastic to read first, before the stress and sheer pace of How To Program overcame the space I had in mind for What It Is To Program. Gentle, brief, happy introduction to the totally basic elements and history. Not abstract or sweeping enough for its stated aims, though. See Floridi for the grand social/phenomenological bits, Dennett and Minsky for its relevance to all thought.
I read the version that was printed in 1998, not sure if there are newer ones. Overall I feel the content holds very well, although computers were not as ubiquitous then as they are now, so I wonder what his take is now. We have more powerful computers in our wrists than whatever they had then, even our Internet is very different to theirs.
The book was very pleasant to read, I enjoyed even the parts I already knew about, like computing history, hex, or code quality. It was a good refresher and he presents them in a very good way. I recommend it both for people that want to understand developers, new developers and senior devs.
The book is divided in three main parts:
The first part deals with aesthetic concerns of code, or what we know as code quality, single responsibility, don't repeat yourself, indentation, style, etc. Things that make our code look better and be easier to read. Without concentrating in any particular programming language or design paradigm, very universal and valid advice.
The second part deals with the history of computing and the way computer works. Starting with very old machines, mainframes, minis, personal computers, etc. Speaks about binary, hex, when the first programming languages were invented, abstraction, and even design paradigms like OOP or Functional programming.
The third part deals with ethical concerns for developers, a computer amplifies human capabilities by a ton, so any mistake on the code can be much more damaging. Concerns for user experience, having clear interfaces, thinking about company policies, etc. It raises some very good questions from a point that I had not normally consider.
Daniel Kohanski does an excellent job of consistently providing both clear explanations of the technical aspects of computers and programming and commentary on the social and ethical repercussions of the technology.
While anyone with a basic formal programming education will see some of the explanations as a little simplistic, it is worth reading through them for the excellent points Kohanski makes. If you are self-taught, this could be a nice place to get a very concise overview of the bigger picture.
Ultimately, though, it is the last chapter that makes the whole book worthwhile. Kohanski ties it all up together and makes a very clear point: the computer is the most powerful tool we've ever created, and it magnifies every aspect of us, for good or ill.
Anyone interested in technology at any level will appreciate this book.
The cover promises a lot more than the book delivers. Chapters 4 through 15 are a simple explanation of how computers and software work. That leaves just a few chapters at the beginning and end to be philosophical. But they don't go very deep into philosophy. Comments on social effects and usability, mostly.
The actually philosophical sections of this book are really interesting and will likely always be relevant. The rest, however, is either basic history or technical overview. The latter of those is becoming continuously more outdated. In summary, I'm still not sure when Skynet will become self-aware.
This book is a walk through a computer art museum. If you are a programmer, it is worth to just skim through it. Noteworthy chapters are Object oriented programming and debugging a.k.a Moth in Machine.