You can’t teach height. This piece of wisdom, attributed to legendary Celtics basketball coach Red Auerbach, has long been my guiding principle in the hiring of software developers. I’ve always tried to minimize the “required technologies” list that HR asks for and, if anything, have looked skeptically at candidates who qualify themselves as a developer in language “X.” I’m beginning to reconsider.
It’s not that mainstream programming languages have dramatically changed. Sure, dynamic languages have shaken things up, but object-orientation is still the dominant paradigm, and if you’re going to discuss the large-scale structure of an application, the odds are excellent that you’ll be speaking of classes and packages and objects.
You’ll also likely have a lot of discussion of libraries and support tools. It’s these that have dramatically changed and diverged in just the past few years. For one thing, the industry has embraced the idea of “opinionated” frameworks, such as Ruby on Rails or ASP.NET MVC, that produce large amounts of scaffolding. Although the scaffolding is often replaced over time, such frameworks create a starting point for development that is far from a blank page. If you are not familiar with that starting point, you’ll be fighting against the tide.
Another area where there has been remarkable divergence is in persistence. The acceptance of a large SQL database as the be-all and end-all of storage has dissolved. Developers of consumer-facing websites are rapidly realizing that they primarily deal with static or near-static data, and that the benefits of normalization (ad hoc querying, single point of update, storage optimization) are often outweighed by the costs (database connection bottlenecks, object-relational impedance mismatches, caching challenges).
While it’s fair to say that there are some general trends towards schema-less databases and caching infrastructures, each platform varies greatly, and a wrong assumption can lead to a nasty dead end (“Can we use LINQ with MongoDB?” Beats me, and I’d hate to guess wrong).
Similarly, the user interface of Web applications is rarely decoupled from the server-side implementation. AJAX, for better or worse, means chatty interfaces between the page (or is it a block with a Flash or Silverlight canvas?) and all that static data on the server.
So essentially, the common ground in all three tiers has melted away, leaving the generalist programmer on an increasingly untenable ice floe. Specialization is more common and more reasonable than ever in job descriptions. This is dismaying for several reasons.
Even more upsetting is that cross-pollination between platforms—always a challenge—is becoming even more unlikely. The Model-View-ViewModel pattern commonly used in CLR applications seems to have little traction outside of the .NET space, and Microsoft developers are unlikely to appreciate, say, how easy package management ought to be.
To be sure, a sufficiently powerful idea can break across platforms. The “opinionated” Rails framework is a clear recent example of an idea whose time had come and has since been widely adopted. Everyone truly interested in the problem of concurrency is casting a wide net in hope of discovering the best path forward. But it’s become harder and harder for the workaday developer, or even those of us fortunate enough to be charged with monitoring the industry, to extract a signal from the noise of Twitter and blogs and conference streams.
I’m a skeptic and tend to believe that trends reverse themselves over time: faith in modeling versus faith in code, strongly structured languages versus more freeform ones, an emphasis on productivity versus an emphasis on quality (I think of this as the “muddle along” model). So I’m hopeful that this loss of generality may reverse and lead to a convergence of useful concepts drawn from the widest possible variety of experiences.
But I don’t see this happening anytime soon. Right now, I think the proper course is to place your bets and go deep in the platform of your choice.
Larry O’Brien is a technology consultant, analyst and writer. Read his blog at www.knowing.net.