Philosophy of Software Design

Philosophy is the unending thread of questioning and wisdom that the human species has developed from the first time we could share ideas with each other. It must be relevant in everything we do. Just so it must be relevant to designing and building software. 

I strongly believe that philosophy is a missing element to the way we design software, and that in reality it has influenced software design from the very beginning. 

Functional programming is reminiscent of the perfect numerological world of the pythagoreans thousands of years ago. Object oriented design sounds a lot like Platonism:

"Platonism is the view that there exist such things as abstract objects — where an abstract object is an object that does not exist in space or time and which is therefore entirely non-physical and non-mental."[1]

Does any of this sound familiar? Consider falsificationism and unit testing:

(epistemology) A scientific philosophy based on the requirement that hypotheses must be falsifiable in order to be scientific; if a claim is not able to be refuted it is not a scientific claim.[2]
I could carry on with more examples, but I am more interested in the implications of this. 

Designing software is very hard. It is hard because we are tapping into something very fundamental about the human perspective of the world. When I think of software I consider it as something so fundamental and yet so much derived from thousands of years of intellectual development of our species.

The implications are astounding. The most obvious one is that if concepts in our world of software are derived from the philosophical zeitgeist, it means that understanding and learning philosophy could help us to design better software. 

The other less obvious implication is that software itself deserves its own branch of philosophy. The reason is that software is an extreme intersection between rationalist and empiricist thought. How do we apply the ideas from these schools of thought successfully to make better software? What can epistemology tell us about how we should go about telling when our software can be said to be ready for production? What is the purpose of building software? Is it a means to an end or an end in itself?  When we write code, what is the best way to model our intentions in terms of defining our own metaphysics? 

The field of software design, compared to other intellectual fields like mathematics, physics, engineering, art and literature is very young. Maybe we are struggling so much because we refuse to see it as something else than a business tool? Writing was invented to do accounting of assets, and it has become so much more. Perhaps software is much more than we think it can be. Maybe it is more than we can imagine it to be right now, and that is why we need philosophy.

[1] https://plato.stanford.edu/entries/platonism/ 

[2] https://en.m.wiktionary.org/wiki/falsificationism

Comments