As a web developer, you sit on the intersection of engineering, design and art. You're lucky enough to live at a time where there are numerous production-ready tools with which to do your job. If you choose a tool that you're excited to explore, with an active and fast-moving ecosystem, your excitement and enthusiasm will make you happier and more likely to do a better job.
Someone down the thread said this:
> So far I don't see any benefit in node.js over mature enterprise frameworks.
If I was only allowed to work in ASP.NET, I'd be looking to change careers pretty fast.
Don't underestimate the value of enthusiasm - especially if you're a boss.
"Excitement and enthusiasm for something new" was left off that list for a very good reason: it's a terrible reason to pick a technology like node (or anything else).
In fact, I'd go so far as to say that enthusiasm for mere new-ness is one of the more pernicious, counter-productive parts of modern hacker culture. Rich Hickey implied this at his RailsConf keynote when he talked about how great we are at judging benefits, but terrible at judging trade-offs. Here's a man who's certainly not afraid of newness itself (I mean, he single-handedly released a new JVM hosted LISP) but I think he has his head in the right place about the cost of new, and what something must provide to justify that cost.
For example, it makes absolutely no sense to use Node and then layer on top of it a web framework that is an isomorphism from some other environment.
Last but not least, I think the key reason we have different perspectives is age. Hickey and I are about the same age. I assert that anyone who trumpets the inherent value of "new" hasn't been around long enough to understand that there is a never-ending stream of new things and that, as Teddy Sturgeon famously quipped, 90% of everything is crap.
The real market for technology adoption should fueled by demand for simplicity, rather than demand new-ness (something else Hickey strongly implied in his talk).
I carefully avoided making the statement you've just deconstructed. Nothing in my original post mentions newness.
The point I made is that enthusiastic and excited developers are valuable. Developers tend to find learning exciting. They could be interested in learning Rails or Django for the first time, trying out Sinatra when a full Rails app seems overkill, or exploring Node for a small and non-critical part of your architecture. Hell, they might be excited about learning PHP.
Allowing people to explore their curiosity brings material benefits. It doesn't have to involve new technology, and I didn't suggest that it does.
As an aside:
> The real market for technology adoption should fueled by demand for simplicity, rather than demand new-ness
I think part of node's mass appeal is that it has introduced an element of simplicity to a generation of developers who have grown up around bloat.
If only a group of more than 5 developers were enthusiastic about the same thing! Your enthusiasm for node is another persons pain. I've got 1 coder enthusiastic about node, another for clojure, and another for scala. Should every project be a different language and ecosystem? What happens when programmers move around in an organization.
"I think part of node's mass appeal is that it has introduced an element of simplicity to a generation of developers who have grown up around bloat."
Who are you talking about? Right now I'm dealing with a generation of programmers that came up on ruby. Node isn't simpler than sinatra. In fact, we just tried to use node for a "small and non-critical part of your architecture". You know what happened? It took much much longer to finish because it needed to talk to an API that uses digest authentication and node's http library doesn't support that so we had to roll our own.
Does node let you use things like libcurl? I only ask because there are libraries which already have that implemented. I don't use node so I have no idea if it can hook into system-level stuff like that.
The difference is that it's a 5 minute thing in ruby with any of the major http libraries. Is libcurl evented? No matter how you slice that cake, it's a lot more than 5 minutes of effort.
>I carefully avoided making the statement you've just deconstructed.
Perhaps you carefully avoid it, but you also strongly implied it. Consider:
>You're lucky enough to live at a time where there are numerous production-ready tools with which to do your job. If you choose a tool that you're excited to explore, with an active and fast-moving ecosystem, your excitement and enthusiasm will make you happier and more likely to do a better job.
You're optimizing for programmer excitement. There's a famous graph of programmer excitement curves floating around on the net, with a peak at "new and shiny" stage.
>Developers tend to find learning exciting. They could be interested in learning Rails or Django for the first time, trying out Sinatra when a full Rails app seems overkill, or exploring Node for a small and non-critical part of your architecture. Hell, they might be excited about learning PHP.
I'm not arguing the truth of what you're saying - it's obviously, painfully true that developers absolutely love trying out the new hotness (sometimes even if it's just new to them). I'm simply asserting that this is bad.
> You're optimizing for programmer excitement. There's a famous graph of programmer excitement curves floating around on the net, with a peak at "new and shiny" stage.
I at no point said that this should be the overriding factor. I said that the need to consider developers' personal goals is often understated, and is one of many pieces of information worth weighing when making a decision.
This wasn't what I got from Rich Hickey's talk. I understood him to be saying that, while of course you shouldn't use something just because it's new, you should use whatever will make your code simpler, even if there's a learning curve.
That to me was the point of his "easy" vs. "simple" dichotomy. Using the tools you happen to be familiar with is doing what's easy for the developer. Hickey argued that you should instead accept a bit of a learning curve if it will simplify your program in the end.
Now, I've never used Node, so no idea if it simplifies or complects web programming. (My current projects are in Haskell/Snap; so you can guess how I feel about learning curves.)
Here's a man who's certainly not afraid of newness itself (I mean, he single-handedly released a new JVM hosted LISP)
Though, I note that at the time, those were two mature and and well pedigreed technologies.
I assert that anyone who trumpets the inherent value of "new" hasn't been around long enough to understand that there is a never-ending stream of new things and that, as Teddy Sturgeon famously quipped, 90% of everything is crap.
A big reason for that are "pop cultures," which are defined as cultures/sub-cultures whose rate of change far outraces their rate of actual progress. Unfortunately, programming as a whole is one of those things.
As as boss, I understand that happy employees are a good thing for everyone, but similarly it is not enough to convince me to use what I see as a seriously substandard solution.
From my point of view, Node.js is shaping up to be the php of 2012. It's proponents claim it's easy and fun and it's in a language that they are comfortable with. Meanwhile it's detractors see no real advantage over existing or other upcoming languages. Don't get me wrong, I'm not claiming it's quite as bad as php as that's something very hard to achieve, but equally I feel there are much better solutions.
I'm not at all against new languages, but I'd sooner invest in a new language that brings something more serious to the table. Perhaps the language is more concise so that we can write less code. Perhaps it's really clean with high performance and a steller C FFI. Maybe it leverages exiting mature eco-systems of software such as the .Net or JVM stack. Do you not find Scala, Python, or Clojure fun? I would hope you do!
The majority of my free time goes into the Ruby/Rails ecosystem, but I decided to finally jump into javascript for real and force myself to grok things like closures and context (still strugglin'!) the past month.
Node isn't a new language. It's javascript. Node just gives javascript the rest of the web stack, conventions, and a package manager that feels like Ruby gems. Javascript already is the best solution for all the problems we're currently forced to use javascript for. It's the language the browser understands.
I'm not here to be Node's white knight, but Node isn't just Yet Another Thing or Yet Another Language. It's javascript and, to me, it's making javascript into a language with an ecosystem similar to what I'm used to with Ruby. Javascript is already out there in the wild solving problems that Ruby/Python/Clojure can't.
Most companies already use multiple language, and for good reason as not all languages are suitable in all cases. The idea of having a single language everywhere is nice, but in practice this forces you into substandard solutions in some contexts. This is not a compelling argument for me.
However, if you really do insist on having one language everywhere, you can also compile Clojure down to Javascript using a subset of Clojure called ClojureScript.Unlike Coffeescript, ClojureScript uses Clojure semantics and is not just a different syntax for Javascript.
This doesn't save you from all the odd performance edge cases of Javascript, but at least it gives you conciseness and semantics of Lisp in the one situation where you have no choice of language: the browser.
After reading all the posts in this thread I found another thing that is fascinating with node:
The community
It feels like Rails in its beginning—so many talented folks providing great solutions. Just check Express and related npms like Jade, Stylus, etc. They look like similar Ruby gems but if you look into the details you see people that go further and pushes the boundaries.
Some examples: just check how beautiful designed the Express error messages are—nothing crucial but it feels good working with people who are passionate. Or check how lean Stylus is compared to SASS, LESS, SCSS or how Jade goes beyond HAML with mixins etc.
It's hard for me to articulate this enthusiasm I have with node but as much as I appreciate the Rails world I don't feel passionate with Rails anymore (it feels like my Cobol class in university).
> Don't underestimate the value of enthusiasm - especially if you're a boss.
With the flip side of that being ....? Hurry up and build it in whatever's new and cool before their enthusiasm for it fades and everyone's on to the next next thing?
I too, as a hacker, like to experiment with new stuff, and find that it's motivating, but thinking about how to manage a project for the long term is also worth considering.
> Don't underestimate the value of enthusiasm - especially if you're a boss.
Indeed, and your advice is wisely directed at bosses. However, it's a bit harder (though not impossible) for a developer to use this argument successfully: "Let me use Node because I'll be more excited about the project."
ASP.NET core it not terribly well-designed, but it has has peripheral things like Razor, design-by-contract, PEX, Moles and there are tons of other interesting technologies from MS research. A lot of those things are genuinely new in some way, and allow you to do something that was completely impossible before.
I can't muster any enthusiasm over Node, because it's really more-of-the-same-but-better. With an attitude like this it's perfectly reasonable to ask "why exactly it's better"? Unsubstantiated enthusiasm in IT is evil.
All the great new features of ASP.NET and C# aren't exactly new, but Microsoft have created a genuinely fun platform that a lot of people are starting to use outside of the famed "stuffy, corporate environments".
We use it at a digital agency and it's been fantastic. I'm a big fan of what both Python and ASP.NET are doing at the moment, and although I have tried Ruby and Node.js I really couldn't see myself wanting to use them for a real project.
To the best of my knowledge, stuff like PEX is new outside of academic environments. Moreover, it's highly non-trivial. Here is a collection of other interesting projects from their research department:
Excellent points!! Always keep an eye open towards the advantages and disadvantages of anything new. Don't immediately dismiss something because it is new, just as you wouldn't immediately start using something new. Research and learn.
It's not a black/white situation here. Being the boss, I know sometimes (most of the time, to be honest) we need to stick to proven and tested stuff, as economic times are not the prettiest and clients that would pay for the extra mile don't just sit around.
What happens when you assign 2 developers on a project that they are very passionate and enthusiastic about because you allowed them to use, say, node.js.
Only to discover in a month or two that they spent 200 hours more that they would if they used something proven and tested. That's several k$ out of the window and maybe milestone not met.
"Just Try It" is not enough for Node to be quite frank.
Some people tried it and still couldn't see what they missed. I wouldn't call them blind afterward either. If it fits your taste bud then great, if not... no biggie.
As a web developer, you sit on the intersection of engineering, design and art. You're lucky enough to live at a time where there are numerous production-ready tools with which to do your job. If you choose a tool that you're excited to explore, with an active and fast-moving ecosystem, your excitement and enthusiasm will make you happier and more likely to do a better job.
Someone down the thread said this:
> So far I don't see any benefit in node.js over mature enterprise frameworks.
If I was only allowed to work in ASP.NET, I'd be looking to change careers pretty fast.
Don't underestimate the value of enthusiasm - especially if you're a boss.