Skip to content

Instantly share code, notes, and snippets.

@ThomasMeier
Created January 22, 2016 21:23
Show Gist options
  • Save ThomasMeier/06095908c5a7ff009f8d to your computer and use it in GitHub Desktop.
Save ThomasMeier/06095908c5a7ff009f8d to your computer and use it in GitHub Desktop.

Clojure is for Aristotelians

I was reading "Clojure is for Type B Personalities" and it sparked some thoughts I had about the intersection of western philosophy and programming.

One could say Mathematics is an extension of Epistemology. And all theory about computability are an extension of mathematics. I reckon how one thinks about computability and how one writes computable functions are a reflection of a person's natural epistemological tendencies. This is going to be just as unscientific as "Clojure is for Type B Personalities", but hopefully another fun way to think about how personality and programming interact.

Platonistic Programming

One of the most famous facets of Plato's epistemology is his Theory of Forms. The quicker version: All the things that exist around us each abide a form; two chairs are recognized as chairs because they both abide the Form of Chair. These forms are changeless and perfect, the Form of Chair is the perfect chair that has ever and can ever exist. Whether such forms exist as physical things in this universe or a different one doesn't really matter. Neither does it matter now how we come to learn about such forms. Just that they do exist and we can recognize instances of each possible form.

One can make a quick analogy of this: Object Oriented Programming and strongly typed programming are about programmatically representing Forms. The data that the Platonistic Programmer takes on then shall be instances from a multiplicity of primitive or user-defined types.

Furthermore, to preserve that multiplicity of types (forms) and logically cast the most data to each type, there must be a hierarchy of forms. The Form of Chair needs to implement the Form of Support and extend the Form of Seat.

This is a programming about formality and correctness.

Anti-Platonist Programming

Aristotle was a Realist in epistemology like Plato. Aristotle's epistemology also suffers from set of ontological and apprehension problems. Really I would have called this Clojure is for Anti-Platonists, but it seemed even more vague than this already is.

Let's consider some of Aristotle's criticisms of Forms:

Above all one might discuss the question what on earth the Forms contribute to sensible things, either to those that are eternal or to those that come into being and cease to be. For they cause neither movement nor any changes in them.

Forms to not model change, they model only the Noun that they are. The Form of a Caterpillar and the Form of Chrysalis are distinct and neither can accommodate myriad changes between either.

Consider Classes/Types as Forms. Once a set of data is coerced into a form, accommodating change requires storing mutations in place. The action of which is to be hidden or "encapsulated". Classes entail ontological assumptions.

But again they help in no wise either towards the knowledge of the other things (for they are not even the substance of these, else they would have been in them), or towards their being, if they are not in the particulars which share in them

With a type system, a set of data must meet the qualifications of a type. But we run into a problem: Correspondence. To establish correspondence between a set of data and its type, we rely only on intuition and ontological assumption. When someone submits a form, it's just a collection of strings that we have decided should be cast to a type. And the strongly typed system demands strict coherentism (formal correctness) thereafter.

Is coherentism in spite of reality truly necessary?

"Aristotelian" Programming

Let's skip the ugly parts of Aristotle's metaphysics.... Let's say that reality exists in the objects themselves. There is no world of Forms. There are no such thing as Forms. There are just things that share a commonality, but which do not necessarily correspond to a type. Thus we remove ontological assumptions from our work:

  • Make explicit the behaviors, the calculus of change.

  • Strive for data-oriented transparency. Not the production of formal causes behind everything.

  • Coherentism is different from consistency; formal causes are less critical than efficient causes. Untyped computability is under-researched, but can be just as consistent. Being the agent of change is more important than forcing types.

Personality

There are criticisms for both epistemological approaches (and I don't claim I've given perfect representations and interpretations). The intellectual genealogy of the Western world tends to fall into these ways of thinking. Including in the mathematics and computer science communities.

Individuals can carry an epistemology, a sort of personality trait, mixed with Platonistic and Anti-Platonistic threads. Some are more Platonistic and would prefer working with types and classes; these individuals are more comfortable with formality and coherentism.

Others prefer efficiency and consistency.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment