The proliferation of Web technologies has been much on my mind lately. Last week, I talked about the continuum of Web development tools, ranging from traditional browser-based technologies all the way to applications deployed as binary executables. The interesting thing is that all of these tools are designed to achieve similar goals. So which do you use?
I'm not trying to start a flame war. Some developers will swear by Flash, while others will choose AJAX, and even within those groups there will be individuals whose preferences are even more rigidly defined. The question is, how do developers maintain their skill sets -- and, by extension, their value in the marketplace -- when the so-called state of the art seems to change on an almost daily basis?
In contrast to large biological systems, which favor diversity, large programming projects tend toward homogeneity. Excess platforms and technologies are costly and wasteful, both for developers and for the users they target with their applications. Each site will want to standardize on the one or two tools that best meet its needs. Identifying those tools for a Web project, however, can be a daunting task.
Everyone knows that writing a traditional, standards-based Web application means writing JavaScript code. Unlike traditional systems programming languages such as C and Java, however, JavaScript has no standard function library. As a result, developers have not one or two AJAX libraries to choose from, but a dozen.
Then there are those tools that attempt to remove JavaScript from the programmer's dilemma. Google Web Toolkit, for example, lets you write Web applications in Java and compile them down to JavaScript, to be executed in the browser. Others have created similar tools that let you write client-side code in Python, Ruby, and even C.
On the other end of the spectrum, proprietary platforms based on plug-ins -- such as Curl, Flash, and Silverlight -- offer developers more consistency and stability, owing to their centralized control and governance. Each brings with it a unique development methodology, however, and familiarity with one does not necessarily translate into skill with the others.
Which tool is right for the job? What are the best practices? When comparing C and Java for desktop application development, for example, it's easy to point out the relative characteristics and methodologies that each tool will bring to a project. The distinctions between AJAX libraries such as Dojo, JQuery, and Prototype, however, are less clear.
The market for Web development technologies appears ripe for consolidation. And yet, the barriers to entry are so low -- many of the tools are free -- that the market forces that might ordinarily eliminate competitors don't seem to apply here.
In one sense, that's great for the underdogs. In such a market, really impressive technologies have a chance to grow and thrive, with or without the backing of a name-brand vendor. Even the most obscure tools will eventually find an audience if they do the job better than what came before them.
On the other hand, this fragmentation of the market creates a kind of skills crisis. No one Web developer can excel at all of these technologies; the development methodologies behind some of them are virtual opposites. The pressure on developers, therefore, is to specialize. But how do you choose one tool to be your bread and butter from a field this broad? And by the same token, how do you recruit talent for your Web project when your technology requirements might eliminate most of the applicants?
Of course, software development as a profession has always required a certain amount of agility. Experienced systems programmers will tell you that computer languages really are all the same, and that learning Python is trivial if you already know Java.
The most agile developers, however, are those who approach programming with a firm grounding in computer science. Likewise, I suspect that the current abundance of Web tools is a sign that the Wild, Wild West of Web development is coming to an end. Increasingly, ad hoc projects and cobbled-together tools will give way to those that emphasize the values and methods of traditional software development, such as design patterns, code reuse, and refactorability.
But you tell me. If you're in charge of a Web-based software project, how do you go about recruiting development talent? Is familiarity with the specific technologies in use at your organization a priority, or are you more likely to value past success at other projects, even if they were built with different tools? And if you're an independent developer, are you confident enough in your skill set that you feel comfortable moving from project to project, or does keeping up with the latest trends in Web development feel like treading water?
I look forward to hearing your feedback.
0 comments
Post a Comment