Every time I tried to educate myself on the Java language in the past, I couldn’t get past the first couple of paragraphs. The concepts that you need to grasp to get started in Java are not only legions, but they are also mostly abstract, and they are surprisingly rich in synonyms. They even live freely in several levels of abstractness. For example, a class is an abstract concept. Then one could say that an object is a non-abstract version of a class. But, according to the general language idea of “abstract”, an object is actually abstract too. Just a little less so than a class. You can’t touch it. It doesn’t have physical boundaries, it doesn’t really exist in the world. Antoine De Saint-Exupery’s little prince would be hard pressed to ask anyone to draw a method. On the other hand, sheep have this undeniable quality of being non-abstract. It’s what makes them tasty and fun to draw.
So I looked up each abstract unknown word in the dictionary… and it didn’t help. Because each concept’s meaning derives from its relationship to other concepts in this domain, and since they are abstract, they offer hardly any reference to something concrete for the brain to anchor the concept. So I drew a sheep:
And when I was done drawing the sheep, I made a knowledge representation of OOP concepts used in Java. And it was a double win:
- In the process of uncovering relationships between the concepts, I started to understand what they are.
- I have a visual representation of the domain that I can refer to when I’m lost and that I can enrich when I learn.
It’s the second time that I use this tool to understand an unknown and abstract domain outside of some arbitrarily imposed terminology class assignment. I did NOT expect it to be useful in real life. And yet it is. And it’s especially easy to apply to domains that have a large community and textual references, which OOP is. The idea is to identify the hyponymy and meronymy relationships between concepts. It sounds all very exotic, but these terms simply refer to “is a” and “is a part of” relationships respectively. Like so:
Notice the different types of arrows (straight arrows and elbow arrows) for each relationship type. Then you can decorate with additional relationships, verb interactions, chronology, chocolate chips, etc. Fun times really!
So here are my current diagrams for Java concepts:
The last one is clearly work in progress, which represents the state of my understanding: still blurry in the corners. But it’s ok. It’s a living and evolving document.