; Date: 2011-07-15 11:28
Node.js offers us an exciting new model for developing web applications and a statement in a recent episode of the TWiT Network's Triangulation podcast gave me an interesting lens through which to interpret the excitement around this new thing. That episode featured an interview with Gordon Bell, formerly the VP of Engineering at Digital Equipment Corporation, a company which at the time (1972) was revolutionizing the computer industry from being dominated by Mainframes to being dominated by Minicomputers. DEC's reason for existence was to develop and promote Minicomputers, but they were later supplanted by the Microcomputer era and DEC was unable to make the transition and later died. Gordon Bell is currently a researcher at Microsoft. He spoke about many things during the interview, he has over 40 years experience in developing key aspects of the computer industry, and his discussion about Bells Law struck me as a very apt way to describe the excitement around Node.js.
Bell's Law is one of those statements that seems so true in retrospect given the history of the computer industry, but in 1972 when he formulated this was rather visionary. The law is: Roughly every decade a new, lower priced computer class forms based on a new programming platform, network, and interface resulting in new usage and the establishment of a new industry
It's roughly analogous to Moore's Law: the number of transistors per chip double every 24 months
They both describe the pace of change in the computer industry. During the Triangulation episode Gordon Bell described it as a "new, lower priced computer class" forms by taking key elements of the old generation, and packaging just those elements required to build a new generation of computer technology.
If we think about the history of the computer industry from patch boards, to toggle switches, to card punches, to paper tape, to mainframes, to minicomputers, to the different generations of disc drives, to microcomputers, etc etc ... it always was a discontinuous jump from an old technology, to a new technology, ditching the technology of the previous generation, to enable a whole new realm of capabilities. It's not about preserving compatibility with the previous generation, it's about moving boldly into the future.
Now, let's talk about Node.js in this light.
The existing paradigm of developing web applications is either the LAMP stack or the Java AppServer model or Ruby On Rails or something-or-other in Python or one of the various PHP frameworks. This site is run on a LAMP stack, Apache, MySQL and Drupal on a Debian server. It's a model that's served us well for over a decade, but just in time for Gordon Bell's 10 year clock we have a new paradigm to consider.
The "Real Time Web" beckons with web pages that, rather than being a simple display of articles or videos, are more like interactive surfaces through which to engage in many different interactions all at once. One of the goals is to engage our social interactions via real time web features, by interfacing widgets from various social networks on web pages.
An example is that Google search engine results for awhile included real time content from twitter related to the search terms. And over on Facebook they're doing an excellent job of making their pages notify you of the hubbub of activity among your friends, in a way that's seemingly geared to keeping facebook users glued to the facebook experience, which should result in more exposure for facebook ads, and earn facebook a lot of money.
As I noted earlier (COMET as a justification for using Node.js?) leading thinkers in web application development recognized back in 2006 that the existing LAMP model would not scale to the real time web, and they came up with a different model. One which Node.js seems to have been designed to solve (whether on purpose or by provident accident).
If Node.js is a tool enabling us to reach the new land of the Real Time Web, what does it require us to ditch, and what does it bring along?
- The threads model of concurrency
- Programming languages like PHP, Perl, Java, Python, Ruby
- Apache and its ecosystem of best practices and modules
- XML is not well favored in the Node.js community (JSON is preferred) despite its role as a key data exchange format
- Heavy programming models
- Hiding details of the HTTP protocol from developers
- HTTP, and all the other Internet protocols
- Various database engines, though newer ones (CouchDB, MongoDB) seem to be preferred over older ones (MySQL, etc)
- Lightweight, dynamic and agile programming model
- A new way to rapidly develop and deploy web service protocols
- Putting the full reins of controlling the HTTP conversation in developers hands
- A new style of encapsulation via CommonJS modules