Are there any links between philosophy and computer science? What resources might be useful for a programmer learning philosophy?
Yes, study advanced symbolic logic. My degree is in philosophy, not computer science, but I've been a successful professional programmer for several years, and my philosophical background, especially in logic, was a big help.
A well-written computer program is really nothing more than a long, complex, logic puzzle.
(Also, studying general philosophy will help you be less impacted by the madness of the modern corporate workplace.)
I've found that many areas of philosophy have had some impact on my career in computing, including programming.
- Philosophy of mind overlaps significantly with artificial intelligence. Is the brain a computer? What's the value of the Turing Test? Could semantic understanding ever arise from syntactic processing (Searle's Chinese Room etc)?
- Thinking about the limits of computation has both technical and philosophical aspects
- Logic, from truth tables to modal, fuzzy and multi-valued logics can all inform the way you approach programming tasks
- Understanding philosophy of technology helps me to consider the broader context in which programming occurs, including ideas of what constitutes progress
- Computer programming is not value free, and so studying philosophical topics in ethics and politics can inform the larger decisions about the appropriate use of IT.
I would suggest reading up on philosophy related to mathematical constructivism. This can then lead you into areas such as type theory, the BHK interpretation, the Curry-Howard correspondence, and Homotopy Type Theory (HoTT). Along the way you'll encounter discussions related to the notion of the identity of indiscernibles, issues around the limits of computation, the notion of things that are valid-by-construction, and issues around computing mathematical proofs.
Hope that helps you get started!
There are philosophy books that explain some programming concepts, such as "Godel, Escher, Bach: An Eternal Golden Braid" by Douglas R. Hofstadter, which is primarily about philosophy of mind. There are other aspects of programming I can think of at the moment to which philosophy is relevant.
The first issue is that the organisation and writing of programs is about how to express knowledge in a precise way that both you and the computer can read. It is important that people should be able to read your programs, including you. If you write programs and revisit them later and you can't read them then you wrote the program wrongly in the first place. One interesting book to read about how to write programs and reason about them is Structure and Interpretation of Computer Programming.
The second issue is that how your organise projects is about the best way to organise the creation of knowledge. For example, adding a new person to a team increases the complexity of communication among team members and makes reaching agreement more difficult. For this and other similar problems see "The Mythical Man Month" by Fred Brooks.
A third issue that is somewhat related to the first issue is the relevance of mathematical ideas to programming practice. There are people who come up with fancy quasi-mathematical tools to test programs, such as the people in the Haskell community. These tools have some uses but some people such as Rich Hickey have pointed out that every bug in a program has passed tests, so tests are not a magic bullet. Also, a proof of mathematical correctness indicates that the program does something correctly, not necessarily what you want it to do. In addition the vast bulk of code simply can't be reasoned about mathematically since the computer has to deal with complex things for which we have no model, like some hardware and users.
Finally, programming is a labour saving technology. Once you have understood how to solve a problem once you can mechanise solving it. In that sense, programming is part of a process of potentially open ended progress that took off in a major way with the industrial revolution. To understand why this potentially open ended progress is good see "The Beginning of Infinity" by David Deutsch and "The Return of the Primitive: The Anti-Industrial Revolution" by Ayn Rand and Peter Schwartz.
I like the other answers, they all show a great point. It seems evident that there are more links with Computer Science than with the discipline of programming.
I want to share with you a great essay from Scott Aronson, a theoretical computer scientist from MIT.
It is more centered in Computational complexity theory, a branch of the Theory of Computation.
Here is the abstract:
One might think that, once we know something is computable, how efficiently it can be computed is a practical question with little further philosophical importance. In this essay, I offer a detailed case that one would be wrong. In particular, I argue that computational complexity theory—the field that studies the resources (such as time, space, and randomness) needed to solve computational problems—leads to new perspectives on the nature of mathematical knowledge, the strong AI debate, computationalism, the problem of logical omniscience, Hume’s problem of induction and Goodman’s grue riddle, the foundations of quantum mechanics, economic rationality, closed timelike curves, and several other topics of philosophical interest. I end by discussing aspects of complexity theory itself that could benefit from philosophical analysis.
Also, i want to nothe that Peter Millican, a professor of Philosophy at Hertford College, University of Oxford developed a new degree programme at Oxford University, in Computer Science and Philosophy.