"If at first, the idea is not absurd, then there is no hope for it."
- Albert Einstein
Peter and I were talking the other day about how absurd the ROC (resource oriented computing) model can appear. This came about because I'd become re-acquainted with the inner workings of the NetKernel kernel whilst implementing a number of low-level changes for the upcoming version 5 release.
How can something so convoluted that every atom of computation resolves to an endpoint through a set of arbitrary and dynamically interrelated address-spaces by an abstract identifier possibly work? These computations are then cached using a deep dependency based validity model and their computation costs determined and accumulated to minimize future computation. Surely all this complexity can't work, or at least can't work well?
Now, if you're thinking what I thought on first seeing Einstein's quote then you're going to be saying to yourself "yeah sure, but I bet that there is no hope for most of the absurd ideas either!" And yes I can't argue with that, but it's the converse that's interesting; why is it that most enterprise software lacks any absurdity? Why is it in general that new hot trends and technologies are so conservative in ambition and only willing to make single safe steps forward? Why do the same old ideas get rehashed in new clothing again and again destined to fall short? (*1)
I find the conservative nature of the software industry very difficult to understand. We are working in an industry with the most fluid of materials: concepts and information. And of course, with NetKernel, we have taken a very different tack. So trying to think of some reasons, I came up with the following:
- Big business gets stuck with the innovators dilemma - big new ideas that disrupt existing markets are not usually fostered.
- Good ideas are in short supply - if there is one takeaway from entropy it's that there are many many more disorganized, broken or useless permutations of state than good and useful ones.
- Abstract is abstract - there is no getting away from the fact that NetKernel's power and ultimate flexibility comes at a price. That price is the need for a conceptual leap. The dictionary definition doesn't just describe abstract as "expressing a quality or characteristic apart from any specific object or instance"(*2) but also "difficult to understand; abstruse". Yet abstraction is absolutely needed for us to make sense of the world. From the day we are born we are finding and refining our abstractions.
- Right place, right time...
With the imminent release of NetKernel 5 we have a solid, rounded platform, battle hardened and embodying the state-of-the-art ROC. There is still work to do however. We must now turn our attention to the learning curve and make the abstract clear, uncomplicated and obvious. If you are using NetKernel now you are one of the self selecting few. For every one of you here there are many more who have bounced off the absurdity or the subsequent learning curve. This is our next challenge...
~~~~~~~~~~
*1 I understand some of what I've said with regard to the general lack of ambition in software may be controversial. (Please comment.) I am of course generalizing; there is lots of great software out there often hidden away quietly doing it's job well. But it does frustrate me that we as a society could be benefiting hugely if we could more economically create and maintain large software systems. We need to remove the inherent brittleness that goes right to the foundations. That is what ROC does.
*2 dictionary.reference.com

Your post (and your quote of Einstein) got me thinking about something like... "a theory of absurdity relativity". :)
ReplyDeleteI.e. Programmer X in Enterprise E uses technology T and finds the thought of switching to technology T' absurd.
While Programmer X' in Enterprise E' *already* uses technology T', and finds the thought of using T absurd.
What each finds absurd is relative to what they currently know and have spent time learning to use.
And they're using those technologies in companies within groups of people who also use the same tools and also think like they do.
So the slowness of enterprises to adopt new tools and technologies makes sense to me when I think of it as a social thing akin to (natural) language.
So a company memo in the Midwestern US stating that "starting tomorrow all employees must speak Chinese" sounds absurd.
Unless you're the guy on the third floor by the window who's last name is... Chang. :)
The serious question is whether reframing NetKernel to feel more like a "dialect" of more popular "enterprise" tools/technologies broadens the appeal or... ruins it. :)
Last thought - cool book: http://www.amazon.com/Myths-Innovation-Scott-Berkun/dp/1449389627/ref=sr_1_1?ie=UTF8&s=books&qid=1318076066&sr=8-1
clarification that I was thinking out loud regarding Tony's post saying "we must now turn our attention to the learning curve and make the abstract clear, uncomplicated and obvious" when I wrote my comment above about "reframing NetKernel to feel like a dialect of more popular enterprise tools".
ReplyDeleteAnd I didn't say it but what I was really wondering was whether significant parts of today's java community (ironically to me) equate "clear and uncomplicated" with "working like or together with Spring and Hibernate/JPA". Where their brains have been shaped to feel "POJO-Oriented-Computing" is the way, as opposed to NetKernel's "Resource Oriented Computing".
And if so could concrete examples showing how to use NetKernel with Spring and Hibernate help people to understand and embrace it more? e.g. With transreptors converting the POJOs to XML/JSON/etc. that can be inspected "time machine debugger" style in the Visualizer. I would think people would see value in that - there's really nothing similar that I know of!
And the latest Spring uses annotations a lot, would/could NetKernel accessors be specified using annotations ala Spring MVC? Or could NetKernel's SOURCE/SINK/DELETE/etc. verbs be mapped to JPA annotations in a way that would allow NetKernel's RESTful services to be accessed ORM style ala Hibernate? Maybe not (I haven't thought about this deeply), but what made me think of it was something simiar for RDF:
http://weblog.clarkparsia.com/2010/05/07/rdf-for-fun-and-profit-using-empire
Not saying so much these are great ideas as much as Spring and Hibernate are so popular they might draw "mindshare". The other such community I see building of course is the server side javascript movement with NodeJS.
Really strong NetKernel examples using JSON with Rhino, working in conjunction with Node (any chance a NetKernel module code be expressed as a CommonJS ssjs "module"?), might capture some interest from that community...
I guess all of my comments are directed at whether NetKernel can be "revolutionary" or whether it needs to be "evolutionary" to be perceived as "simple" and not "absurd". :)
(end of my comments - too many sorry :))
Hi Darren, I think you make a lot of insightful and useful points.
ReplyDelete> Where their brains have been shaped to feel "POJO-Oriented-Computing" is the way, as opposed to NetKernel's "Resource Oriented Computing".
I think this is a certainly a significant factor.
> And if so could concrete examples showing how to use NetKernel with Spring and Hibernate help people to understand and embrace it more?
Though I think directly this will not work because the approaches are so orthogonal.
> With transreptors converting the POJOs to XML/JSON/etc. that can be inspected "time machine debugger" style in the Visualizer. I would think people would see value in that - there's really nothing similar that I know of!
This could certainly be done!
> And the latest Spring uses annotations a lot, would/could NetKernel accessors be specified using annotations ala Spring MVC?
We have received a lot of feedback about reducing our dependence on XML for configuration and programming. There are a lot of competing approaches to doing things other ways. It's something that we need to think hard about. XML is good from our perspective because it's very flexible, it's consistent with everything else (in NetKernel) and it's easy to utilise and interface to internally. However the downside is that a lot of people don't like it's verbosity and unreadability.
> Really strong NetKernel examples using JSON with Rhino
And similar arguments can be made with groovy, python and now ruby. NetKernel's architectural composability and modularity could be a big bonus to a lot of these languages. Promoting NetKernel to these communities might well find it more allies.
> I guess all of my comments are directed at whether NetKernel can be "revolutionary" or whether it needs to be "evolutionary" to be perceived as "simple" and not "absurd". :)
Yep. That sums it up well. I think for NetKernel to be interesting and stand out as something worthy it must be seen is revolutionary but we need to work harder to build the path for people who see that to follow and that must be evolutionary from what they are doing and using today.
Hi Tony just saw your comments... they were making me think about how different people I've worked with and different projects I've worked on have tended to embrace (sometimes religiously!) one particular "representation format" and/or one particular programming language over the others.
ReplyDeleteJust in the last year alone, I can categorize three such groupings: xquery/XML, JSON/JavaScript, and POJO/java.
I absolutely love that NetKernel can automatically convert/transept formats, and easily use multiple languages.
But - I may be cynical but more and more I feel I'm in the minority that most people really do settle into their favorite toolset and feel disinterested or overwhelmed by too many alternatives.
So it's ironic to me that NetKernel's polyglot nature should be it's greatest strength for enterprises, but I almost feel it makes it a harder sell than something less capable.
I.e. A NetKernel demo that goes end to end using JSON configuration and Rhino accessors and JSON services would appeal to some folks I've worked with and turn off others.
And vice versa for a NetKernel demo that used plain java for configuration (ala guice) or spring for configuration, and POJO representations.
Or for that matter, that used XML and xquery for the transformations.
But in my experience such examples appealing specifically to the non-XML "community" would be very helpful to appeal to the developers I personally know and work with.