Monday, November 21, 2011

Note to Fanboys: Don’t Hate the Player, Hate the Game…

This is a bit of a rant.  I get tired of hearing and reading fanboy comments that go along the lines of:  “X rules, Y[,Z] drools…”, “You’re just a hater…"  Blah. Blah Blah. It’s like listening to reverb on PA system.

My irritation stems from an article I read recently about the potential repercussions of Adobe’s move to stop development of Flash for mobile devices.  The article, in my opinion, was well balanced and made the point that while Flash is on the decline, there’s plenty of room for Adobe to maneuver and claim a stake in the RIA/HTML5 world.   What struck me though were the comments.  Several of them were antagonistic and claiming author bias against Flash.

The comments also struck a chord with me in that I recently ran into a buzzsaw-like argument with a client with respect to implementing and deploying a No-SQL data solution against trying to do the same thing in one of the big RDBMSs.  The debate was that they felt that there wasn’t anything their current RDBMS couldn’t do that the intended NO-SQL system did.  Sure, their system could, but it didn’t the specific kinds of things they wanted to do with the NO-SQL system nearly as well.  In fact some of the things were bolted on with the technical equivalent of bailing wire and duct tape, and in the long run, cost them more in overhead and maintenance. 

After the debate, I took some time to reflect on their argument.  The underlying theme that occurred to me was this:  they understood RDBMS; they didn’t understand the NO-SQL system we recommended they implement.  Bottom line:  Go with what you know. 

Yet I’ve seen this kind of resistance to various technologies throughout my career.  I’ve seen the esoteric debates between the DocBook and DITA content models and architecture, the religious orthodoxy of Windows vs. Linux vs. Mac, and more recently, the pissing contests of iOS vs. Android.  The main contention between camps always seems to boil down to “mine or bigger/better/faster/cooler than yours.”  My 5 year old twins do it better than anyone, but to hear it from grown-up professionals is like listening to a murder of cackling crows. 

If we’re intellectually honest, all of these arguments/dogmatic disputes boil down to the same time-tested axiom:  all of us will tend to gravitate to tools/technologies/practices that we’re familiar with, understand, are (reasonably) good at, scratch a particular (set of) itch(es), or just think are cool.  Any variance from these, or the suggestion that something is better/faster/cooler than what exists in your comfort zone warrants unabashed trolling, simply because they don’t fit within our particular paradigm.  

Tools and technology are applied to solve a specific set of problems, under a specific finite set of assumptions. Don’t like the “evil empire” Microsoft, but appreciate commodity hardware? here comes Linux; like beautiful form, closed, but controlled functionality? Mac seems a good fit.  Need structured data without a lot of noise?  JSON might be a good fit, however if your data is rich and structured?  XML is game for it.  Want a single seamless experience for your smartphone?  iPhone; want to use an open-source mobile platform with many choices of devices? Android. 

The point is this - When a problem veers away from these binding assumptions, or new assumptions are introduced, either the tool or technology must be modified/enhanced to fit these assumptions, or other technologies will be built to replace it. 

I’m not  entrenched in the idea that “all tools suck, some worse than others”.  Every tool and technology has limitations -  we need look no further than Joel Spolsky’s seminal work, “The Law of Leaky Abstractions.”  For instance, we rely heavily on virtualized environments for our development work.  Works great for most Linux and Windows environments, but you’re out of luck for Macs.   Does that mean Macs suck?  For working in the virtualized environment we have, it’s a buzzkill; but overall no.  We also do a lot of work with XML standards like DITA and DocBook.  DITA’s great for its flexibility and reusability; but DocBook still has a place too especially for longer content components where minimalism is not applicable.

But now we can begin to boil down tools and technology down to their real “suck factor”:  

In the grand scheme the evolution of technology plays out very much like Thomas Kuhn’s seminal work.  In many cases, it doesn’t build on older work, but rather there is a creative destruction and replacement with new technology.  During that process, there is a polarization between the two technical/philosophical camps.  Eventually, as the new technology attains enough momentum through adoption, the other older technology relinquishes (perhaps not to complete obscurity, and sometimes becoming a small, niche player).

As mentioned above, all tools and technology are constrained by the the underlying assumptions they were built on, and within the bounding box of a specific problem set.  Assumptions are rarely ever static – they evolve over time, and when they do, the underlying premise on which a particular tool or technology is built on will start to falter. 

For example, Flash works pretty damn well on my laptop with Firefox or Chrome – it works reasonably well on my Android phone, even though it does eat up my battery.  Flash basically did things that HTML + Javascript could never do (well).  Along comes HTML5, and the underlying assumptions are changing, and they are building in specifications into the standard that will make it possible to create rich internet applications natively (though not right away). 

Additionally, smart mobile devices are exceedingly becoming users’ primary access to the internet meaning that lightweight, small footprint applications are incredibly important.  Combine these with sprinkle of animosity/frustration/angst/whatever from Steve Jobs and Apple, and the foundations on which your technology are built will inevitably weaken.

Throw in some market forces and what you think is the greatest thing since Gutenberg’s press turns out to be yet another Edsel on the trash heap of “other great ideas”.  Case in point: we can argue ‘til the cows come home that BetaMax was far superior than VHS, but that and a couple of dollars will buy you a cup of coffee. 

So now that I’ve gone on a somewhat random dissertation of my original rant,  I’ll leave all any fanboys with the key message:  Don’t hate the player, hate the game.  Technology comes and goes.  Assumptions change constantly.  Try to keep an open mind and recognize when you’re falling into the familiarity trap.  Improvise and adapt, or you’ll be left behind like yesterday’s news.

Full Disclosure
In full disclosure, and keeping with the theme of intellectual honesty:

I own an Android phone, because my carrier didn’t support iPhone at the time.  I like my Android and continue to go with what I know, and like that it’s built on open source software.  I think the latest generation of iPhones with Siri are pretty amazing though.

I’ve used several Linux variants throughout my career, but do most of my work on Windows because that’s what’s on my laptop, and it works well with the tools I use everyday.  My last real experience with Mac was back in 1997-1998 when I was in grad school.  So I won’t claim any real knowledge here.

I use Eclipse plus numerous plugins for Java development, Microsoft Visual Studio for .NET development (though SharpDevelop is pretty cool too!), and Oxygen for XML development.  I prefer Notepad++ over TextPad, and I like Chrome over Firefox and use IE only when I have to. 

I use JSON when I’m working with jQuery, Dojo or YUI, and I use XML for structured authoring and when I work with XML databases, XSLT, and XQuery and for things like Rights Management.  I like Flex for building UIs quickly for prototypes (hey, demos are in controlled environments, right? :), but recognize its limitations when it comes to device support and will consider my options carefully in a production environment.

I like REST over SOAP over other RPC protocols.  RESTEasy rocks for simple apps; Spring for bigger implementations.  Eventual Consistency is in; ACID is out.

I still think HTML5 is a work in progress and needs maturity among the “Big Three” browsers and think Flash is still a few years from replacement (Firefox, IE, and Chrome/Safari – OK, I mention 4 but I lump Chrome and Safari together for their use of WebKit). While it’s still very early, I’m eager to see if Google Dart has legs and can displace Javascript (I’m not a big fan debugging other’s JS code when it comes to determining data types or scope). 

I’m still trying to grok my way through XProc pipelines and tend to use XSLT 2.0 in somewhat creative ways that it wasn’t intended for, and use Ant for processing pipelines even though I know that it is IO-bound.

And finally, I’m truly into Spanish Riojas right now, and only drink Merlots or Cabernets when I have to :)