Although not obvious, philosophy actually has a strong relation with programming, at least for me. If you think about it, software code reflects much of how the developer perceives the problem and its solution. Before starting to program, developers spend some time thinking over the problem, identifying important properties and their underlying conne
ctions, a process that reveals their philosophy as the way they perceive real-word situations. Likewise, philosophers are constantly trying to identify the most important properties of the issues they reflect on, like life, conscience or God.
Under this perspective one might be able to make a consistent mapping of the ideas behind programming languages and the ideas that philosophers have come up over the years. It is perfectly reasonable to consider the programming languages as the
different philosophies of a virtual world, in which entities
do exist and
interact with each other. To this respect, even the fundamental philosophical questions receive an interesting transformation: For example "
What is self-conscience?" can be rephrased as "
What is reflection?".
To the fun part, one might ask: "
What if philosophers were programmers? What programming language they would use?". Well, here are my answers!
Socrates : The Hardcore Assembly ProgrammerSocrates was one of the founders of philosophy but this is not where the connection ends. Socrate
s had devised a clever methodology to win every debate. He kept asking questions until a contradiction was reached. So, when someone would claim "
morality is important", Socrates would ask "
How do you define morality?".
In a similar manner, everything in
Assembly begs for a question. There is nothing pre-assumed (at least in pure Assembly, not the distros filled with pre-processed libraries and other junk) and everything has to be as succinct as possible to have a meaning. If you were to work with the programmer Socrates and shared something like "
var x = null;", your partner would start by asking "
What is var?" !
Aristotle : The Influential C ProgrammerAristotle had a huge impact on Western philosophy, founding many scientific areas, fro
m physics to biology. He was the first to closely examine real entities as the
real essence of everything, in contrast to Plato's abstractions. His philosophy is driven by the
golden mean as the key to reaching
morality or understanding life (
matter and
form). The C programming language was equally influential to the design of all other "
programming philosophies", most obviously in the syntactical level. In addition, by the time of its writing in the early 70's, C was supposed to be the
golden mean between the so-called
high-level languages and the
Assembly language,
combining the capability to write machine-independent code combined with the power of low-level access.
Plato : The Idealistic C++ EvangelistPlato is a
huge figure in philosophy, student of Socrates and teacher of Aristotle. That said, I owe you an explanation about the obvious anomaly: How come that C++ is coming after C? Let me explain. Plato is famous f
or his Forms or Ideas, that refer to the archetypical
versions of the things around us. So, the cup in your desk has is a
shadow of a similar oval-shaped archetype in the world of Ideas. In programming words, it is an
instance of the Cup
class.
Similarly, C++ , as an extension of C, is the first language that tries to capture this idea of forms by giving the developers the capability to
abstract the problem before doing anything else. This is a major step by itself, since even if no actual code solving the problem is provided, the classification and the problem modelling are evident and valuable to others. You might wonder, why Plato would not program in
Java. Well he could, but there is another parameter to the story: Plato is not so confident how
symbols can represent his Forms, and clearly prefers the
spoken dialogue (as mentioned in
Phaedrus). In a similar manner, C++, not entirely confident in its direction, remains a superset of C, being
fully backwards-compatible with the more
non-ideal syntax of C.
Stoics : The Happy Perl Community
Stoics and their philosophy (Stoicism) had silently, a far-reaching impact not only to Western philosophy but to t
he philosophy and the global culture as a whole. Interestingly enough, there is no single man behind it, but it was actually a
collaborative intellectual achievement.
Stoicism denies anything immaterial and tries to explain the world through
propositional logic. So, Stoics reject everything
Ideal and concenrate in morality, in which they call us to get free from
anything we can't control, but rather appreciate the
freedom to self-introspect and reach true wisdom. Stoicism rejects political systems and other formalities, and promotes Socrates'
citizen of the world for everyone. People are meant to be brothers, away from distinctions, aiming to contribute happily to a society of friendship and love (
jus commune gentium). You should already notice the influences to most widespread religions, like Christianism and Buddism.
Most interestingly, Perl was created in the 80's, a decade in which finally
logic/functional programming had found its place in the programming languages world. However, the P
erl community (and language) shares much more striking similarites with the Stoics and their philosophy. Perl as a language is to the best possible extent, free of form. Actually the most common phrase in the Perl world is "
there is more than one way to do it" or TIMTOADY for short. The philosophy behind Perl rejects syntactical constraints, giving the freedom to its programmers to code in their style, but at the same time encouraging sharing and contribution to the community. Perl's power lies to a great extent to the existence of
CPAN, the archive of modules and software happily shared by Perl programmers all around the globe. The language's influence to the programming world has been silent, but much more far-reaching than what is immediately observable. One could mention its strong influence to scripting, dynamic typing and functional programming, but it could be summarized to a joke which is familiar to Perl fans:
The next market's crash will be triggered by a bug in someone's Perl script.
Rene Descartes : The True Java GuruDescartes was the first philosopher of the Western culture to stand up against the Classical Ancient Gr
eek philosophy. His core philosophy as mentioned in his famous
Article 7 of the
"Les principles de la philosophie" is based on the concept of
cogito (=intellectual ego). Descartes believes that
doubt is a proof of
existence, and
cogito is the cause of doubt, arriving to the famous
"cogito ergo sum" (=
I think therefore I exist). The
cogito is not just another process we do, but actually
all we do. So, what we want, imagine or feel is directly accessible through it. Descartes nearly '
proves' the existence of God, by the fact that we are able to
think about the
necessity of his existence. In fact any
Ideal or
Form can be directly accessible by our
cogito. Descartes also marks another landmark in the history of philosophy: Beginning from his work, philosophy is trying to avoid confusing abstractions and to establish a succinct, almost geometrical form. Descar
tes presents his ideas nearly in the form of theorems.
Descartes would be the perfect Java guru. Java was the first
strongly-typed language, in which everything must have a
type (or share a
Form) before it is being used, matching perfectly the Descartes' efforts to be always exact for what he is talking about. Descarte's
cogito is in fact a revisit of
Plato's Forms, with a slight variation in which ideals exist because we think about them and not in another universe. To that respect, his philosophy is purely
object-oriented, as the solutions in which we arrive, are direct products of our intellects.
Immanuel Kant: The First Python Programmer
Kant found th
e 'easy' way to the pantheon of philosophy by rejecting two prevailing and opposing methodologies, Descarte's
cogito and the empiricism
, by shouting '
It's both!'. Kant investigated how humans reason, claiming that experience offers the truth, but which has already been filtered by intellectual judgement (
a priori). At his mature years, he examined
aesthetics, and the theory trying to explaining the way we perceive
beauty. Kant was an extremely concise personality, being obsessed with tideness and exactness, doing the same things, exactly at the same time every day, to the extent that his acquaintances were 'using' him to calculate time!
Similarly,
Python is a programming language that tries to combin
e different solutions and promote it as a new one. As a language it accepts multiple programming paradigms, from object-oriented to contract-based programming. Python programmers reject the free formats of languages such as Perl, and although they borrow several features from it, they emphasize on
simple and
explicit code. Python becomes so 'obsessive' that imposes
whitespace identation as delimiters for code blocks to its users. In the "Zen of Python", the first out of the 19
commandments, the first one is "
Beatiful is better than ugly". Kant's obsession to beauty and aesthetics, makes him
triumphantly the first Python programmer ever.
Ludwig Wittgenstein: Natural Born Haskell Programmer
Wittgenstein re
formed Western philosophy going as deep as to examine Socrates' 'recipe' for debate success. His monumental work, the
Tractatus Logico-Philosophicus, can be compared to a hard graduate mathematical book in Logic. Wittgenstein identifies the semantic and symbolic forms as the root of
all philosophical problems, leaving the rest that can be explicitly defined as the subject of science. Using pure logic, he deducts that language inherent ambiguity is what makes philosophy repeat itself, and closing his book with the famous '
What we cannot speak of, we must pass over in silence', claims to have solved,..., all philosophical problems.
Wittgenstein is a natural born Haskell programmer. Haskell was not the first function
al programming language in town, but from late 80's and onwards, it has prevailed as the most important among the group. Haskell is not meant to be accesible by anyone, and just like the
austere and succinct Tractatus, as Wikipedia states, it has a strict mathematical and logical form. Haskell, being purely functional, goes as deep as redefining the way we treat abstract data types, the same way Wittgenstein goes back to Socrates' dialectic to reform modern philosophy.
These all may sound weird, but for programmers, it is easy to realize these deeper connections. I am not quite sure if the same holds for philosophers. Anyway, at least by now, it should make much more sense why in every article in Wikipedia, presenting a programming language, there is special section named "
Language philosophy".