Node Screenshot
November 27th, 2012

Node and P'unk Avenue: Tools That Reflect The Artist

Tom Boutell
Chief Software Architect

Node.js is a hot topic in many shops today. The combination of sweet performance with JavaScript, a programming language everyone already knows, is compelling. That's why, when companies talk about the technologies they have chosen, they most often compare their choice to Node. That is, if they don't choose Node outright.

For some companies the choice is easy. Node and Java both scale, though Node potentially scales bigger for cheaper (LinkedIn is doing it). So if you're getting all the excitement you need from watching your traffic figures double every week, and money is not an issue, you'll probably choose Java for its maturity. And that's okay. Companies with well-established apps that have already been through an experimental, cool phase of rolling out new features as fast as possible have a very specific set of priorities. That's why they often enter a "now prove we can deliver it for X kilowatt-hours" phase.

But for a smaller firm driven by creativity at every level, the equation is different. Java can scale, but it's not that great for creative experiments and rapid development, which is where killer apps are born. For example, Tumblr and Facebook started out with PHP, while Twitter started out with Ruby on Rails– both of which are environments better known for rapid application development than for scalability.

So while we understand that killer apps might migrate to the Java world, it's important to realize that they typically arise in the rapid application development world.

For those still hunting for their killer app, Node is noteworthy for combining an openness to experiment and rapid development with high performance and scalability.

If you're excited about working with people who have something to prove, it's easy to hire for Node. Node turns frontend developers into full-stack developers and supports a culture of
experiment and curiosity. And yet it also answers a desire among backend developers to use those elegant functional programming skills they learned in school and have barely tasted since. That's a combination well suited to the kind of work we do and the kind of environment we enjoy.
Still, what about the maturity of the tools? For a shop that has previously focused primarily on PHP, Node is actually rather mature in many ways. PHP might be on version 5.4 but it is a latecomer to the idea of showing discipline about what goes in the core of the language and its central libraries. Node's NPM repository is full of great stuff and strongly encourages best practices like unit testing. And keep in mind that Node itself is just an extension for the v8 JavaScript engine, which powers Chrome. You can bet v8 itself is well tested compared to PHP's core.
There are cool, experiment-friendly languages in the Java world, notably Scala and Clojure. But JavaScript is nearly as elegant if you stick to the good parts, and it has the huge advantages that people already know it and must use it daily when programming for the browser side of things. Switching back and forth constantly between JavaScript and the server-side language is a price Node developers simply don't have to pay.
One might expect to pay a performance price for that. But thanks to the browser wars between Google Chrome, Microsoft Internet Explorer and Firefox, the v8 engine that powers Node has already been optimized to a tremendous degree. Couple that with Node's asynchronous nature and performance can be very good indeed.
But the greatest advantage is that Node supports a culture of experiment while still enabling best practices and scalable apps. In other words, Node reflects values that are at the core of P'unk Avenue: a shop that embraces both the audacity of launching an open source CMS into the world and the responsibility of scaling it to meet the needs of large institutions.
Your tools should reflect your values. Node reflects ours, and we're excited to do more with it every day.
Tom Boutell
Chief Software Architect