I was asked by an attendee last week after giving a “What you need to know about OO on this project” presentation what I would recommend they read as deeper study. Once I regained my composure, (after being challenged with the impertinent thought that my 90 minute talk did not in fact reveal all the secrets of the Object Oriented software development world) I suggested one or more of the selected works of Mr. Grady Booch as a good starting point.
While the concept of objectivism/Object Oriented philosophy had been promulgated in the late 1950’s by Alisa Zinov’yevna Rosenbaum (more widely known as Ayn Rand), it was people like Grady Booch that crystallized the concept and gave it voice not in philosophy but in software development. What remains today IMHO the single most important positive step in software systems is not OO programming but the OO concepts and modeling techniques developed by Booch et al that allow us mere mortals to comprehend the incomprehensible.
Why is it incomprehensible?
I got coaxed/conned into participating in a psychology research experiment when I was in University(Yes, My GF at the time was a psych major). The research was essentially focused on determining how many things the human brain could track simultaneously (or dimensions). Experiment #1. They started with a basic 2-D cartesian graph (think back ..you know the XY axis thing!) then added the Z Axis (3 dimensions). All of us can picture and track 3 dimensional objects (Length/Width/Depth). They then added the fourth dimension and caused that 3D object to move through space (errantly described as the “time” dimension”). Then the 5th, 6th, 7th dimensions etc. That’s a much more difficult image to picture/track in your mind. The same testing concept was applied to a second test using a Matroyoska Dolls concept.
Briefly shown each different doll and of different sizes, we were asked to recall and assemble them in our mind in order without seeing them again. Most people can do 7 (+/- 2) correctly each time. (Being an oddity I could do 14 consistently in the experiment and about 8 dimensions). My point however is that the human mind has very well-defined limits to the degree of complexity that it can deal with before it blows a fuse.
Now consider a 100,000 function point Enterprise System in any large corporation. If it’s old, potentially 5 to 7 million lines of software code. Having trouble visualizing how much code that is?
It’s a bit more than 20 boxes of copy paper with printed code on every line of every page. Thousands upon thousands of programs where data and functions interface in many thousands of ways, some well documented and others long forgotten. It is simply not possible, however smart or clever you think you are, to comprehend the whole system in detail. Enter OO modeling concepts….
I will mooch the following line from Booch simply because it is excellent and it’s a much better line than I could come up with.
“In software systems… I take things that are incredibly complex and I help organizations squeeze them down so that they are not only simple, they actually disappear. The best software is invisible to the world.” – Grady Booch 2008
To deal with complexity the human mind can either aggregate or abstract. That’s about it. The best techniques and modeling systems allows us to find good ways to either aggregate or abstract the complexity to a level where the software is “invisible to the world”. If you look at a model and can’t easily figure it out and the system it represents, you’re not stupid… It’s a bad model.
Some consultants in the IT business seem to make their living taking the complex and making it more complex as if the test of their expertise was their ability to find the most creative ways to obnubilate the definition of the system.
It is in fact the opposite that is true.
The expert is the one that can take the complex and make it simple and relevant to the client. Be the expert and just use the words like “obnubilate” to make fun of those that truly are not.