Skip to content

Up or to the right

Sometimes in describing a concept X in one domain, someone will ask “oh, is that like X’?” where X’ is the same concept or a very similar one, expressed in a different domain.

The quick answer is “Yes”, but that permits a range of interpretations from “X and X’ are the same things in different contexts” to “this domain that’s new to me can be thought of by analogy to the thing I already know. For example, what I know as X’ exists, except that they call it X”.

One long answer is “There exists an idea called Meta-X. Both of these domains contain expressions of this idea, but one represents it as X and the other as X'”. But now, possible interpretations include “Meta-X is pure and both X and X’ are tainted”, “Meta-X is some fundamental proposition about the universe”, “Meta-X is some meaningless fiction invented by Graham to sound profound”, “Meta-X is some attempt to conceptually combine two different real things”.

So neither answer is “correct”, and you can’t present information in a way independent of those trying to make use of it.

{ 2 } Comments

  1. Kent Beck | November 4, 2014 at 1:41 pm | Permalink

    I would appreciate an example.

  2. Graham | November 4, 2014 at 5:49 pm | Permalink

    The ideas that led to this post came up in a discussion of the Java language in an OOP course, where someone who’s mostly experience with C# frequently asked whether this Java feature is like that C# feature. In that case, I’m pretty comfortable with saying yes, although I might give a leading answer like “Yes, C# is rather a lot like Java in this respect”.

    I forget any specific case, but imagine that classes came up. Are Java classes like C# classes? Yes, quite a lot like them. Is it OK to think of a Java class as basically the same as a C# class? Probably, though there are situations where one model doesn’t match the other (I can’t add extension methods to a Java class). Does that mean that there’s some abstract thing called ‘classness’ that both C# and Java implement?

    Well, here we get into difficulty. Plenty of presentations of OOP say something between “OOP is a thing, and it has these things called classes. Java and C# implement OOP, so they have classes.” and “Classes are fundamental to OOP. Java and C# implement OOP, so they have classes.” But then the following statements are also possible:

    • Java is a thing, and it has classes. C# is a thing, and it has classes. Let us invent an abstraction that lets us talk about both, and call that OOP: OOP has classes.
    • Java and C# have classes, and Smalltalk has classes, and these are so different that there is little value in abstracting them, so we will not talk about classes in the abstract. We can talk about Java classes or C# classes, and we can talk about Smalltalk classes, but not about simply “classes”.
    • Java and C# have classes, and Smalltalk has classes, and these are so different that the pure concept of “class” has been muddied by these implementation details.
    • Java and C# have classes, and Self does not have classes, but both are called OOP, so maybe there is no “class” as an abstract concept in OOP.

    There are many more alternative statements. Which I would choose to use depends not only on what I believe, but on who I’m talking to and what we’re trying to get out of the conversation.

Post a Comment

Your email is never published nor shared. Required fields are marked * Comments are moderated; please make sure that your post is civil and valuable before submitting it to improve the chance it will be accepted.