The Philosophy of Programming
The Philosophy of Programming is a project designed to help programmers program computers better. The reading list and related articles on this web site are designed to orient you toward a specific basket of philosophical ideas meant to drastically improve how you approach programming.
The core of this web site is the reading list which contains the very best books and resources available, based on a lifetime of passion for the subject.
The Forum on this site is where you can find other wisdom lovers. Philosophy can be hard. It best done by having discussions, particularly a dialectic, with other friends who are on the journey with you.
The Forum requires a paid subscription. While this is a direct way to support the site, it also serves a useful purpose. By charging a fee, it is hoped that the people inside the Forum will be serious and commmitted to learning about the Philosophy of Programming.
Not a problem
If your financial situation does not afford you the opportunity to purchase a subscription, send an email to email@example.com and state your case. Free or discounted subscriptions are available on a case by case basis.
By practicing philosophy, you will practice how to reason. It is hoped that you will avoid costly mistakes by reasoning a priori . A priori knowledge is knowledge that comes from the power of reasoning about truths (self-evident and discoverable truths). This will benefit you, your team, your clients and your users.
By practicing philosophy, you will discover ways to collaborate more effectively.
One skill is the Socratic Dialectic. The Socratic Dialectic stands apart from the Hegelian Triad and Debate as a method to posit out truth. Avoid Debate. Use the Triad sparingly. Favor the Socratic Dialectic in your discussions with other programmers about matters of computer programming.
Another skill is the acceptance of Stoicism into the development process. Among Stoicism's many lessons, one standout is the avoidance of pride. Pride happens to programmers because many of us work alone. We experience the challenge of software development and receive the reward of accomplishment often alone. Over time, however, this can develop into an improper perception of reality. Stoicism teaches how to deal with this.
This web site asserts an opinion about which philosophical ideas are relevant to programming and more importantly, which ones will make you a better programmer. There is no official philosophy for programming. There are only ideas.
Programmers make models of the real world and then compose software emulations of it.
It is a process of adaptation where a model of a slice of reality is adapted to that which can run in a computer.
What kind of computer? A Von Neumann machine, which uses mutable memory and Turing-complete languages built on an incomplete set of axioms.
There are two universes of knowledge: the real and the computer.
In the computer universe, computer programs are built on axioms. The axioms are knowable and discrete, though incomplete.
In the real world, every philosophy is available to programmers. There is no universally accepted epistemology.
An axiomatic epistemology is better for programming computers than one that is not axiomatic. We say this with full knowledge of Godel's work.
It is acceptable if your own epistemology for the real world does not match, or is not axiomatic. This conjecture is referring to the computer universe only.
The nature of a computer is 100% knowable. It is built on axioms and those axioms are discoverable. Knowledge of how a computer works can be learned by deduction or induction. It can also be learned through revelation (being showing schematics or source code). Programmers write code according to the computer's nature.
The nature of reality is not 100% knowable. Humanity has attempted to make theories about reality in the past only to later witness those theories develop unresolved questions. To paraphrase Socrates; the one thing that we can be certain of is that we know nothing for certain.
Repeating what was said above: The nature of reality is not 100% knowable. Humanity has attempted to make theories about reality in the past only to later witness those theories develop unresolved questions. To paraphrase Socrates; the one thing that we can be certain of is that we know nothing for certain.
Though it is not universally accepted nor provable, we nonetheless conject that non-relativistic metaphysics and a non-relativistic epistemology appears to yield better abstractions than relativistic ones.
There is an enormous hoarde of philosophical work to choose from. If we limit our selection only to the work of the great ones, it is still a large number. This is further complicated by the fact that a lot of very good philosophical work is written in non-English languages. Here are the criteria used to select the books and resources featured on this web site.
Contains philosophical ideas that can support the conjecture that the universe once inside a computer will be understood axiomatically.
Contains real world philosophical ideas that pay homage to the ideal of an absolute, non-relativistic universe appear to yield results generally adaptable to computer programming.
Acceptable Time Commitments - Is the book or resource a good value for the time invested?
Self-Learning Conducisive - There are many great courses out there. Many are meant for classrooms or focus groups. Can you learn the material on your own without a teacher present? Can the material be its own teacher?
Reference Value - After it's read once, can you refer back to it? Can this book be re-read? Is it worth keeping on the shelf for many, many years?
English - Is there a decent english translation available?
Youth Friendly - While an appropriate age is not defined for this web site, works that contain material objectionable for youth is avoided.
In the near future, literary works, works of fiction, films and audio dramatizations may be included on the reading list. An additional criteria for those is the production quality.
It is not essential that you agree with all of the ideas on this web site. The primary purpose of this website is to expose you to the ideas and provide a way for you to incorporate them into your life so that you can be a better programmer.
A fantastic way to test your own views is to discuss them with others who are also trying to understand all of this.
Use the Forum to discuss your ideas, especially the ones that you disagree with. Help make this site better. Help everyone coming here become a better programmer.
Philosophy is not something to just endlessly read about or talk about. You have to go out there and practice it. While the Forum on this site is where you can test ideas with other wisdom lovers, don't just test them there. Test them out in the real world. Make things happen.