Do you think apps built with Java/Scala/.NET etc are still solid and should be used heavily these days. If you see carefully startups tend to go with Node and JS based stacks rather that JVM or .NET platforms. What do you think? Is Node.js overrated?
Node JS rocks when it comes to io. Club it with Nginx and you get scalable systems. IMHO NodeJS/Nginx lets you get most out of your hardware. My experience is limited to using it for io based operations and dude it rocks. The only glitch i see is that it is hard to write object oriented equivalent code. Just create an eco system of small serverices that is built on NodeJS
I have not used node JS for projects having high computing requirements (read processing requirements). There are now a lot of libraries and different ways of dealing with such things in Node, but i have not tried it myself. It would be interesting to see if any one used Node for projects having high computational requirements in production and how it scaled and what challenges they faced.
In this world, alas there is no single tool for all different problems and we need to acknowledge it
I agree it's over-hyped (over-rating it would be too much, after all). Only kids would write a serious backend using JavaScript. In fact, startups write in these languages as long as they're startups. If they go past this stage, they generally move to Java, at least for the backend. Node has its own merits, no doubt about it. But Java and JavaScript are not even comparable: the first is a serious programming language, object oriented, strongly typed, with a solid and top-of-the-line concurrency model, formalized by an open community (JCP) , baked by Oracle, implemented by software engineers for software engineers. The latter is a scripting language, weakly typed, badly interpreted, without a consistent implementation across all platforms, made by an ancient old-style committee (ECMA) for script kiddies who probably don't even know what a big-O notation is. Come on, stop comparing apples to oranges. Stop comparing scripting languages to real programming languages.
Instead of talking theory, I'll just give my story.
I originally built Sleeperbot.com in 2009, a realtime fantasy football forum in node.js and it was great for the first few thousand users, about ~100-300 concurrent at anytime.
However a lot of things bothered me, like error handling, lack of solid libraries (major bugs in socket.io and zmq), which made me switch to Python for productivity & stability reasons.
The app scaled really well in Python for a bit, I was able to address most bugs in Python pretty easily compared to node.js. However the users grew to 20x, and I experienced scaling issues with many thousands of connected clients all trying to get in with 10 seconds of each other when we send a global Push Notifications. Both Node.js and Python would have this same problem, being as they are single threaded, so you'd have to write your own distributed fault-tolerant system which is not exactly simple.
This ultimately led me to Erlang. The syntax for Erlang was ugly, but I didn't care. I just cared that my product was stable in production and can handle 20,000 concurrent users all connecting to a machine within a 10 second window and passing messages back and forth in real-time. I needed something that could work just as well for 100,000 users which I expect next year. I also cared that it doesn't crash and that it's self-healing.
The thing I learned is this. If you care about productivity, sure, by all means, node.js. If you care about production and stability, go with something proven, like Erlang.
I've settled on Elixir over Erlang because it has better syntax and compiles to bytecode that runs on the Erlang VM. It also has more momentum than Erlang right now. The cons are that you will experience productivity loss when you switch from OO to Functional style of programming in the very beginning. Elixir / Erlang being less used languages are also missing some libraries that Python and Ruby have that make things dead simple, so I have to be a bit of a polyglot in the meantime.
I still use node.js for mostly brunch.io tasks, but that's about it.
Yes.
But that isn't to say "Node is bad".
As someone much smarter than me said: "Pick the right tool for the job"
Yes, the hype machine got into full gear a few years ago and tried to say Node was the answer to everything. But that happens with every technology that gets big. Node does solve a certain class of problems, namely streaming blocking IO, very very well. Things that would have taken hundreds of lines of C code can be turned into 10 lines of Node. For a certain class of problems is really is a silver bullet. Just don't try to shoot things that aren't blocking io werewolves.
I think there is a lot of hype around Node - just as there is about NoSQL, Big Data, and the latest trendy javascript framework/library. However the vision of a single language that can be used in the front-end and back-end for web applications is a pretty powerful and seductive one in my opinion. Node development is pretty much in its infancy and I hope it keeps growing and maturing.
In any case I very much agree that the right tool has to be chosen for the right job. And the right tool is a function of many things - both technical and non-technical - the most important of which is the (business) bottom line.
Am I too late to the party?
On the point - is NodeJS overrated - no. Is NodeJS overhyped - yes!
NodeJS is just a tool (so original, right!) and used properly can make great things. More and more big companies are using it. Node's merge with io.js was the best thing that can happen to the project. Writing Javascript on the front-end and back-end looked strange at first, but with time, developers found it's quite powerful (and cool). I have some concerns though about matureness, compatibility and maintainability. Mainly, because of Javascript's current "changing" state.
NodeJS will continue to gain momentum and popularity. It's on the right track. It will just take some time to be mature enough to be more widely used.
I don't think Node.js is overrated (where are the ratings, BTW?). I completely agree with @Jan. Use the right tool for the job at hand. But I also have a small story of my own.
When Java was in its infancy (how many of you know that Java 1.0 existed?), we built a "cross-platform" UI intensive tool, and piloted it a large firm. We used AWT for the UI. On our Windows desktops during dev and testing, the thing loaded up in seconds. But at the customer's place, where they used HP Unix workstations, it took minutes.
Of course, they threw us out after the pilot and continued with their antiquated console based tool. The sales guy remonstrated, "We built something that is at the forefront of technology, is it our fault that Java is not what it claims to be?" Those were the times when the phrase "Write once, debug everywhere" became popular, as a parody to "Write once, run anywhere," the byline for Java.
I think Node.js is at a similar stage as Java 1.0 or 1.1. It has promise (I realized the pun later, honestly, unintended), but it also has its place.
Why do you compare only with Java/Scala/.NET? That is old style technologies. It will be more fair to compare with ruby, python, go
I don't think node is over (or under) rated. It sits in a pretty comfortable spot in my mind. Quick to get up and running, performant for most tasks, a good standard library that covers most daily tasks, and a popular package manager for everything else.
I think the verdict is still out on how it will scale out to really large applications, but I think the passage of time will settle that, along with some help from TypeScript and friends.
Absolutely not. It's a joy to rely on a single language for the whole stack.
npm, npm, npm. npm is unrivalled as a package manager.
Yes and No - let me explain
No, use the right tool for the job at hand. NodeJS is certainly better at quickly getting stuff out and just about anyone can write JavaScript, so your development cost will be lower in the short term. To be a Java developer, you need many years of experience, experience which is getting more and more difficult to get unless you spend a lot of time on your own studying Java and getting the certifications - I don't know any companies hiring junior Java developers, so on the job experience is almost becoming non existent.
For long-term maintainability, portability, Java / .NET is certainly a better option.
Will NodeJS code you've just written or libraries you've just imported still run in 5 years time if you update your Node version in 5 years? Probably not. Java? It's been doing that forever keeping older versions forward compatible for 15 years+;
Do you care about whether your code will still run in 5 years time when you just have enough money left for 6 months to get a product out? Probably not. If you are a large enterprise company who've just spent 20 million dollars getting a piece of software developed, do you care if the software still runs in 5 years and can still be worked on in 5 years? I bet you they do.
It's also easier writing bad code in JavaScript than it is to write bad code in Java. The compiler in Java almost babysits you through the process making sure that you don't do stupid things. If I write a line of code like this while(1 == 1){ dosomething(); }, the compiler will tell me that the code below the while statement is unreachable and that the while will never terminate. If I write Integer a = null;, then do System.out.println(a.toString());, the compiler will warn me that a is null and will throw a null pointer exception. If I'm using anonymous functions in Java8, the IDE will tell me I can write the code better using Lambda expressions.
Yes, there's a lot of marketing hype around NodeJS, but that's not NodeJS' fault. That's more the media that's to blame. I've seen this kind of hype for just about every new language that becomes usable, from Microsoft C++ to Borland C++ to Borland Delphi to C#.NET to Java when it initially went big to CSS when it first came to the browser (articles like To CSS or Not To CSS is the Question were common and everywhere) to Dart (massive media campaigns claiming Dart will replace JavaScript) to Ruby and even Python when it replaced perl as the goto language ... you name it, the media needs something to write about, so they'll usually hype whatever new language / technology is available so they can stay relevant.
Is it overrated? No, as I said, use the right tool for the job. Does the media make a lot of noise about it, Yes, they do.
Hugh Gilmore
Learn
We're all fanatics of some stripe. I just can't become a node fanatic. Async select-driven architectures are great in their own right. I implemented C++ servers this way back in the '90s and they worked great. So, in way, node is the second (third, fourth, fifth ?) coming. Yawn. Besides, as cool and as funky JS is, I definitely prefer statically-typed languages; I'm a scala fanatic now.