At WordCamp Milano, I gave a talk with the enticing title Why every developer should read Plato. The short answer to that question: to learn Socratic thinking. In this post, I will share some of my personal journeys as a philosopher in software development. In doing so, I will also introduce a few philosophical concepts that might help you level up your skills as a developer.
Why I chose philosophy
I never viewed myself as a technical person. As soon as I graduated from high school, I started studying Dutch language and literature. After one year I switched to Philosophy. I wanted to get to the bottom of things. Any “working” theory about something just wasn’t good enough for me. I wasn’t so much interested in actually arriving at conclusions and applying them somehow. Instead, I wanted to spend my time discovering more fundamental principles and truths that lay behind this big pile of “knowledge” they were throwing at us at the university.
When I say I want to spend my time discovering more fundamental principles, I am already taking a Platonic stance. Let’s start with noticing how discovery implies there’s already something in place to be discovered. It implies there is some objective or universal truth that exists independent of us. Any knowledge of it should, therefore, be present in us before our awareness or perception of it. We call this a priori knowledge.
We can use mathematical examples to demonstrate this. Given certain mathematical axioms, we know that the outcome of 1 + 6 is 7. Looking for another outcome of this equation in the wild would be somewhat pointless. By the nature of numbers and of addition as it is known to us, we know 1 + 6 = 7. We might investigate why or how this is the case. We might come up with mathematical proof to support this knowledge. But it makes little to no sense to look for possible falsifying evidence against this outcome.
Plato (together with Socrates and Aristotle) is considered to be the father of western philosophy. He is most famous for his writings about Socrates and his theory of forms. In his theory of forms, Plato assumes the existence of a realm of abstract forms, which contain the essential truth of all we see in the world around us. It is another way of saying we understand the world around us through abstractions.
For Plato, abstractions are more real than the things themselves. It’s true because the things themselves change through time, while their abstract forms are eternal. The abstract form of a chair as an object devised for sitting doesn’t lose its meaning while an actual chair burns in a fire. The important thing to remember here is that when inquiring anything in the world around us, we should focus on the abstractions, not the concretions.
Socrates is the main character in Plato’s writing and one of the greatest philosophers who has ever lived. He is a master of inquiry by constantly acting as a midwife, helping to give birth to the ideas of his counterparts through dialogue and asking questions. You could say that Socrates quality is that he has mastered the art of asking questions. What makes him so good?
Socrates’ success comes from his irony. He starts with a very straightforward and elegant assumption; I know that I know nothing. From this assumption, he automatically takes the seat of the student and puts his counterparts in the role of the teacher. He can neither accept nor reject any knowledge conveyed by his teachers as the truth because Socrates knows nothing! Thus, the only thing Socrates can do is inquire further into the thought of his counterparts.
The discovery of truth is called anamnesis. How does this work if it’s not possible to know anything? According to Plato, we can access the abstract forms through our mind. However, we cannot own them. Here’s where Socrates comes in. Our own understanding of the truth can never be entirely true. We can always replace our conscious understanding of the truth with a “truer” version, but we can’t replace it with the truth itself.
The moment in which we realize a previously held understanding to be false is then the real discovery. In light of the truth and through Socratic inquiry of our thought process, we discover our beliefs to be false. We call this anamnesis. We can now replace our old understanding with a better, more fine-grained understanding or we remain without one.
The Socratic inquiry is a highly useful practice to use in software development, especially in architecting software and debugging. I was able to experience that myself for the first time in 2012 when I joined Innovation Factory for a web development internship. I had no prior knowledge of software development but was able to add value from the start by simply asking questions to my seniors.
In the beginning, I felt a bit ashamed for asking my colleague’s many questions. To me, it seemed like I was taking valuable time from my seniors. Like Socrates, I didn’t even know if what they explained to me made any sense at all since I was still such a blank page. But every time I asked another innocent question, my seniors responded enthusiastically. They were amazed by the fact that they also didn’t know how to explain the things they took for granted every day. It became a great learning experience for the both of us.
As software developers, we are pragmatic. We fix things, we deliver. We do magic, but we need a use case to do it. Things need to be useful; otherwise, they become wasteful. How do we make sure Socratic inquiry remains useful? Yes, we do want better solutions by discovering better abstractions, but we don’t want to end up without a solution, and we definitely don’t want to get stuck in endless inquiry!
Well, aren’t we lucky? As developers, we always have a concrete problem to solve under real conditions. There are the programming languages, the frameworks and the tooling surrounding our applications. There’s the user story or the bug report, and finally, there’s a deadline or a velocity that we have committed to. These are the conditions within which we do our work. As long as we meet those conditions, we are free to inquire!
So, read Plato!
I hope I’ve convinced you now of the value of Socratic inquiry. If you want to learn more, why not learn from the master himself? Plato has written dozens of dialogues in which Socrates is the key figure. Even if you are not a philosopher, these dialogues are still lots of fun to read! They are often stories about five guys sitting in a bar discussing the meaning of beauty, justice, good and evil.
If you don’t want to learn from a book, you can learn in practice. Start pair programming! If there’s one practice in our craft today where you can learn Socratic inquiry, it’s pair programming. As a navigator, try to be ignorant. Simply ask the driver to explain why he is doing the things he’s doing. You’ll be surprised how much better the code will turn out to be!