Why I’m Hooked on Node.js

node.jsFull disclosure up front, I am NOT a rock star developer. The biggest programs I have ever written were video games, and only because I was highly motivated to use the resulting binary. Yes, binary, this was the old {vi foo.c, make, execute, debug} days and I still find myself most comfortable as a programmer in similar environments. I still use the HJKL keys in vim and I change my console terminal preferences to be fixed font green on black for VT100 nostalgia’s sake. I also program alone so I have no need for distributed source code control system until I am done and I want to share my work. I get lost in IDEs like Eclipse and Visual Studio and they make me feel inadequate very quickly. Why on earth do I need to create a project and run a wizard in order to write HelloWorld.js, or in my case AsyncPubSub.js? Basically, I am way off to the right on the long tail of code production.

However, like so many long-tail stories, there are millions of shell-script hacking former Unix admins like me out there, and we all add up to a lot of useful lines of code on the internet. We add up to a lot of useless lines of code as well but that’s the beauty of the long tail. You can take what’s good for you and leave the rest to someone else. What I like most about Node.js and server side JavaScript is that I can so easily leverage the output of actual rock star programmers into a plethora of useful less-than-100 line applications. I can go from #node HelloWorld.js to an app that takes in HTML5 WebSocket client connections, queries reference data in MongoDB and shares real-time state across hundreds of geographically distributed instances of Node using the Solace web streaming and it’s JavaScript API. It’s as simple as a Google search, a bit of reading (or a YouTube video), and typing #npm install express.

I love that the inherently non-blocking, event-driven aspect of Node fits so well with old school pub/sub messaging. I still remember the late ‘90s when I was at TIBCO and we were promoting TIB.net as the “true push” solution to data distribution on the internet. Nobody understood what the heck we were talking about, and frankly, it was not the right time to even try and do that at scale. What was missing then was the developer community and enabling frameworks to easily promote understanding, sharing, and reuse of event-driven code. You know, the kind of “ecosystem” that the web was built on in the first place.

I am excited to see where the Node community goes and where the current momentum will take us. Perhaps I should dust off that old Asteroids code again and see if I can turn it into some kind of a massive multi-player internet version that runs on your Android phone. But first I have to figure out which modules to use so that I can squeeze it down to my new sweet spot of ~100 lines of code.