Object-oriented computing is a good, first baby-step towards OntologicallyOriented programming. OO has been successful for precisely this reason. Now we need to move on.
The next baby-steps are easy to see. If you read Aristotle's "Categories," he spells out much more about how humans model the world than today's OO languages include.
First, we need support for temporality. In the real world (as humans see it), everything changes with time. In today's OO languages, there's no built-in support for temporal modeling. We need to fix that.
The other thing we need to fix (the next baby-step) is to provide support for modeling relations. In the real world (as humans see it) relations are as fundamental as objects. For example, if Aristotle is taller than Plato, then clearly Plato is shorter than Aristotle. Unfortunately, our object-oriented languages don't support this notion. They're perfectly happy to render a model that has Aristotle taller than Plato, and Plato taller than Aristotle. Prolog and relational databases do not have this problem. Alas, our OO languages do.
The next steps in OntologicallyOriented programming are to add programmatic support for modeling temporality and for modeling relations. It's almost obvious! We just need to do it.
So, let's get with it, and redefine OOPSLA to meant Ontologically-Oriented Programming Systems, Languages, and Applications! - sjm
According to George Lakoff in "Women, Fire, and Dangerous Things: What Categories Reveal About the Human Mind", Plato was more right than Aristotle. Aristotle said thatpeople categorized things by asking questions about them and putting them into various categories according to the answer. Plato said that people categorized things by how close they were to the "ideal". Traditional object-oriented programming is Aristotelian. The closest we have to Platonic computing is probably languages based on prototypes, like Self, though in practice the two kinds of languages tend to be used in similar ways.
I am trying to figure out what you mean by ontology-oriented computing. To me, that means that the programmer is explicitly
building a model of the world. Therefore, programmers must know not only software engineering and the problem domain, but also philosophy. Is that what you mean?Note that the Scandinavian branch of OO (which is actually root, not a branch :-) ) is based on the view that programming is modeling. But the "software engineering" branch of which Robert Martin is perhaps the most visible proponent says that OO is not primarily about modeling, but about software organization. And these are not the only views on the nature of OOP. -RalphJohnson
In object-oriented programming, as Ralph points out, “the programmer is explicitly building a model of the world.” Now, in my view, the programmer need not understand much philosophy in order to pull this off. Languages like Smalltalk, Java, and C# directly support the programmer’s view of the world: there are instances and classes; classes have attributes; instances take actions on other instances. These languages are ontologically-correct, to a degree. They embody the same ideas about reality that the programmer has.
To me, this begs the question: what other ideas about reality does the programmer have, if any, that the languages Smalltalk, Java, and C# don’t? I believe that Aristotle gets us started here, in his book “Categories.” He points out that, of course, everything varies with time. Also, relations are as important as objects. So, the idea of OntologicallyOriented programming leads quickly to the idea of constructing new languages that offer more support for how programmers (and any humans) think about the world.
A more OntologicallyOriented language will make it easy to model a fact like “Mary moved from 123 W. Street to 27B College Avenue.” Of course, you could model that with assembly code, or with Java. But an OntologicallyOriented language would, I think, allow modeling such a fact with a single statement.
Prolog is already a more OntologicallyOriented language, with respect to modeling relations. For example, the statementtaller(aristotle, plato).
models the “fact” that Aristotle is taller than Plato. It builds in the associated fact that Plato is not taller than Aristotle. This fact is much more difficult to model in, say, C# (in my view).
The Self language makes it easy to model facts like “my dog is just like Lassie.” That’s a prototype-based fact, and thus much easier to model in Self than in, say, Java.
Humans think in terms of classes, instances, prototypes, temporality, and relations – at least! Object-orientation is only the beginning of Ontological-orientation. We have benefited a lot from building in support, right into our languages, for how humans (including programmers) view the world. The idea of OntologicallyOriented programming is that we’ve only just begun this journey, and we have a good map of the next steps. - sjm
I would prefer to see models rather than modeling languages.
In the AI-lingo, I'd rather see ontologies than languages for writing ontologies. I believe that the way to better languages is to look at what we want to express in them. -RalphJohnsonis a lot of work on this sort of thing in the AI community.
In other words, if you ignore the AI community (which mostsoftware people do) then you miss a lot of existing work in
this area. There could very well be people in other areas whoare doing this, as well. Data modeling people like David Hay and Len Silverstein, for example, and the "business rules" people. -RalphJohnson
Yes, yes. How can we EmbraceTheAICommunity? - sjm
Speaking of missing stuff in AI: I was an AI researcher for 15 years. Much of the work we did could be described as figuring out how to program large systems that had pieces coming and going, trying to solve problems no one knew how to solve. In short, it was very aggressive and wide-ranging systems research. Baby versions of that work can be seen today in web services etc. But we as a discipline (computer science) have decided to throw all that work away because of its name. -rpg
I've felt for a long time that one of the greatest problems in 'CS' is the gulf between the AI and the Systems people. Both camps lost credibility with each other a long time ago, and its still surprising to me how little crosses that gap.
And it results in a great deal of harm. There's a lot the 'AI people' have studied about representation, modeling, knowledge... that could really infuse CS and vice versa.
This is an old story of course. But I guess its worth mentioning because I think one thing that OOPSLA had, back in the day, was more people who had bridged this gap, or at the very least were sensitive to this gap. - gregor
My naive view was that Systems people lost respect for AI folks because the latter used soft, dynamic languages like Lisp and were trying to build systems that responded to changing requirements-and because they didn't respect the goals of AI researchers. Do you think the loss of respect of the AI people for Systems people was for symmetric reasons or because the Systems people were not trying to help solve the AI systems problems? Or what? -rpg
I don't have a detailed analysis of this. But I don't see it so much as the goals of the AI researchers, as the total wackiness of some of the things that they (we) were saying. Today we see some of the claims as overblown (a frame system will capture enough knowledge to get the intelligence of children playing with blocks). I think they saw it as overblown then.
I don't know about the other direction. For myself, the fact that Systems people seemed just never care about how their code looked, made it hard for me personally to pay as much attention as I should.
But I don't know how much of this is key to the main topic of reinvigorating OOPSLA. -gregor
I think you might have stumbled across one of the things that might help understand how to reinvigorate it. It might not be too far off to say that OOPSLA is the conference for people who care about how their code looks. This is similar to what was first stated on the CoreMeaning page ("...it's about a certain philosophy of what makes good software...").
If I think back to some of the important people who helped start OOPSLA, it included people like Danny Bobrow who was both an AI and a systems guy, and who (I thought) cared about what code looked like. The whole CLOS Smalltalk dynamic languages crowd, representing people in or near AI at that time, were important participants.
A main concern of patterns is how to structure systems (and other things) so that they are livable-in by people. Patterns people care about how the code looks, how the architecture looks, and what it's like to live in, maintain, and use the code. Object people (in the early days at least) care about the elements of the programming language mirroring how they thought about the world. Aspects are, I dare say, about making it easier for people to modularize their code in ways that support their thought processes. These are or were significant participants at OOPSLA. -rpg
Smalltalk was crafted based on an observed and assumed ontology of naive users and children - not the ontology of programmers. Alexander sought patterns that reflected the ontology of naive beauty - not the ontology of architects.
OOPSLA used to be a place where you could hear big ideas about various "user ontologies" and how they might be realized in software/systems. Keynotes and applications or "idea" papers (the things that might show up in OOPSLA Essays)created the buzz that attracted people to the conference. -davewest
not sure if I am representative, but this sounds like a promising thread -- these ideas are both powerful and important -- we need to be sure the packaging is such that we do not only attract people who have heard the word ontology before or know how to pronounce it :) -CeciliaHaskins
For another take, see ConferenceOnBusinessOntologies