If I had written Apache Camel, instead of my personal heroes – James Strachan, and Claus Isben – I would have completely screwed it up.
A nightmare. Allow me to clarify:
Explicit Everything – a Religious Belief:
In my world, the very word “implicit” is synonymous with Evil.
Implicit languages, implicit conversations, implicit meanings – these are all destined to confuse and sometimes even disrespect people. Or at least, disrespect their time.
Everything implicit, to me, is like an “in group” where only the initiates know the secret language. You can join the group, but only after you learn some implicit meanings. To heck with that.
I could go on and on, but it would only be more of the same. Law, governance, politics, culture, implicit vs explicit is a key issue everywhere, and a vast source of mischief.
Camel Works. Because of Generics. Implicit everything…
My worst nightmare is projects like Camel, where I cannot use explicit hierarchical topologies to walk a tree of types or functional options.
Camel uses generics, casting, and “type converters” to allow what amounts to an “any to any to any” kind of message passing. All without your explicit knowledge. If implicit was evil, this is evil on steroids.
But instead of being evil, it just works! Implicit is what allows the vast, and growing, array of Camel components and other usages to just work. It may make me appear lazy, (I am), but the extra work of testing at runtime really isn’t that bad, after making the mental adjustment.
Topologies as a Police State
Compare that to my chosen approach: Everything is a finite, known, hierarchical topology.
Except who makes the topology? Is it me, you, or ??? Now, we have a classic case of the Police State to the rescue. I would probably have installed myself as the policeman, and Camel would never have grown beyond my ability to police the topology of types and functions. That would be amount to 1% of it’s current scope.
But that’s OK, because it would never have grown anyway. Nobody even likes participating, where a police state is involved.
I have ragged on and on about Apache Camel and how needlessly hard it is to learn. I am not completely off, in this assessment.
But the point is that there is some magic to this design. It’s difficulty is in it’s brilliance. And it isn’t even that hard, you just have to get used to testing well at the runtime level.
No. That isn’t so hard.