Plato for Software Engineers

Both from his opinions and from history, we get the impression that Plato lived in times of fast change. Athens had just become the most powerful city in Greece, but was soon about to be defeated by Sparta and later dwarfed by the Macedonian empire. A large number of semi-professional philosophers were able to prove whatever argument they fancied proving to their audience—or to teach you the art of convincing a judge, if you payed them well enough. The political system of Athens was not very stable.

No wonder, from all this, that Plato describes the world as being the imperfect copy of a better, immutable, ideal world.

Plato's most famous legacy is the theory of ideas. Any object/animal/person is an imperfect copy of an idea: the chair you're sitting on is a copy of the idea of chair; other chairs are copies of the idea of chair; your cat is an imperfect copy of an ideal cat... and so on. Now instead of jumping into a more detailed explanation of this seemingly bizarre theory, here's a modern approach that should make sense to you, and at the same time should look similar to Plato's theory: object-oriented programming.

Object-oriented programming (OOP) models the world as a set of objects, where each object is the instance of a class. Like Platonic ideas, classes live in a world that is at a higher level than the world of objects. Objects cannot modify classes (except in languages where reflectivity allows it—like Python, which is not purely object-oriented anyway), while classes clearly influence what the objects of a program look like. Similarly, Plato's "ideal world" defines reality, while reality cannot influence the ideal world. So in a certain sense, Plato's thoughts are similar to OOP.

Of course there is much more to Plato's philosophy than just some kind of object-oriented thinking, and this analogy is true only to a certain extent. However, with the help of the OOP analogy we can now understand Plato a bit better. For example, we can make sense of his political opinions: according to him we should strive to build a society that is as stable as possible, and where each person has one and only one clearly defined role that is bound to be immutable. This sounds quite easy to model with OOP: for example there could be a certain amount of classes (Artisan, Farmer, Warrior, Administrator...) and from these classes we could instantiate a large amount of objects whose roles are described by their class. We would probably expect each object to have the same role forever, as we wouldn't use an object of class Artisan to perform the actions of a Farmer later in his life, for example. Using OOP to build a more dynamic society would be perfectly feasible, but certainly not as trivial and obvious as implementing the "static", Platonic society we described.

As an important side note, Plato didn't mean his political opinions to be a consequence of his theory of ideas. Surprisingly, the opposite is true: the theory of ideas is introduced in the Republic, a dialog where Plato tries to understand how to define the word "justice". Along the dialog it turns out that justice is very well defined by the idea of everybody carrying out their own task. This definition leads to the characters of the dialog trying to delineate what roles the ideal society should have, and they reach the conclusion that one of these roles should be the role of administrator. Then it is said that administrators should be more clever than the others, and thus should be philosophers. From this, the question "what is philosophy" is raised, and that's where Plato's metaphysics are laid out, including his theory of ideas.

In conclusion, the point I'd like to make is that you, software engineer, are possibly the closest modern analog of what's meant by the word "philosopher". If your day-to-day work involves thinking about abstract concepts like classes, objects, monads, functions, neural networks or whatever tickles your mind, then in a certain sense you are a philósophos, Greek for "person who loves knowledge".