Writeup of the DjangoCon Europe 2019 talk »Nothingness and identity in Python and Django« by Daniele Procida
Plato vs Aristotle
Plato established the idea that form is only a shadowy copy of ideal forms, while Aristotle argues that form only exists as the form of substance, and knowledge and truth require us to generalise from the particular. These contrary views (which in truth are way more subtle and complex) represent two different directions of thought.
Most people find themselves drawn more to one or the other of these approaches – basically bottom-up or top-bottom thinking. You can use this to understand the history of philosophy in the last 25 centuries.
Handbooks are very much Aristotle: functions, objects, attributes galore! Aristotle on function said that the defining human function is rational activity, and the relationship between what a being is and what a being does.
Philosophical concepts are embedded and literally expressed deeply within programming.
Programming features enjoyable philosophical, lyrical sentences, like "Values have types, variables don't", or "Functions are first-class values.", just like philosophy. They also share being hard to understand, the first 20 times you read them.
"Python correctly distinguishes between an initializer and a constructor […] Many languages (like Java) conflate the two, incorrectly calling this a constructor" – see, now you know to feel superior, without even knowing why the side you're on is better.
Even children know what nothing is, but programming manages to make the concept much more complex – just like philosophers do. Both know many different kinds of Nothing. So once you start modeling the world, we need to think about the types of nothingness in the world.
Identity and being
Even children know how to say that something "is", as does the Python beginner. Getting into comparisons and deep/shallow copies, suddenly you have problems with equality and identity.
"It depends on what the meaning of the word 'is' is." – Bill Clinton, testimony before the grand jury.
Plato vs Aristotle?
For Plato, we should focus on ideal forms that exist in and of themselves and define concrete things. Class-based OOP defines abstract classes and instantiates objects.
Aristotle focuses on concrete particulars, in which form inheres, and in which we see the generals. Prototype-based OOP creates concrete objects and clones them to create new ones.
Any debate between a pragmatists and idealists can be mapped to this, for example.
You don't have to choose an answer, but you have to be aware of this dimension, and of the two directions. You'll feel the demand to respond to this question, because you are a programmer. Maybe the people who become programmers are already inclined to philosophical thinking. Maybe programming does something to the way programmers think – but they are definitely equipped with insights into philosophical concepts, and not only logics! Identity, nothingness, physics of existence, ontology, too.
Kant on nothingness or Kant on logical judgement would be fascinating to see from the eyes of a programmer. Or about substance, identity, equivalence, positivity, utopia, types, substance.
Programmers are made for philosophy, and they are genuinely good at it. Let's carry on these conversations.