What can dead philosophers teach us about software development?
Modern software development is a process of learning and problem solving in an enormously complex problem space. We navigate this space of possible solutions using our understanding and through a process of validated learning.
Philosophy can help us with this challenge because it helps us to understand this process of learning and knowledge creation. Having an understanding of the philosophy of knowledge helps us to support a culture of learning and navigate towards our goals.
Outline/Structure of the Talk
Problem solving is a process of knowledge creation. It focuses on creating knowledge that has explanatory power - knowledge that allows us to understand a given domain and communicate that understanding to others. When it’s working well, this is an evolutionary process in which ideas are subjected to criticism and compete for survival, as ideas are replaced by new ones with greater fitness. This process not only helps us to create better software, but is how we move towards a better future for everyone.
The branch of philosophy that deals with knowledge and how knowledge is created is called epistemology. This talk is about the epistemology of Karl Popper and his theories about problem solving and knowledge creation, and how these topics may be applied to software engineering.
- Popper's Critical Rationalism
- Some examples of theories that were
truefor hundreds of years (e.g. Newton's law of universal gravitation) until other theories were found to be
more true(Einstein's general theory of relativity)
Every time we engage in critical enquiry we are helping to evolve our ideas, but it can be hard to see one's beliefs subjected to criticism. However, it is precisely this process that drives this process of evolution that results in the growth of knowledge and better explanations. So, what can we do to help people to feel comfortable to engage in this?
- How to support openness to critical enquiry and a healthy culture of criticism
When we engage in hypothesis-driven development, AB testing, and minimum viable features, we are working to make our work falsifiable and to test our knowledge and theories against reality. When we seek to refine and refactor our designs to capture that elusive sense of rightness, or “seems true” (verisimilitude) we are engaging in processes that Popper placed at the centre of epistemology and the theory of science.
We will look at some of the ways that we can support this.
- Psychological safety: Everyone feels safe to bring ideas, and to challenge them with critical enquiry
- Open-mindedness: All ideas are welcome
- Falsifiability: Falsifiable assertions are tested, and the successful ones embraced
- Visibility: Information flows in all directions
- Authority is used to get things done, not to simply end discussion
- Proven assertions from the past are accepted until more effective new assertions replace them
- The new is shipped on a regular basis
- Alternative methods are not seen as disloyal
- It’s okay to take risks
- Mistakes are embraced when they lead to progress or simply encourage assertion making
Understand that knowledge is something that can be studied and understood, and that this understanding can help our work. Gain an awareness of things we can do to help people feel comfortable to engage in critical enquiry, and of the ways that our culture can help or hinder the growth of knowledge.
Software leaders, product people, developers and anyone interested in problem solving