so, OO, right?
What people are doing with Java typically is nothing like OO.
Imagine you're creating your own language specific to your problem domain and solution domain.
That's a beginning.
A language in which you can solve your problems in your domain and stack.
It doesn't exist, btw. Java, JS, Python, C#, Smalltalk -- they're not it. They're the language you build your language in. You don't implement the solution in Java. You implement your solution in the language you've built in Java.
The problem is that you have two locations in space, a bunch of roads, and you want to route a path from one place to the other.
Don't do that in ints, strings, functions, and doubles.
Do it in places, paths, and routes.
And, of course, some verbs go with some nouns and not with others. Imagine modules with a data structure and a bunch of functions that operate on the structure - see how that's nouns and verbs, kinda, if you squint?
Now it's not exactly that, and it's not entirely that, and it's not that only. It's a first approximation - a language you develop that describes the space and how you solve problems.
You grow the language and connect the ideas, and patterns of behavior occur, and some structures become more obviously beneficial than others.
Sure, sometimes the right way to think about the domain isn't the best way to implement it. There may be efficiencies to consider.
And there is always integration with libraries and stuff.
But, hey, the idea is that you don't have to build your huge system with java primitives.
Now, there is an important point here: you can’t stop, design and build a perfect language, and then use it to solve problems.
Language is organic and grown.
You must speak it while making it, and make it while speaking it.
It grows with your understandings.
You know how you sometimes realize something new and wish there was a word for it? That’s an OO thing as well as a spoken language.
You will discover and invent many things.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Readability is a relationship between an artifact and an audience, and we all know that. It's not just the artifact, but here is a funky example.
I got a great new overdrive pedal for Christmas. It looks like this:
The weird bit is that usually the bass/treble EQ controls are together, and the volume/gain controls are together.
This time they're not and that was confusing to me.
Why such a weird order?
In other countries where you drive on the left, the rule is "say left except to pass" and this works. In the US (where we drive on the right) we don't do that. Cars are in all the lanes. There IS a system though.
The far-right lane (remember we drive on the right) is the "ramp lane." People are always slowing to get off the highway, or coming on slow and speeding up.
You'll be always accelerating/decelerating there, so don't drive this one. Go left.
If I'm involved in a task and it's not completed yet, then people may want to talk to me about it or ask questions.
Eventually it's done, and there is less reason for people to need my attention on that topic.
So, the more work I have in progress and incomplete, the more reasons people have to talk to me.
When I have a lot of work in flight, and I'm trying to work on something else, then all those conversations will be felt as interruptions in the work I'm doing now.
So here's what I wanted to think on today: Continuous Improvement.
It has two features to consider:
* It's about making improvements
* It's continouous
Let's take the 'continuous' bit first:
* You're not in it for a burst or for a while, you're in for good.
* Nobody has completed their continuous improvement program. Ever.
* It's not "hopping from rock to rock" - improvements sustain and accumulate.
If you "improve" by expending greater physical effort and endurance, you can't do continuous improvement. Working harder isn't an improvement at all.
You have to sustain if you're to be continuous. Lower the level of effort necessary to succeed, don't brute force it.