Software Platonism

An approach to software development according to which an ideal program (a Platonic form) for a given problem exists, and the task of the programmer is to give existence to as faithful a representation of the ideal as possible. The notion that the ideal program has a real existence, independent of any code, design, or analysis, distinguishes SoftwarePlatonism from other philosophies of software.

Gee, this name is quite misleading. I've studied a good many of Plato's dialogues, some in the original Greek, and I'd hesitate to use the name Plato the way you do here. Why not just IdealSoftware?? -- TheDoubter?

You don't think this is related to Plato's ideal "forms" as per the "shadows in the cave" story?
That is, the programs we write are just the shadows of the "true and real correct solution" that exists, and which we would use if we only knew all the requirements and how to implement them correctly? -- SomeCrackpotDefender? ;->

The name strikes me as appropriate. Plato's idea is first that classes (or forms) are different from objects. You can take away all the objects, and the class remains. Plato expands on this, pursuing the idea that classes are more perfect. For example, the ideal circle is a lot rounder than anything I've ever drawn with my compass. The reification of the idea is always a little shabby compared to the idea itself. I have purchased software that is less ideal than its concept, and, in particular, less ideal than its brochure.

-- SteveMetsker
This ties in with one of my rants about heads-down-hell-for-leather-engineering-only-dam-the-torpedoes-trade-schools - the lack of breadth in education can hurt a technical professional. I took one Philosophy course in college, which discussed Plato and forms. Years later I took up OO, and wham! I heard that prof's voice again - forms are classes and instances objects. All the long, bad examples in the OO textbooks could be compressed into a paragraph, if every programmer read Plato. -- Pete Hardie

This is great!!! I started a discussion called InformationAsCurrentAnalogy, which lead to the same concept of the IdealProgram?. However, in the InformationAsCurrentAnalogy discussion, I go a step further and ask how every aspect of the IdealProgram? can be defined. Does anybody have any ideas?

-- AdamThorsen

Patterns, abstract data types, and the like can certainly be seen as 'ideals' in the Platonic sense. However, thinking of software in these terms implies a lot more stability than most software really enjoys. Platonic ideals are eternal, unchanging, perfect, while software is constantly evolving. Moreover, the metaphors which underly it often seem much less perfect given a couple of months. I prefer to think of software as an organic system evolving and adapting under a number of constraints.

-- JamesWilson
In a particular harmful form, SoftwarePlatonism can excuse a multitude of sins, particularly the disinterest in writing any actual code until theoretical analysis can discover the essence of what that code should be. (cf XP bugaboos like BigDesignUpFront and AnalysisParalysis) Personally, I don't believe in essences of anything in life or in software, which seems to make everything much easier for me ... -- francis

Amen. The danger of Plato's theory is imagining the forms exist somewhere outside our nervous systems. We can imagine an ideal horse, for instance, and we use that ability to quickly classify horses we've never seen before as horses, but that doesn't mean there's an ideal horse wandering around the universe. It's all in our heads. -- EricHodges

As a curious side-note, Islamic illustrators did fiercely believe in an ideal horse, because they had to. Religious proscriptions prevented them from drawing the real world - to try to duplicate the world was to imitate Allah, and therefore an act of hubris - so they insisted that every king they drew was the essential King, and every horse they drew was the essential Horse. Accordingly, they developed a style of illustration that was ornamentally beautiful but did not draw on observation of real-life. (For a really great novelization of this tension you could read MyNameIsRed?, by OrhanPamuk?.) -- francis

Moved from ManyFindObjectOrientationHard

I blame [OO confusion] on the lack of a classical education. OOP is nothing more than Platonic Ideals, Substance and Attributes. Take an intro Philosophy course, and OOP is a toddle. -- PeteHardie

On NPR about 5 months ago a guy was hawking a book suggesting that Plato's ideas are rather arbitrary, and that other legitimate competing thought systems exist. He even pointed out some examples of flaws in "objectness" thinking. For example, object thinkers would say that wood floats (on water) because of some property of wood. However, eastern philosophers correctly surmised that it was the relationship between water and wood that was the key, not properties of just one or the other. The relationship tilt in eastern thinking allegedly comes about in part because of the complex extended family relationships and related behavioral rules often found in and around China. The book was not (intentionally) about IT, I would note. I could not find it on Amazon though. Bummer. (See BundleSubstanceMismatch)

Do you recall the title or author?

Sorry, I don't. I would probably recognize it if I saw it, though. Every few months, I spend several minutes looking for that damned book on Amazon etc., and for the life of me cannot. I tried several dozens of keywords and combinations.

And by any chance do you recall if the "eastern philosophers" managed to "surmise" exactly what relationship? Or was it just some mumbo-jumbo about dragons, or similar?

It was mostly about the psychology of writing styles and was written by a scholar.

That applies only to ClassOrientedProgramming? (Java, C++). A PrototypeBasedProgramming language like SelfLanguage has no use for platonic ideals: all objects are on equal footing. A GenericFunction language (CommonLisp, Dylan) still has echoes of Platonic forms, but it's really more about simple factoring (types are objects in those languages too, they don't have any special standing). -- JonathanTang

Take EwDijkstra's standing (that philosophers should not have any intellectual standing) and all of a sudden OO is no longer such a great idea. I don't subscribe to Dijkstra's attitude vis-a-vis OOP, but it really is childish to blame it "on the lack of classical education". By the way, this topic is already covered in ObjectOrientedDesignIsDifficult and ObjectOrientationIsDead. -- CostinCozianu

I didn't mean to imply that Plato was particularly apt for a world philosophy, just that Platonic Ideals are a good model for class-based OOP. BTW, does Self not have inheritance? -- PeteHardie

And why should anybody give any damn about Platonic Ideals? I doubt there are any good for models. In a language with prototypes, you actually don't need inheritance - you clone an "inherited" prototype object and replace some of its methods.

Platonic Ideals are a good example of the relationship between a class and an instance. The Platonic Ideal of "Chairness" and a given chair map well to a class Chair and an instance of Chair. There are even parallels to multiple inheritance, with those school chairs with the built-in desks showing as having both Chairness and Deskness.

And why should anybody give any damn about Platonic Ideals?

  1. They illustrate an early attempt to describe how human brains categorize stimuli.
  2. They have influenced much of European philosophy.

I don't like the idea of somebody else telling me how I think. I am the best authority on how I think. And how I think often does not seem to fit how others think. There may be no universal thinking model. (Yeah right. Can you describe the exact process, justifying every step, by which you decided to post that? The human brain cannot analyze itself to any good degree of precision, because the conscient mind is a very HighLevel process, that can't look back into the LowLevel? processes that made it possible, by example, the subconscience, by definition (there is no Reflection API for the brain).)

Do you mind the idea of somebody else telling you how you digest food or produce insulin?

Poor analogy. Our mental organizations probably have more variance than our digestive construction, at least at the larger-scale. True, our neurons are probably all similar from a biochemical standpoint, but at the base all programming languages come down to 1's and 0's likewise, yet are very different at the higher level. Further, the mechanics of digestion is much better understood than human thought. Understanding human thought is about where chemistry was in the 1600's.

I didn't say Plato was accurate. Just early.

The analogy isn't about variance, but opacity. I can't see how I produce insulin, nor can I see how I think. Without imaging devices, I can only think about how I think.

Re: I don't like the idea of somebody else telling me how I think.

I do like the idea of somebody else telling me how I think. I am fairly smart (sometimes) but I don't know everything. Perhaps somebody else's observations about, for example, the influence of language on thought processes would prove deeply meaningful to me. And if it turns out that this person's model doesn't match how I think, well then I won't be offended, I just won't use what they say.

I don't mind suggestions or thought experiments, but when somebody tells me that my thinking approach is "wrong" just because it is different from theirs or in-style paradigms, it is time to stop and ponder first. For example, is OO supposed to model the real world better, or human thinking better? The second seems to assume that most humans think similarly. For some reason I think in tables and relational-like ways, even before being heavily exposed to databases. Now the object people seem to be telling me that such is "wrong". Yet, I am highly productive with table-centric tools. You can tell me I am perhaps wrong if I am not productive but don't match you, but not if productive and not matching. OO just does not match the way I think, and would probably require a huge brain overhaul in order to do so.
