5 ms·
Node seems to evoke strong responses from people. As someone who has a couple of side projects running on Node in production, and also as someone who considers
by karterk 14y ago
Node seems to evoke strong responses from people. As someone who has a couple of side projects running on Node in production, and also as someone who considers himself fairly language/platform agnostic - I will say this:
For a lot of people - Node allows them to do a lot of things that was previously non-trivial in Ruby or Python land. From comet based applications to using socket.io for real-time notifications. It's not that these things can't be done in other platforms. There have been plenty of Java COMET solutions. Heck, 3 years back I wrote my own multiplayer strategy game in Erlang/OTP. However today, if I were to write that game - I will do that in Node. Reactor pattern is nothing new - but if you work with Node you will realize that for certain classes of problems, neither event machine nor twisted come close to Node and its ecosystem today.
Yes, C++ servers could be faster and JS can be a terrible language to work with. But a lot of us don't care - we want to get work done and we use Node for stuff that it's good at. There are always going to be people using it for everything - but every community has its set of zealots. Someone said the other day that he/she uses Haskell for prototyping.
- wmf 14y agoFor a lot of people - Node allows them to do a lot of things that was previously non-trivial in Ruby or Python land. ...for certain classes of problems, neither event machine nor twisted come close to Node and its ecosystem today. This is the kind of stuff that causes the backlash. The JVM doesn't exist? Erlang doesn't exist? Why did the Node people insist on building a new ecosystem from scratch? Wouldn't it have been easier to build on something that was already mostly working (and already supported multicore)?
- karterk 14y agoWhy did the Node people insist on building a new ecosystem from scratch? People don't sit and plan about creating ecosystems. Things happen. It's not like the Erlang or the Java community are not building anything (Akka is very impressive). I would rather appreciate the work that has gone behind Node. Hype or no hype, the sheer number of knowledgeable people associated with it lends credence to the fact that it's well suited for atleast some classes of problems.
- heretohelp 14y agoA nice client-server library in an existing ecosystem would've helped the world more. Oh well.
- chc 14y agoErlang may as well not exist for the vast majority of developers. I like Erlang, but a lot of people don't get it, and even more are completely unaware that it exists. Meanwhile, JavaScript is already one of the biggest languages on the Web. This is actually one of Node.js's intended strengths. The JVM is really mature, but its primary language is one many people hate, so people would complain about choice of platform even if they had gone that way. You may as well ask why Ruby on Rails wasn't Java on Rails. The answer is that 37signals didn't like Java. And V8 and JavaScript already existed when Node was created, so they were building in an existing ecosystem. Again, JavaScript was already one of the dominant languages on the Web. That's a big argument in its favor. To my understanding, JavaScript had one more advantage that put it over the top: what didn't exist in its ecosystem — namely, a culture of synchronous development. This meant Node wasn't fighting against the idiomatic way to do things. JavaScript was already highly async, and since this was the whole idea behind Node, it made JavaScript a less-bad fit than most other languages. Other languages were considered, but the fact that libraries for those languages were largely synchronous was viewed as a downside.
- petercooper 14y agoI agree with your post, but wanted to pick up on one point: Erlang may as well not exist for the vast majority of developers. I like Erlang, but a lot of people don't get it, and even more are completely unaware that it exists. This was also true of Ruby pre 2005. I'm not an Erlang developer but it clearly has some natural advantages in the increasingly important world of parallelism and maybe it just needs its own "Rails" as a catalyst for its take off? (And by "its own Rails" I don't mean a Web framework but just a MacGuffin that lures people in to trying it.)
- chc 14y agoHalf of it was true for Ruby — many people were unaware. What they don't have in common is people's immediate reaction upon discovering the language. Common first exposure to Ruby: "Oh, wow, that's cool. It looks pretty easy." Common first exposure to Erlang: "Oh, wow, I didn't know you could code in Klingon." I do agree, though, that Erlang could probably gain a lot more popularity if somebody introduced a framework that really showed what it could do. The most popular web framework right now (at least I think it's the most popular — there aren't any official polls or anything) is MochiWeb, which kindasorta doesn't have any documentation.
- sehugg 14y agoWell, to be fair they didn't invent a new language. I am very happy with our Java-based infrastructure now, but it took two years to get there. The ecosystem is all over the place, is sometimes unwieldy (e.g. Maven) and huge chunks of it have withered and fallen off (e.g. EJB). This is healthy, but does not help developers choose what path won't lead to a dead-end. In our case it was a combination of something old (JDBC, Spring) and something new (Netty, Redis). For Node it seems the big selling point is in having relatively few options to choose from after "Hello, World". This I think makes it seem nimble. Eventually it'll cruft up just like Java: There will be way too many ways to do everything, people will start arguing about it, and something perceived as "simpler" will take its place.
- base698 14y agoAs someone who has extensive Java and JavaScript experience, the whole reason for the Java hate as a language is it's lack of closures. For any callback you have define a new interface explicitly then do a gnarly anonymous inner class. In JavaScript you can just plop in an anonymous function. As for the ecosystem, Node also wins with NPM for ease of installing third party libraries, but Java wins for more comprehensive libraries that are already battle tested. A lot of Node libraries do reinvent the wheel. I don't even know what the standard way of installing a new library is in Java. There's Ivy, Maven, and Gradle. Out of all of them Gradle seems to be the best, but least used.
- SjuulJanssen 14y agoThis might answer your question: http://www.youtube.com/watch?v=SAc0vQCC6UQ http://www.youtube.com/watch?v=SAc0vQCC6UQ TLDR: He didn't want to use an ecosystem that had existing blocking code. He wanted node to be pure in te sence that nothing was blocking. Starting on a clean slate enabled him to get everything pure non-blocking from the ground up. He admits that Js isn't the best language. But his rationale for not using an existing ecosystem (when it comes to IO) is not bad.
- pilgrim689 14y agoUsing Haskell for prototyping has its uses!...prototyping for the formal verification of an operating system, for example... :P [1] [1] http://www.ssrg.nicta.com.au/publications/papers/Klein_EHACDEEKNSTW_09.pdf http://www.ssrg.nicta.com.au/publications/papers/Klein_EHACD...
- jberryman 14y ago> Someone said the other day that he/she uses Haskell for prototyping. So...?
- yosh 14y agoI'm curious, why would you write that game in Node now, if you already know Erlang? From my perspective, Erlang is a better fit than Node for all the problem domains that Node is good at. I understand using Node if you don't know Erlang, but do know JS, but if you're already skilled with Erlang...
- robocat 14y agoErlang string/unicode handling amazes me! AFAIK no native support for strings. I have zero experience with Erlang so want to ask: does this cause problems in practice? Especially, does all library code needing strings use the same Unicode representation? http://www.erlang.org/doc/man/unicode.html http://www.erlang.org/doc/man/unicode.html
- notJim 14y agoFor a lot of people - Node allows them to do a lot of things that was previously non-trivial in Ruby or Python land. From comet based applications to using socket.io for real-time notifications. It's not that these things can't be done in other platforms. One of the problems I have with the hype around Node is that people seem to gloss over the fact that asynchronous IO is only really dramatically more useful for the particular case of wanting to have a lot of connections that are open and idle most of the time. Many people, instead of saying “Node is great for comet because of asynchronous IO” say “Node scales really well because of asynchronous IO”, when in fact those 2 statements are very different.