Books on Programming Theory?
subversionfactor asks: "I am a philosophy student with an intense interest in mathematics and programming. However, while I've always been able to find books about various experimental areas of mathematics, I've never seen (m)any on the subject of programming theory. Most bookstores' "Tech" sections only include how-to books and books about why dot-coms failed. Does anyone in the Slashdot community have any recommendations for books dealing with any aspect of programming theory?"
While not strictly 'computer theory', the following books have definitely helped me to merge computer programming with philosophy...
...], Rousseau [Reveries of a Solitary Walker, ...], Seneca [Letters From a Stoic, ...]... it's the texts that dwell into abstraction, truth, human nature, etc...
"The Elegant Universe" - Greene
"Hyperspace" - Kaku
"The Bit and the Pendulum" - Siegfried
"The Structure of Scientific Revolutions" - Kuhn
"The Advent of the Aglorithm" - Berlinksi
"Orality & Literacy" - Ong
"Genome" - Ridley
"Philosophy of Mind" - Kim
Scientific American - Every issue
"Artificial Intelligence [A Modern Approach]" - Russel & Norvig
"Computer Organization & Design [The Hardware/Software Interface]" - Hennessey
And then of course Plato [The Republic, Timaeus & Critias, Phaedrus, etc..], Descarte [Meditations,
While non of these books will make you a better programmer persay, they all will make you understand how things relate, how to approach topics, and what people will get out of things...
I'm going to (a) give you a fish and (b) teach you how to catch more.
(a) Introduction to the Theory of Computation (Sipser, Michael; 1997, PWS Publishing Company; ISBN 0-534-94728-X; QA267.S56 1996b 511.3 --dc20; amazon page here) is a fantastic volume. We used it in a comp sci course I took, and is probably the only book from my dint in c.s. that I won't sell. This, however, brings us to the bit about fishing:
(b) Find out what courses at your university offer comp. sci theory, and then either (i) take the course (possibly pass/fail), or (ii) borrow their reading list. Contrary to your experiences in phil, virtually all (comp?) sci lectures are simple verbalisations of some gigantic glossy textbook. Those guys in the faculty of Science have far less interest in primary sources than we do; class time is not spent carefully teasing apart inscrutable two thousand year old sentences when a big glossy manual with colour diagrams are available.
- undoware.ca
While not strictly "theory", but more good programming attitude & habits - I highly recommend picking up a copy of "The Pragmatic Programmer: From Journeyman to Master". I cannot recommend this book nearly enough. While it may not teach you a specific language, it teaches you general best practices in getting the job done in an effective manner. I'll rip off one of the quotes from the Amazon.com page:
This book is an excellent distillation of practical experience and advice covering all phases of software development. While it's written mainly for the software developer, project managers will get valuable insight from the book on effective software development practice. The strength of this book is that it draws heavily from the authors' experience. Rather that promote a methodology, it promotes attitudes, values, tools and proven practices that will help anyone become a better software developer and make the job of software development more creative and stimulating. It's especially good for new software developers as it contains many lessons that experienced developers only learn the hard way. The book is well organized in easily digestible segments, with a very good cross reference system that makes it handy for repeated use. The appendix presents many valuable resources that professional programmers will want to explore.
I actually got introduced to it because the same guys later went on to write a pretty decent Book on Ruby. However useful that book was to learning Ruby, The Pragmatic Programmer was useful to fostering a positive set of habits and attitude toward programming in General. At least do yourself a favor and read the rest of the comments on Amazon.com before dismissing this underrated classic!
You can learn a lot about CS by looking at pre-1930 math and philosophy.
You'll see a lot of the genesis of proto-computer-science in Frege and Wittgenstein. Of course, it comes out full bore in Church and Turing. Any graduate-level logic text should cover combinatory logic (basically, with the lambda-calculus, the basis of functional programming). One such text (that I can recommend) is _Computability and Logic_, by Boolos.
Of course, SICP (as recommended elsewhere) is excellent, and the Sipser book (likewise) is a readable introduction to theory of computation.
What are you interested in? If you're interested in models for computation, check out the logic books. If you're interested in types (a la Russell), contrast logical types with PL types by reading Luca Cardelli's "Type Systems" (available online free from citeseer, use google). If you're interested in algorithms, Sedgewick or the massive MIT Press algorithms book is good.
You can't be hurt by reading the fundamentals, either: Church, Turing, Rosser, anything by Burstall or Hoare, and (if you're in for some fun), PL semantics (the seminal work in this area is Strachey/Scott). There is a good book available online called "Semantics with Applications" or something similar; I believe that the authors are named Nielsen.
Be careful, though. I was an undergrad philosophy major, and now I'm a grad student in programming languages.
wicked looking list.
not every issue of scientific american has dealt with programmming. maybe i'm biased because i read it throughout the 70's and 80's, but not so regularly in the last dozen years. maybe i'm jsut showing my age.
add this one: "The Society of Mind" - Marvin Minsky.
totally readable non-technical look at AI. brought to my attention by a geographer.
united states nuclear device terrorist bioweapon encryption cocaine korea syria iran iraq columbia cuba
btw, about phi-psychology, is there any good book about reprogramming humans?
advertising, propaganda, oh and `social engineering`? any general algo to exploit those stupid wetwares? we should be more open to what sect and religion do, there's surely some money to get there...
i wonder what OS we're running on, definitively if there's a god, he's a bad coder... sadly, with my job status i probably cant judge...
---
http://freddo.netfirms.com/
---
-- search the web
The first book try to condense modern computer science into a few hundred pages written for a layman (much like "A brief history of time" does it for physics). The second combines everything interesting (Art, music, mathematics, philosophy, literature, genetics, etc), with programming, and is among the most interesting books I've ever read.
The foundations of programming in Scheme is covered quite well in "Abelson & Sussman: Structured Interpretation of Computer Programs". But this is only one view. You may also want to read "Bertrand Meyer: Object-oriented software construction" for a relatively different view (more mainstream). Of course, when it comes to programming, there are no hard facts, and people tend to have a lot of differing opinions.
Functional programming and logic programming arose out of a need to make programming more like that of writing specifications, to make it easier to construct mathematical proofs. It would be a good idea to look into that as well. I can recommend "L. C. Paulson: ML for the working programmer" as a good introduction to functional programming. There are also a number of good books on Haskell, please pick one. When it comes to logic programming, things are unfortunately a bit more messy. The main logic programming language, "Prolog", is all but logical. Also, most research these days seems to focus on constraint programming, which is a generalization of logic programming. For a good online introduction, check out Oz Mozart.
The foundations of mathematics (logic, set-theory, category-theory, etc) are all important in computer science. And of course also more mundane subjects such as combinatorics, calculus, etc...
Logic relates to programming, as mathematics do to engineering. While formal methods have not had much practical value so far, it's an important part of computer science, and undoubtedly something that should become important sometime in the future, once we find a practical way to do it. The best place to get the basic ideas are still "Edsger Dijkstra: A discipline of programming". It's more than likely that you local CS department offers some courses.
Since your view is from philosophy, I guess you are more interested in the important insights of computer science, rather than the boring details. In that case, I can also recommend: "Papadimitrou: Computational Complexity" which covers more or less the same stuff as Harel's book, but in a bit more in depth. It would be good to have read a basic book on algorithms first (basically any will do, but I can recommend the books by Sedgewick, or Cormen, Leiserson & Rivest). By this time, you should be able to find your own references in computational complexity and algorithm analysis.