Philosophy for Software Developers
July 10, 2020
Science is what we know and Philosophy is what we don’t know.
Software developers should have some familiarity with the ultimate philosophical questions that have been asked over the last 2000 years, and how great thinkers and writers of the past have tried to answer those questions.
My own interest in philosophy began many years ago, when I came across this quote by Russell:
I think nobody should be certain of anything. If you’re certain, you’re certainly wrong because nothing deserves certainty. So one ought to hold all one’s beliefs with a certain element of doubt, and one ought to be able to act vigorously in spite of the doubt…. One has in practical life to act upon probabilities, and what I should look to philosophy to do is to encourage people to act with vigor without complete certainty.
This is from Russell’s 1960 interview with Woodrow Wyatt. You can watch it here.
These days “philosophy” is considered pretty much useless. Most people think of philosophy as a futile speculative exercise that doesn’t really have any benefit to our daily lives.
And there are good reasons for this kind of attitude towards philosophy. Many questions - as Russell points out in the interview mentioned above - that philosophers of the past have addressed are now in the domain of specialized fields: physics, economics, medicine etc. Science has taken the responsibility of addressing those questions with an experiment based approach with better results. But my point here is that reading philosophers as a hobby gives you useful mental tools which can help you in any profession of your choice, and specially in software development.
Software development is a challenging profession. It is not easy to stay on top of things in our field. In the last few years every project that I have done has been significantly different from things I have done in the past. While we are busy trying to keep up with all the innovation happening within the Cloud, DevOps, Font End, Analytics and AI spaces, what if I tell you that finding time to dabble in philosophy can help you become a better software professional?
But what do I mean by Philosophy
Philosophy may mean different things to different people. The literal meaning of the Greek word is “love of wisdom”. Now that probably doesn’t tell you much. So let’s just say that philosophy is what philosophers do. How is that for a recursive definition!
Philosophers have traditionally been interested in a number of big, existential questions. Here is one such list. All of these questions remain – and probably always will remain – unanswered, which makes it quite reasonable to ask: what’s the point of it all?
The value of philosophy is not in the answers philosopher have come up with, but in the way they have approached the questions. Whenever you are trying to analyse an idea or a concept, you are “philosophising”.
This is what a philosophical approach brings to the table.
Good philosophers teach you to form well structured arguments. You learn to spot logical fallacies and ways to deal with them. This helps you form opinions and present your thoughts in more convincing ways.
Awareness of context
Context is everything. A good solution in one context may not be as good in a different context. For example, in a consulting business where I work, if you develop overly engineered solutions which nobody is able to handle after your engagement with the project has ended, you are not doing any favours to your clients. Philosophical mindset makes you question your decisions and constantly strive for the best solution in your current context.
Every team, every group of people, every department has a certain way of doing things. Some might call it an aspect of the “culture” of the team. As an outsider, you are expected to learn the underlying assumptions of the team as you join them. A philosophical mindset helps you ask questions about assumptions. You can then decide which assumptions to challenge. And you want to do that because some assumptions may not be true anymore, but may still be limiting your options to solve outstanding problems for the team.
Scientific rigor is not only for the people writing their PhD reports. In more general terms it’s really about how well do you adhere to a valid style of reasoning as you make decisions, how clearly you analyze problems you are trying to solve, and how objective you are about the solution. These mental attitudes are absolutely crucial in software development. Often times you understandably strive for the most elegant solution, but an objective mindset helps you avoid waste by focusing on a solution which is adequte, though it may not necessarily be the most elegant. At the end of the day, our efforts incur a cost, which has to be justified within the universe we are operating in. In my experience this sort of pragmatism is highly valued by our customers.