Philosophy for Developers
Last Updated: 2020-12-13I have been interested in philosophy for a while, but I've really been interested in what philosophy is and how it can make me better at the things that I do. Not really the ins and outs of what an existentialist would say to a nihilist if they met in a bar. But rather if it can provide us with any tools to improve our lives.
And I believe that it can. I discovered and read the book 'The Consolations of Philosophy' by Alain de Botton, and it drew me in from the very first page. It organises its chapters around things that are likely to befall us during our lifetime as humans, and how we can use the writings of various philosophical icons to help us to navigate them.
There are 6 chapters in all, each with their own wisdom, but I found 3 to be particularly helpful for navigating through both the trials of 2020 and a professional career, particularly one in software as that is my background, but I'm sure this is not exclusive. I explain below.
Unpopularity
We live more than ever in an opinionated world. Not only do opinions surround us in social media, but as 2020 has shown us there are more and more outlets of opinion-heavy media. Equally, starting out in a new profession can be daunting as you are suddenly thrust into an environment full of experience and authority much greater than yours. Or so you might think.
The chapter on Unpopularity discusses Socrates, a philosopher nearly everyone has heard of. If you have not heard of him, he is known for wandering the streets of Athens, engaging someone in conversation, listening to their opinions on a subject and through means of logic and reason (the 'Socratic Method'), revealing to his quarry that the opinion that they held as 'truth' was not as truthful as they thought.
Socrates eventually rubbed too many people up the wrong way and was put on trial, accused of undermining Greek society. His peers found him guilty and as a result ordered him to drink hemlock. He stuck to his guns to the end, even remarking as the jury's vote was announced to the court that he "didn't think the margin would be so narrow". It's here that we uncover the meaning of 'Unpopularity'. It does not refer to a lack of friends or invitations to parties, but rather holding firm against popular opinion that what you are doing is right.
As software developers, we seek the truth every day. We have discussions and debates over the best frameworks, best platforms, best languages. But we have to remember that there is no 'best' - these are opinions driven by particular experiences. There are many solutions suitable for the problem at hand, but all are still likely to flawed in one way or another. When we are crossed by the loudest voice in the room, proclaiming that 'the only solution is to use X and Y', remember Socrates, and remember to logically test the solution against the problem. Loud opinions are often amplified by past successes, not future ones.
Frustration
Frustration besets us all. Whether it be frustration over having to spend weeks in your house, or frustration over that build last night that had yet another silly error in it, or when you spilt coffee on your keyboard, or maybe all three happened together. It seemed like they unfairly stalked us and pounced on us, causing us to have a bad day when other people were making their way through their days just fine.
The philosopher Seneca had his share of misfortunes, culminating in his banishment and then betrayal by his student the Emperor Nero, who finally ordered his death. But Seneca had been long thinking on how we deal with frustration and misfortune.
He reminds us that 'Injustice' and 'Unfairness' are human constructs; nature and chance events do not conspire against us with the aim of causing us misery, as much as a wine glass conspires to spill its contents over your new iPhone. Equally, Seneca notes that raging against these events will not restore our sense of justice to the world. Usually this rage has been caused by our own state of mind. Even frustration caused by the actions of another person are oftentimes simply our own misinterpretation of the events, and examination by a cool head will reveal that there was no malice intended.
Aside from teaching us to re-calibrate our sense of justice and apparent antagonism, Seneca also suggests that we should prepare ourselves to be on the receiving end of setbacks and failures. With some forethought, some may be avoided, and with an adjustment in our attitude, some may also be navigated easier, perhaps discovering a new lesson inside. We can apply this to our profession in many ways, and I like to think that it should be considered the founding principle of DevOps; after all it was built on the lessons of mistakes being made with the intention of either detecting them or navigating through them with the least amount of stress.
Difficulties
Nobody likes to experience pain or displeasure, and indeed the early philosophers generally agreed that a happy and fulfilling life was achieved by avoiding these altogether. Nietzsche however thought otherwise. He argued that pain and pleasure, or failure and success, were tied together, and that one was a catalyst for the other.
Imagine you are at the bottom of a mountain, and your overwhelming desire is to see the view from the top. In most cases you must simply climb the mountain to achieve your happiness. But how many would? Would you be put off by the size of the task? Would you think it ultimately worth it?
While Seneca spoke of preparing yourself for setbacks and difficulties, Nietzsche went further to say that in order to achieve greatness and a fulfilling life, you must experience and endure those difficulties, and in fact sometimes embrace them. My favourite of Neitzsche's lessons is that if we see something we desire being achieved better than what we can achieve ourselves, which causes us jealousy, we should harness that jealousy, overcome it and learn from those who are better than us in order to better ourselves.
Many of us have lofty goals, some internal and some external, but how many of us think we can achieve them. To achieve mastery of a programming language, we must endure the confusion and misunderstandings it brings as well as seeing others practice it better than we do. In order to create a successful business or website or app we must endure the setbacks of failing code, no revenue and late-night anguish. But only if we endure these things while harnessing them to better ourselves will the final outcome be truly fulfilling.
When I am faced by failure, I am often reminded of my favourite story of failure and success: WD-40. You may not know that WD-40 stands for 'Water Displacement - 40th formula', which means that the creators endured 39 failures before finding the magic formula that created a household brand. Perhaps they read Neitzsche.