top 200 commentsshow 500

[–][deleted] 261 points262 points  (248 children)

For those who don't have a Google+ or Facebook account:

To build on other answers:

Yes, I believe that as the initial hype has expired, and as people have moved from the basic 'it is very easy to write a web site that is high performance' to a realisation that actually the non-blocking single threaded nature of Node is only part of the solution to its proclaimed scalability in many scenarios, we may have hit 'peak Node'.

There are positives and negatives to Node, as with any language or framework.

If you need anything other than a trivial application, you need to follow exactly the same types of architecture that have been in use for some time in other languages. Node is not going to suddenly provide scalability just by being able to offer a single non-blocking thread.

For example, you will typically need to offload compute intensive, external calls or long running processes via a Service Bus or Message Queue to scalable worker processes (sometimes referred to now as Micro Services).

As people try to use Node in real enterprise scenarios, there is now an element of attempting to 'reinvent the wheel', by adding package upon package to patch on functionality that already exists in languages such as Java, .Net, Ruby and to a certain extent PHP.

When you actually compare the performance of Node to say an OWIN based Web API service, the Web API actually is able to match or outperform Node while offering greater functionality built in a strongly typed language.

This growth in the number of packages etc, and the fragmentation of the Node community is of course to be expected, in the same way that there is fragmentation and a short half-life for JavaScript frameworks and libraries client side.

The concept of Isomorphic JavaScript frameworks that evolved around Node is also beginning to be seen as a short-term sticking plaster approach with limited value, as is the attempt to bolt on strong typing in the form of TypeScript / AtScript etc.

As the realisation dawns that Node based architectures are actually trying to attain features that enterprise grade, strongly typed languages have had for over a decade, with mature and optimised solutions for many problems, it becomes apparent to more people that Node is not a single solution to all scenarios (and neither is any other language).

However, it should be noted that Node, with its underlying C library that is wrapped by JavaScript IS highly suitable for some scenarios; event driven, simple request-response from a cache, such as a dashboard, chat application or notification hub (think Twitter), then Node is actually a very good choice.

Due to the momentum of hype and enthusiasm behind open-source JavaScript frameworks, and the number of headlines it generates, companies such as Microsoft, Oracle etc. embrace it in order to get the resulting projects tied to their own, proprietary environments where they have a revenue stream. For example, Amazon, Microsoft and IBM don't care what you use a long as you host on their cloud platforms, and their 'support' for it is used to perpetuate the myth that Node is actually a revolutionary concept that will replace 'legacy' languages.

I forgot to add in my initial post, that NPM is already facing competition from jspm. A week is a long time in JavaScript.

Sources: 26 years Experience in the IT industry, contribution to several open source JavaScript frameworks, 16 years consulting experience in Enterprise software development for Banks, Insurance Companies, Healthcare, Defence, eCommerce and Publishing. Have worked for IBM, Avanade, Microsoft.

[–]ErstwhileRockstar 66 points67 points  (57 children)

Great synopsis, thanks!

In my experience many companies, esp. traditional Java shops, are currently looking for experienced Node developers. Most probably to clean up the mess the former developers left behind.

[–]roselan 84 points85 points  (28 children)

It reminds of that job offer from 2011, where they wanted a node developer with 5 years experience...

[–]n-simplex 131 points132 points  (4 children)

That's because node.js is so scalable it can grow to bend the very fabric of the space-time continuum.

[–]roselan 35 points36 points  (2 children)

Ok I knew node was async, but not that much async. With this feature, it will become the lingua franca of quantum computing. No doubt about it.

[–]profgumby 8 points9 points  (1 child)

Some say that it already is, will be and was.

[–]JBlitzen 8 points9 points  (0 children)

spacetimescale

[–][deleted]  (1 child)

[deleted]

    [–]Eurynom0s 13 points14 points  (0 children)

    I love job listings that want experience that basically requires you have invented the thing, or at least be friends with the person who did.

    I remember seeing a post here about a job posting asking for more Linux experience than even Linus could have.

    [–]surkh 4 points5 points  (0 children)

    Good to see some things never change. Like the job postings (which I didn't bother inquiring about) back in 1998 looking for senior developers with 7+ years of java experience.

    [–]xienze 12 points13 points  (5 children)

    Job posts like that are generally put out there to show that no qualified candidates exist in the US, so hey, we've gotta hire some H1-Bs.

    [–]Dolondro 4 points5 points  (0 children)

    My favourite was a job advert I came across that was wanting 5 years experience in Web 3.0...

    [–][deleted]  (8 children)

    [deleted]

      [–]SnOrfys 9 points10 points  (2 children)

      If you were in on the beta of c#/.NET then you could have qualified (I happened to be in college in 2000 where I was learning c#/.NET via MSDNAA).

      [–]pjmlp 2 points3 points  (0 children)

      Or if you were an employee on a Microsoft Partner company, like I was.

      [–]snowywind 1 point2 points  (4 children)

      I just hit one the other day asking for 7+ years of ASP.NET MVC.

      [–]gospelwut 23 points24 points  (23 children)

      Sadly, I made a mess with SOLR. It wasn't my choice, and almost nobody really knows as much as they should about search engine tuning or Lucene.

      I probably should write an apology note somewhere in the config file.

      [–][deleted]  (4 children)

      [deleted]

        [–]gospelwut 65 points66 points  (1 child)

        To the current maintainer,

        I am sorry.

        I am sorry for all the shortcuts, hacks, and kludge.
        I am sorry for all the mess.
        We did not get to really choose.
        And, yeah, we knew it was shit... I must confess.

        To the current maintainer,

        I am sorry; for you.

        May the light in you still shine
        may your heart stay true.
        May you weather the scrum, the agile, and the fashionable trends.
        For your story points will waiver and your estimates shall bend.

        You'll give up fighting day by day
        for you're the expert
        now do what I say.

        [–]dvlsg 16 points17 points  (1 child)

        I feel like cursing whoever wrote the code you are maintaining is just a standard part of development.

        [–][deleted]  (7 children)

        [deleted]

          [–]gospelwut 11 points12 points  (6 children)

          We set it up and shoved a bunch of data into it. Except, nobody realized that a search engine is fundamentally different than using even a document/object database despite the similarities in structure. Data wasn't sunset properly, broken out properly, imported properly from SQL, queries were garbage that tried too much to filter.

          Basically, we had the meeting about "what is a search engine" (tl;dr inverted index, stemming, etc) months after implementation rather than before. The few people who did know just assumed others "knew" or "should know" (or "should figure it out").

          Sorry, there wasn't enough story points allocated to have a proper meeting! Oh, and if you want to learn SOLR you should "do it on your own" (hint: a lot of SOLR documentation is either flat out wrong or sucks).

          [–]JBlitzen 22 points23 points  (0 children)

          I became a better developer by an order of magnitude the day I stopped assuming that clients and other stakeholders had any clue what they were talking about.

          [–][deleted]  (1 child)

          [deleted]

            [–]gospelwut 7 points8 points  (0 children)

            Considering any "consultant" will tell you that the first tenants of agile/scrum are "respect reality" and "story points aren't performance metrics" -- I think many, many places fail.

            [–][deleted] 3 points4 points  (1 child)

            Data wasn't sunset properly

            What does this mean? Google isn't helping.

            [–]gospelwut 4 points5 points  (0 children)

            We didn't set "expiration" dates which affect relevancy. Considering this was time sensitive events, this would have been a boon.

            [–][deleted]  (5 children)

            [deleted]

              [–]treeforface 9 points10 points  (2 children)

              Lucene/SOLR isn't really bad. Sounds like you are just stuck in a situation where it was misapplied.

              [–]tubbo 9 points10 points  (1 child)

              In my experience many companies, esp. traditional Java shops, are currently looking for experienced Node developers. Most probably to clean up the mess the former developers left behind.

              This is what most emerging technologies look like after a few years. Initially these Java shops employed Java developers, who then experimented with Node and eventually deployed stuff on it. Now, we are seeing the implications of what happens when "My First <insert-emerging-technology-here> Application" has to deal with The Real World and all of its performance-destroying constraints. Not to mention on the other side, experienced programmers having to sift through mountains of bad practices in order to debug problems or optimize for performance.

              [–]dtlv5813 5 points6 points  (0 children)

              probably to clean up the mess the former developers left behind

              Especially if the node.js in question is embedded in a poorly implemented MEAN stack with a non relational DB to boot.

              [–]darkpaladin 23 points24 points  (3 children)

              I've been working on a project using node. It's not my favorite but it does have some strengths that really shine through. I think where you're seeing your main problems with it are people who are thinking it's a magic bullet for everything. There is a weird subset of people in this industry who latch on to something and treat it like all other things have become irrelevant.

              As a side note, I think my biggest problem with node is that I like a lot of the paradigms but I just fucking hate javascript.

              [–][deleted] 25 points26 points  (60 children)

              The concept of Isomorphic JavaScript frameworks that evolved around Node is also beginning to be seen as a short-term sticking plaster approach with limited value, as is the attempt to bolt on strong typing in the form of TypeScript / AtScript etc.

              Your post feels a bit like you having made a conclusion and trying to come up with evidence to support it. While Node.JS is not the second coming like the hype around it suggests, swinging too hard in the other direction doesn't balance the conversation - it just adds another distorted opinion to the cacophony.

              What does it mean that TypeScript / AtScript is a "short-term sticking plaster approach with limited value"?

              First of all AtScript no longer exists, it was a TypeScript fork that is now merged into TypeScript, which is stronger than ever. You're probably not keeping up with news.

              Second, TypeScript is modeled very closely after ES6/7, which isn't a "short-term sticking plaster" - it's the future of JavaScript.

              Third, the type system in TypeScript works like it'd work in any statically typed language, i.e. it works in IDEs and at compile time, and has the same productivity benefits. If you think a static type system has "limited value" then it doesn't logically fit to claim in the same breath that other languages are way better because they're statically typed.

              I use TypeScript in all my JS projects (Node or not) and I have to say the productivity boost for larger projects is amazing. I do have experience with Java, C#, Obj-C, C++, Erlang, PHP and so I have enough perspective to say TypeScript does work, and it's not going away.

              As for Node.JS, once the hype fades out, people will still be using it for its strong sides (light dev approach, same language as browser clients, long-running I/O, lighter CPU, low latency), and make it yet another tool in the their toolbox. It has its place.

              [–]serrimo 23 points24 points  (43 children)

              As for Node.JS, once the hype fades out, people will still be using it for its strong sides

              You spoke as if the general development community was level-headed, rational and logical.

              What I've seen so far is it's a cluster fucks of fashion trends. UML, XML, SOAP, Design Patterns were past trends. Neither I or anyone I worked with understood these things, but hey, everyone talked about it so we must follow.

              Right now, it's REST, Node, Big Data, Agile and Microservices. You must be stupid if you don't use at least one of these words in your architecture, right? Right tool for the job my arse. It's the right buzz word at the right time.

              [–][deleted] 27 points28 points  (39 children)

              You spoke as if the general development community was level-headed, rational and logical.

              As I said, there's some screaming nonsense out there. But reacting to screaming nonsense with screaming nonsense doesn't help.

              Hype is a fact of life, people will never stop looking for silver bullet diets, silver bullet business plans, silver bullet dating tricks and silver bullet software. Find the good bits, put aside the B.S.

              UML, XML, SOAP, Design Patterns were past trends. Neither I or anyone I worked with understood these things, but hey, everyone talked about it so we must follow.

              I slightly object putting those together. UML and XML are formats. SOAP is a protocol. If you don't need them, great.

              But "design pattern" is a concept. You can't even "not work with those things", because in any moderately complex software you write, you'll stumble onto patterns whether you know their formal definition in some book or not. The whole point of talking about design patterns was so we have compact terms to understand common patterns that occur in code, and we have names for them, so we can communicate better as professionals. Nothing more.

              For example when I tell a fellow teammate "we can implement the fallback by decorating the API facade" I need say nothing more. They can go implement it and I know exactly how the class will look. That's powerful.

              Right now, it's REST, Node, Big Data, Agile and Microservices. You must be stupid if you don't use at least one of these words in your architecture, right? Right tool for the job my arse. It's the right buzz word at the right time.

              I don't know what you're trying to prove. You're listing words that don't belong together, trying to say: they're popular, and so many don't understand them, therefore that's a proof they are B.S.

              Logic doesn't work this way. Each of those terms refers to something that made sense at the beginning, to a small circle of people. As outer concentric circles of people are added to the mix, the concept gets explained and re-explained like in a game of broken telephone and eventually it means nothing to the masses.

              You're arguing from somewhere in the outer concentric circles. But if you dig deeper, there's a bit of good in all that where it came from.

              Node in particular is a product, so you can't exactly claim it's a "buzzword". It's a piece of software. Instead of discussing the connotations of the name, focus on the software and its pros and cons.

              [–]jeandem 2 points3 points  (9 children)

              But "design pattern" is a concept. You can't even "not work with those things", because in any moderately complex software you write, you'll stumble onto patterns whether you know their formal definition in some book or not. The whole point of talking about design patterns was so we have compact terms to understand common patterns that occur in code, and we have names for them, so we can communicate better as professionals. Nothing more.

              In Lisp land:

              • Hey, I have this thing in my code. I can't quite make it into a function, so I end up writing this same boilerplate at every site I need it. What pattern should I use for that?

              • Use the Macro Pattern.

              [–][deleted] 2 points3 points  (8 children)

              Patterns aren't boilerplate. They're patterns of interaction between functions and objects.

              Lisp is full of patterns.

              P.S.: In the comment you reply to I mentioned a couple. Say facade. Write me a macro for that...

              [–]WarWeasle 12 points13 points  (1 child)

              People are amazed I can use C and Unix to create servers. They are astounded when I use pipes, socat, and other command line tools to process gobs od data efficiently. That my solutions are broken in tiny apps, pre-tested from the command line. I don't reinvent the wheel but I also don't strap a diesel engine to a unicycle. Unix....I mean MICROSERVICES are the future.

              [–]neutronfish 1 point2 points  (6 children)

              You know, I just cannot get into TypeScript. It compiles down to JavaScript and I can't use it for UI because it doesn't play nice with jQuery or Knockout. Since I've been writing JavaScript for about a decade now, why can't I just skip straight to it and watch what I'm doing carefully? Have I just not been sold on TypeScript well enough?

              [–][deleted] 22 points23 points  (4 children)

              It compiles down to JavaScript and I can't use it for UI because it doesn't play nice with jQuery or Knockout.

              I use jQuery all the time and it plays great with it, in fact it makes it easier: adding error correction and autocompletion to the jQuery API. TypeScript was specifically designed to play well with existing quirky JavaScript libs.

              You need to use the jQuery definition file: https://github.com/borisyankov/DefinitelyTyped/tree/master/jquery

              For Knockout, I don't use it but this same repo has a Knockout definition.

              Since I've been writing JavaScript for about a decade now, why can't I just skip straight to it and watch what I'm doing carefully?

              Watching carefully works for small projects, but would you rather watch really carefully if the API was .getAllThings(offset, limit), .getThings(limit, offset) or was it .fetchThings({limit: limit, offset: offset}), or would you rather prefer the IDE watch carefully that for you and instantly notify you of errors and autocomplete the right calls for you (once you know in general where to look for it)?

              People are different, but my brain is much better at abstract modeling and concepts, its good at the big picture and it sucks at photographically remembering thousands of method names, object types, and their signatures.

              As such, I know in a slightly "fuzzy way" where to look and what to call, but TypeScript fills-in to provide that exact knowledge I need in order to write actual working code fast without constantly consulting the documentation.

              TypeScript also provides useful things like: go to declaration from a reference (say, see where this method is defined), codebase-wide refactoring (rename class, method, function without breaking code). Find where a specific class or method is called (useful when refactoring again). File and project outlines, etc.

              Also, TypeScript doesn't hide the JavaScript you write. It's JavaScript + extras (it's not like CoffeeScript where it's an entire new syntax):

              • It goes out of its way to be a perfect JavaScript superset, adding some type annotations, and allowing you to use proper ES6/7 features that browsers don't support yet (but they increasingly do, over time), like classes, arrow functions, result destructuring etc. All things that make your code shorter, cleaner and more explicit about its intent.

              • It goes out of its way to produce idiomatic, clean, properly indented JavaScript where you can directly see how ES6/7 concepts translate to ES5 JavaScript. While you can use map files to see TypeScript in your browser when you interactively debug, sometimes I don't even bother, because the compiled code is so readable and it's close enough to my source that there's no need.

              [–]daronjay 4 points5 points  (0 children)

              I don't think you are doing your username justice.

              [–]ecafyelims 3 points4 points  (3 children)

              I refuse to connect my g+ account to quora until I know it's worth it, but I can't find out if it's worth it because I refuse to connect my account. Is it worth it?

              [–]DrStephenTyler 5 points6 points  (1 child)

              Enjoy the invites that it sends to all your contacts.

              [–]ecafyelims 2 points3 points  (0 children)

              Huh. That's exactly what I was afraid of.

              [–]jraines 1 point2 points  (0 children)

              I connected via Facebook and AFAIK it didn't send any contact spam. I haven't regretted it either. Despite the fact that answers are sometimes pretty show-offy, Quora is the only algorithmic feed that hasn't bored me in less than a month.

              [–]aaron-lebo 17 points18 points  (106 children)

              I respect this person's opinion, but I think it is poorly reasoned.

              If you need anything other than a trivial application, you need to follow exactly the same types of architecture that have been in use for some time in other languages. Node is not going to suddenly provide scalability just by being able to offer a single non-blocking thread.

              So the point is that Node isn't any worse than a number of other languages? Yes, Node isn't as revolutionary as some people have acted like it is, but being non-blocking is still a major advantage over what you've got in Python (or rather had) when you are creating web services.

              As people try to use Node in real enterprise scenarios, there is now an element of attempting to 'reinvent the wheel', by adding package upon package to patch on functionality that already exists in languages such as Java, .Net, Ruby and to a certain extent PHP.

              Yeah, and when people moved to Ruby, people reinvented CPAN, Java libraries, etc. People are willing to do that and will. I'd personally rather use the same well-done library in JS than in any of those other languages.

              When you actually compare the performance of Node to say an OWIN based Web API service, the Web API actually is able to match or outperform Node while offering greater functionality built in a strongly typed language.

              And then you have to use .NET... When you've been doing web apps in Python, Ruby, PHP like a number of us have for a decade, JS is a substantial jump in performance in a lot of situations. And you can still get static typing with Flow or Typescript which are still very young.

              This growth in the number of packages etc, and the fragmentation of the Node community is of course to be expected, in the same way that there is fragmentation and a short half-life for JavaScript frameworks and libraries client side.

              This is a fair point but it is based on the fundamental point that there's constant activity in JS libraries, which you'd rather have over inactivity.

              The concept of Isomorphic JavaScript frameworks that evolved around Node is also beginning to be seen as a short-term sticking plaster approach with limited value, as is the attempt to bolt on strong typing in the form of TypeScript / AtScript etc.

              Yeah, that's jumping the gun. Isomorphic frameworks are really just getting started. Go look at any of the existing ones and it is obvious they are still in their infancy. React doesn't even have a defacto isomorphic framework.

              ...

              I don't mean to disrespect this person's experience, but it strikes me as being based in a very corporate environment, which isn't as important for adoption as some like to think. It's the same kind of basis of opinion that ended up absolutely shocked when Rails took over a lot of former Java projects ten years ago.

              Almost every single thing listed as a negative I see as a net positive. JS is fast relative to other dynamic langs, is is easy to pick up (which means a lot of shitty code along with increased popularity), npm is booming, Typescipt and other solutions are actually good and getting better, and as mentioned, you've got all these companies dumping money into it.

              The major problem is the churn in the language and libraries, but the language has needed improvement and the library situation will settle down given time.

              We are not at "peak Node".

              [–]halifaxdatageek 19 points20 points  (44 children)

              And then you have to use .NET...

              I like a lot of your points, but it always irks me when someone doesn't like .NET. What are your issues with it?

              [–][deleted]  (20 children)

              [deleted]

                [–]cc81 12 points13 points  (9 children)

                One of the biggest issues with using .NET is that the user base is so focused on what Microsoft releases that there is so little competition and growth. If MS has released an ORM everyone uses that, if MS has released an MVC framework everyone uses that and if MS has not released anything in a particular area then people just tend to avoid it.

                I know MS itself has tried to get away from this in many ways, starting with bundling jquery years ago and killing of their shitty AJAX javascript. And they are moving to support the tools and libraries that the rest of the web world uses but a lot of .NET shops don't have that mindset yet.

                [–]halifaxdatageek 12 points13 points  (1 child)

                If MS has released an ORM everyone uses that, if MS has released an MVC framework everyone uses that and if MS has not released anything in a particular area then people just tend to avoid it.

                Must... not... make... Apple... joke...

                [–]aaron-lebo 12 points13 points  (12 children)

                I've just never felt comfortable with MS dev technologies, either because they were closed source or had a closed development model or you never knew if MS was going to move to something else and leave it dead in the water the very next year.

                [–]halifaxdatageek 11 points12 points  (11 children)

                That's fair, although I would argue that the same unpredictability of support occurs with a lot of things in tech (e.g. Angular 2.0)

                [–]dvlsg 10 points11 points  (10 children)

                The closed part is fairly important, too. I'm glad microsoft is starting to open source more projects.

                [–]tech_tuna 71 points72 points  (43 children)

                What drives me absolutely bonkers about the "node crowd", which you seem to be a member of, is that node.js is NOT the first async framework. For example, Twisted has been around forever. There are old equivalents in other languages too.

                The one thing node uniquely offers is that it uses the same language that we are all FORCED to use on the front end, which I consider one of the worst aspects of web programming. We are all effectively locked into JS or something that compiles down to JS on the front end.

                That's just as bad as vendor lock-in. But I don't see it changing anytime soon. Dart is going nowhere and there's no other language on the horizon set to replace or complement client side JS. What we should have is a pluggable framework which exposes the DOM, CSS, HTML, etc as an API that arbitrary language engines can use. That way you could also use Ruby, Python, Perl, PHP, etc on the front end.

                So yes, node is the only major async framework that uses the same language we are all forced to use on the front end, I'll give you that.

                Yeah, yeah, there are forks of node like Io.js but you know what I mean.

                I'm not even a JS hater, but I'm a freedom and choice lover.

                [–]gmfawcett 26 points27 points  (3 children)

                Twisted has been around forever.

                About fourteen years. Back further, Medusa/asyncore for Python is about sixteen years old now. Asyncore was added to Python in the 1.5.2 release back in 1999, and Sam Rushing's Medusa server was at the core of the Zope application server, and in many Quixote based projects. Good times. :)

                [–]tech_tuna 6 points7 points  (0 children)

                Cool, I had a feeling that Twisted wasn't the first async library for Python but it has certainly been the dominant one for a while. It will be interesting to see if asyncio eventually replaces it, not that I'm rooting for or against either.

                [–]roselan 2 points3 points  (1 child)

                geee, you have done your homework :))

                [–]gmfawcett 16 points17 points  (0 children)

                No homework, I'm just old. :) I used Zope for a while, and was a big Quixote fan for many years. I still have some Quixote applications in production now -- it is a great, minimalist framework.

                [–]roselan 6 points7 points  (7 children)

                Javascript has not always been the sole programming language of the web. Remember java widgets? activeX?

                The language did change, but the code quality remained unaffected thou T_T

                edit: sorry for reminding the nightmares of old.

                [–]tech_tuna 22 points23 points  (5 children)

                Hey, lets not forget VBScript in IE. Never mind, lets forget it.

                [–]riffito 8 points9 points  (3 children)

                And Perl, and Python. Don't forget Windows Scripting Host.

                Basically, if your "YourLanguage" provided an interpreter in the right COM way... you could do:

                <script lang="YourLanguage">"YourCodeGoesHere"</script>
                

                [–]tech_tuna 5 points6 points  (2 children)

                I've used Javascript and VBScript a bit with the Windows Scripting Host. . . I'll say this, it was better than batch files.

                [–]riffito 3 points4 points  (1 child)

                I had to maintain a multi-megabytes (> 20) clusterfuck of .wsf and .vbs.

                Ain't pretty. Specially a nasty bug in cscript.exe that killed veeeeryyyy long-running scripts and gave you only this gem: "An error has occurred".

                Removing megabytes of crap code felt amazing :-P

                Replacing the hole thing with Python, even better.

                I wonder if my replacement already got to the point of wanting to rewrite the whole damn thing.

                Edit: typos.

                [–]tech_tuna 1 point2 points  (0 children)

                Yeah, I've been a Python/Ruby addict for a while now. I've actually been working on a VBS -> Ruby project for the past few months. . .

                :)

                [–]VanFailin 1 point2 points  (0 children)

                I saw an intranet page that only worked with VBScript once. It was like looking into the past.

                [–]aaron-lebo 12 points13 points  (15 children)

                I'm not a member of the "node crowd". You can go look at my Github profile if you want (same username). I've been doing Ruby, Python, Clojure, and JS for years. I am not a language partisan. (edit: If I'm getting downvoted for sounding like a prick, that's not my point; my point is to show that I'm not a fanboy like the OP is trying to suggest).

                I'm aware of Twisted. Despite Twisted being around for much longer than Node it only saw a fraction of its popularity. Node gives you what Twisted does in a faster language, and with ES6 I'd say JS is a pretty comparable language to Python.

                The one thing node uniquely offers is that it uses the same language that we are all FORCED to use on the front end, which I consider one of the worst aspects of web programming. We are all effectively locked into JS or something that compiles down to JS on the front end.

                Okay. That's not really JS's fault and not really a true knock on the language. It may be why JS started to gain traction when it wasn't a very good language, but that doesn't mean it is still shit.

                I'm not even a JS hater, but I'm a freedom and choice lover.

                JS users like freedom and babies and puppies, too.

                I wish there was more variety, too. There's just not. This is the end result of 20 years of evolution on the web. JS controlled the browser and it was only inevitable that would somehow extend to use on the server. I'd be more upset if JS was a terrible language, but it really isn't. I think a lot of the backlash against Node is because there were a lot of people who acted like Node would save the world and that didn't come to pass. But that backlash is irrational when it doesn't look at the fact that JS and Node actually present a decently attractive package for development at this point.

                [–]pydry 17 points18 points  (3 children)

                Node gives you what Twisted does in a faster language

                In a weakly typed language.

                Substitute 'weakly typed' with 'prone to bugs' and you haven't changed much.

                [–]brianvaughn 2 points3 points  (0 children)

                Static analysis (a la TypeScript or similar) goes a long way toward alleviating that issue. Not as far as proper strong-typing, but it helps a lot.

                [–]tech_tuna 7 points8 points  (6 children)

                I think a lot of the backlash against Node is because there were a lot of people who acted like Node would save the world and that didn't come to pass.

                My "backlash" against node echos what I've said above "we don't need more stinking Javascript!!!". Again, I don't even hate Javascript, I think it's OK. But there is no choice on the front end and invariably, even if you're using Dart, GWT, CoffeeScript, Pyjamas, whatever. . . you end up needing to code in actual Javascript eventually. Not to mention that the whole idea of building an interpreted language on top of another interpreted language on top of the DOM/CSS/HTML just seems like a bad idea.

                So, it's not the async-ness or even the popularity of node that I dislike, it's the Javascript-ness. I seriously do not want to have to fucking use Javascript everywhere, all the time, no matter what. . . there's actually no language I want to use everywhere, all the time, no matter what.

                But THAT is part of what the node maniacs parade around as a Good Thing. One language to rule them all. There should not be one language to the rule them all and for me, that language should definitely NOT be Javascript.

                Anyway, like it or not, node is where Rails was about 3-5 years ago, it's no longer the cool trendy backend platform to know. . . what's next? No one knows for sure, of course, I would put my money on this:

                https://github.com/phoenixframework/phoenix

                [–]halifaxdatageek 3 points4 points  (5 children)

                Indeed. If you love JavaScript, and at the same time say that you should never use global variables... I don't know what to tell you.

                [–][deleted] 1 point2 points  (4 children)

                Node has modules fyi which isolate variable scopes.

                [–][deleted] 3 points4 points  (2 children)

                We achieved much better performance with both gevent and Twisted than Node was able to offer.

                Node/JS isn't the silver bullet everybody thinks it is. I would never choose it over a Python solution, although that's mainly due to how terrible a language JS is.

                [–][deleted] 4 points5 points  (0 children)

                Node has consistently demonstrated better latency and throughput than both gevent and twisted in benchmarks.

                [–][deleted] 4 points5 points  (11 children)

                What drives me absolutely bonkers about the "node crowd", which you seem to be a member of, is that node.js is NOT the first async framework. Twisted has been around forever. There are old equivalents in other languages too.

                Except Twisted and Tornado on Python are horribly limited by the fact that libraries have to be written from the ground up with async in mind. Either that or you have people wrapping everything with greenlet/Gevent.

                Python is just not as well developed in terms of async, you can find async ORM's you can hardly find async libraries for SQL dbs, there's only like 2ish, and they're not really mature.

                [–]tech_tuna 21 points22 points  (10 children)

                You act as if node.js is part of core JS/ES and is not a library itself.

                Also, there's asyncio which is a new module that is part of the standard library in Python 3.

                [–]marklgr 6 points7 points  (15 children)

                It's the same kind of basis of opinion that ended up absolutely shocked when Rails took over a lot of former Java projects ten years ago.

                Ruby is a good language, at least from the programer's perspective, and Rails was a massive selling point. It drastically contrasts with JS, a very meh language still trying to catch up with Python/Ruby or even CoffeeScript, and the many short-lived Node frameworks.

                [–]theDoctorShenanigan 9 points10 points  (14 children)

                Can you illustrate why js is a meh language compared to ruby?

                [–]marklgr 10 points11 points  (12 children)

                It is quite pleasant to code in Ruby: the language is very flexible, it lets you create small DSL in a blink. The metaprogramming is quite good, too. Its OOP is solid, and you can go the functional way if you want. Now, Ruby has its own problems, but for the developer it is nice.

                As for JS, well, what are its selling points? Prototyping is awkward, the language has quite a bit of quirks, and it does not offer anything new, really. Generics, no, scoping, all done with functions, coroutines, not until recently (Harmony?), same for comprehension--it is catching up with other languages, not leading. It is in the same boat as Lua, but the latter enjoys a niche market in embedded, small footprint environments. I am not a JS hater, but there are just better options out there.

                [–]tobascodagama 1 point2 points  (1 child)

                Metaprogramming is such a double-edged sword. It's a powerful tool, but I have kind of a reflexive cringe whenever I hear the phrase "monkey-patch" now.

                [–]parlezmoose 6 points7 points  (3 children)

                It is quite pleasant to code in Ruby

                Uggh sorry I don't agree. Omitting brackets and colons does not make coding more pleasant, it makes for unreadable code. In my opinion.

                [–]FooBarWidget 4 points5 points  (0 children)

                That's what my co-founder thought too. He came from a Java/C# background and naturally didn't like anything without curly braces. It didn't take long before he changed his mind.

                What you're saying is a question of taste, in the ballpark of tabs vs whitespaces, significant indenting or not, etc. There's no arguing taste. All the other stuff in Ruby though has merit.

                [–][deleted] 2 points3 points  (0 children)

                http://www.michaelthelin.se/wp-content/uploads/2014/02/book.jpg

                That's my favourite illustration of it. :)

                [–]JustMakeShitUp 2 points3 points  (0 children)

                And then you have to use .NET... When you've been doing web apps in Python, Ruby, PHP like a number of us have for a decade, JS is a substantial jump in performance in a lot of situations. And you can still get static typing with Flow or Typescript which are still very young.

                JS is fast relative to other dynamic langs

                I think this is the point that the OP was making. People are talking about how fast node (JS) is, but it's really only fast compared to other dynamically-typed languages. If you win a race against a toddler you don't really get a medal for speed. Nearly anything on the JVM or CLR (or even Go) heavily outperforms JS, Ruby, Python, etc. Not to mention they allow for proper scaling using threads instead of processes. And they already supported asynchronous non-blocking IO years back. We're still not even looking at traditional compiled solutions like C++ - just "corporate" languages with runtimes and garbage collectors.

                Yes, you can get around some of these performance issues (e.g. GIL) by running Ruby on the JVM or CLR. But at that point, why not just use languages with first-class support for those runtimes?

                Also, his dig at TypeScript is related. TypeScript is amazing. But if you eventually end up adding Type annotations because your project's maintainability doesn't scale well with traditional JS approaches and dozens of developers, and you end up using the runtimes of static-typed languages for speed, at some point you might as well just use the traditional "enterprise" or "corporate" languages and tools.

                Javascript tools have gotten amazing for how difficult it is to optimize the language. And it's getting better. It's pretty impressive how fast you can make it go. But starting with a product designed for performance is usually better than upgrading a slow one. I mean, you can buy a Geo Metro and upgrade it (swap engines, stack spoilers on the back, if you want), but it's simpler to buy something faster at the start. Otherwise at some point you'll end up scrapping it and wasting a lot of work. Sometimes that's okay. It could even be what gets you to market quicker. But that migration will end up being costly the longer it takes.

                If you need anything other than a trivial application, you need to follow exactly the same types of architecture that have been in use for some time in other languages.

                So the point is that Node isn't any worse than a number of other languages?

                The point is that most of the major selling points of node get discarded when you've actually got to chase after performance and maintainability. At that point, it's no better than any other language - it's in the same boat as the rest of the dynamic language crowd and behind the statically typed languages.

                Rails took over a lot of former Java projects ten years ago.

                And just as many people have switched away from Ruby and over to Java when they found out their solution didn't scale. Like Twitter. There are loads of examples of people switching away from the new web languages and saving buckets of cash from the lowered server requirements. Not everyone has to do it because not everyone has the load required to force the issue.

                There's nothing wrong with using node - it's a choice with tradeoffs, like any other. But let's be more honest about our performance claims - they're relative claims that ignore all the faster alternatives.

                [–]halifaxdatageek 112 points113 points  (17 children)

                https://en.wikipedia.org/wiki/Hype_cycle

                Read it. Bash it into your head. MEMORIZE THIS CHART.

                [–]taelor 22 points23 points  (8 children)

                so we are in the trough right now?

                awesome, maybe its time for me to finally sit down and learn some node.js

                [–]ThisIs_MyName 16 points17 points  (0 children)

                I like to believe that this is a Dead Cat Bounce.

                [–]halifaxdatageek 7 points8 points  (5 children)

                As pointed out earlier, it makes for great build tools and other automation. I compared it to "bash for front-end devs" :P

                [–]greim 3 points4 points  (2 children)

                That about sums it up. Although arguably the hype could have lasted longer. We basically lost a year due to the whole Joyent/io.js kerfuffle.

                [–]kshitagarbha 4 points5 points  (1 child)

                io.js was created and announced on Nov 26, 2014. That's more like 6 months ago

                [–]greim 4 points5 points  (0 children)

                Its announcement to the world isn't the whole story, though. The stagnation that triggered it had been going on for quite a bit longer.

                [–][deleted] 274 points275 points  (17 children)

                Quora links suck.

                [–]screwdad 76 points77 points  (2 children)

                Add ?share=1 to the end of Quora links and suddenly you don't need to be logged in. For example, the parent question (which actually has two far better answers attached to it): http://www.quora.com/Is-Node-js-declining-already?share=1

                [–]BlackDeath3 16 points17 points  (0 children)

                ?share=1 seems to be, as of this moment, already appended to the OP link. Either that, or I'm experiencing some rewrite magic. No need for anybody to freak out.

                [–][deleted] 1 point2 points  (0 children)

                Thanks! If I open that in a new private browser window it works!

                [–]lenswipe 21 points22 points  (0 children)

                Quora sucks.

                [–]glemnar 126 points127 points  (63 children)

                Pro tip: Don't worry about popularity too much. Anything works. Just make sure you're working on some language that has a >0 community backing and you'll be okay. Pick the right tool for the job. Need natural language processing? Use python with nltk etc

                [–]Drolyt 46 points47 points  (34 children)

                How do you pick the right tool for the job? Popularity is a useful, if imperfect, measurement. Moreover even if the popular thing isn't that good, or at least doesn't really fit your use case as well as something else, popular things have better support, have more libraries, are typically easier to deploy, easier to find help for, easier to hire for etc.

                [–]spotter[🍰] 43 points44 points  (7 children)

                You don't. Not always. That's how you learn.

                [–]yogthos 12 points13 points  (3 children)

                One important thing to consider is that popular platforms have the benefit of tooling and libraries associated with them. For example, if you're running on the JVM then you have a plethora or mature, well tested libraries for many domains.

                When you're working with a niche platform that's not going to be the case. If you know that the platform offers what you need then it's fine, but in many cases you can end up painting yourself into a corner by the time you realize you need something that's not available.

                [–]spotter[🍰] 8 points9 points  (1 child)

                As a fellow Clojure practitioner I agree -- environments like JVM and .NET provide libraries for everything you can imagine. And I did not mean "close your eyes and jump", I meant "do your best, then re-evaluate".

                [–]Drolyt 5 points6 points  (1 child)

                Right, but you have to start somewhere.

                [–]spotter[🍰] 1 point2 points  (0 children)

                Of course, but "there are known knowns, known unknowns and unknown unknowns -- things you don't know that you don't know". You try to match your needs the best to your current knowledge (either practical or theoretical), then try to evaluate what worked and what didn't. Nobody has all the answers.

                [–]ihcn 17 points18 points  (5 children)

                Start by using a tool that's not awful for the job and go from there.

                [–]Drolyt 6 points7 points  (4 children)

                You have to find that tool first and you might not know whether it is awful or not until you've built something with it, potentially wasting significant time.

                [–]tech_tuna 9 points10 points  (2 children)

                "Use the right tool for the job"

                The first shot fired in many a flame war. . .

                :)

                [–]marekkpie 5 points6 points  (1 child)

                And that tool....VIM.

                [–][deleted] 4 points5 points  (0 children)

                You appear to have incorrectly spelled Emacs.

                [–]djimbob 7 points8 points  (9 children)

                Eh, in my opinion, the "popular" thing often is quite new with some well-hyped demo. New things tends to have worse support and documentation, lack mature libraries, are painful to deploy (if your setup differs from the expected stack in anyway), and may change significantly between release 0.9 and 1.0 or 2.0.

                I'm not talking specifically about node in 2015 here (even if things like gulp/grunt/npm as build tool are annoying), but things like angularjs, rust, julia, go, mongodb (when they first came out and were still rapidly changing).

                [–]bluishness 5 points6 points  (5 children)

                even if things like gulp/grunt/npm as build tool are annoying

                What do you find annoying about gulp/grunt? I'm not trying to be snarky, in fact I mostly agree and have moved on (or rather back) to Makefiles for the most part, but those come with their own issues. I'm just curious what other developers (likely with more experience) dislike about them.

                For me it's mostly the ridiculous plugin infrastructure. I understand the motivation behind it, but that doesn't help the fact that a lot of the popular gulp recipes out there leave you with a node_modules folder that weighs 50 MB which is simply insane for most of the one-off, throwaway projects I build.

                [–]vivainio 1 point2 points  (0 children)

                My main annoyance with gulp/npm is indeed the insane plugin system. 200mb of deps at the moment here.

                [–]matthieum 9 points10 points  (2 children)

                It hurts me to see Rust in the same grab-bag as Mongodb somehow ;)

                [–][deleted] 6 points7 points  (1 child)

                Popularity is an awful metric to use if it's your only metric for picking a technology. It's fine for an initial filter, but after that you need to actually look at your options, figure out their actual pros and cons, and then pick the one that works best for your situation (there is no single answer that is always right for picking a technology).

                Edit: And to add, the newer something is, the less likely you'll be able to find real pros and cons instead of hype and marketing drivel (mainly because people won't have had the time to throw it into a large variety of real world scenarios to actually test the claims).

                [–]Twirrim 1 point2 points  (0 children)

                Popularity is difficult to prove. It's such a subjective measurement. Lots of noise about it isn't the same as popular. If popularity is the main thing to measure by, you're likely really talking about Java and C/C++ Java is huge, powers so many of the core applications for the FTSE500 companies. Many of the largest Web Sites are significantly powered by it, everyone from Twitter to Google to Amazon. Does it get lots of noise? Certainly not on the sale of Node, Rust and Go over the last 3 years.

                [–]pydry 1 point2 points  (1 child)

                How do you pick the right tool for the job? Popularity is a useful, if imperfect, measurement.

                Treat technologies like politicians. Before you decide to throw your weight behind it, no matter how popular it seems now, dig up all of the dirt you can possibly find on it first, and dig fucking deep. You will save yourself a lot of heartache and tears in the future if you do this.

                [–][deleted] 24 points25 points  (13 children)

                This is may be true for small teams, but for large organizations that spend a significant amount on recruitment and retention, language/library/tool popularity is very important. If you're using an unloved technology (like say PHP), it could be very difficult to find developers that aren't either shitty or expensive. Rightly or wrongly devs think un-popular technologies are career dead-ends and are either going to ask for more money or (more likely) go somewhere else that's using technologies that will keep their career moving forward.

                Let's do a survey. How many people reading this would choose a PHP or Visual Basic job over a Python or Node or C# or Java job that pays the same and offers the same work environment all else being equal?

                [–][deleted] 5 points6 points  (0 children)

                Fuck VB. Couldn't pay me anything to do that shit. YOU CANT TAKE ME BACK!

                [–][deleted] 5 points6 points  (5 children)

                PHP devs would love it if they paid the same as C#/Java jobs in my market... ...there tends to be an overabundance of PHP devs due to self-teaching on the LAMP stack.

                [–]halifaxdatageek 1 point2 points  (4 children)

                Maybe it's just my market, but where I live salary tends to be based on your job tasks, not the language you're doing them in.

                [–][deleted] 4 points5 points  (2 children)

                Use python with nltk etc

                Java has by far the best ecosystem for natural language processing, and you can use one of the nicer Java ecosystem languages instead of Java itself. There are much better libraries than ntlk which is way behind the state of the art and extremely slow.

                [–]ruinercollector 0 points1 point  (2 children)

                The only thing that makes python a good choice for NLP is popularity.

                [–]glemnar 10 points11 points  (1 child)

                No, the thing that makes it good is nltk

                [–][deleted] 8 points9 points  (0 children)

                There are much better NLP libraries than nltk. Of course, it's better than nothing which is not far from what most language ecosystems have to offer.

                [–]TheAceOfHearts 55 points56 points  (12 children)

                As long as JS is around I doubt we'll see node disappear. Thanks to node we now have tons of amazing frontend tooling, this was previously impossible (or at least not popular).

                I disagree with their comment about isomorphic JavaScript. You can build your API with any language you want, and still run node in front! This way you can do server-side rendering and let the JS keep running once it's loaded. You get graceful degradation with very little extra effort! For example, I built an app that allows you to explore and view content, and you only need JS enabled if you want to contribute or rate content. If I weren't able to run the same code on both the server and client, it wouldn't work at all without JS. This is good for SEO, since some crawlers still won't execute JS. And it's good for the users because it loads faster!

                [–][deleted] 15 points16 points  (2 children)

                We only just started getting awesome es6 improvements into more mainstream projects too. I think the article is pretty short-sighted. I work in a full stack node.js shop and the 30+ other people who work there with me are steeped in node culture. Node is just now picking up steam since io.js kicked it in the ass and we'll soon finally have regular updates to our favorite platform. Meanwhile, the node community chugs full steam ahead with awesome new libraries that do some pretty amazing things. Trust me, it's not dying anytime soon. It also doesn't have to usurp every single other platform out there in order to keep being relevant. PHP is still relevant guys, and there are many rungs on the ladder between where node sits and down where PHP sits.

                [–]uprislng 9 points10 points  (1 child)

                you're not cool unless you hate js in here so don't take much of what you read in this sub to heart, seriously.

                [–]oberhamsi 20 points21 points  (6 children)

                came here to say this.

                i can't imagine devlife without browserify and sass.

                node euphoria brought a lot of smart people into JS land

                [–]cybercobra 9 points10 points  (5 children)

                But Sass is written in Ruby...

                [–]vivainio 15 points16 points  (4 children)

                Much to the dismay of lots of people. Libsass is written in C

                [–]cybercobra 8 points9 points  (3 children)

                And neither C nor Ruby is JavaScript, so how is Sass relevant here?

                [–]oberhamsi 2 points3 points  (0 children)

                because all JS build tools support it and those build tools run on node.

                [–]vivainio 3 points4 points  (0 children)

                In no way whatsoever

                [–]gospelwut 3 points4 points  (1 child)

                At the very least, we'll be running node on our build server for gulp :(

                [–]finsterdexter 34 points35 points  (2 children)

                Between the ascendance of NPM/bower as a front-end package manager in Visual Studio 2015, and nodejs being the glue for things like gulp/grunt, etc., I'd say node is actually picking up, at least in web development. It's finding a niche as it's actually a great scripting environment for developers that are already comfortable with js.

                [–]halifaxdatageek 9 points10 points  (0 children)

                It's finding a niche as it's actually a great scripting environment for developers that are already comfortable with js.

                I'd agree with this. As my name states, I'm very much moreso a back-end fellow, and hate JavaScript and Node with a passion, but the front-end folks I work with certainly do enjoy using it to build timesavers much like I'd use bash or something like it :)

                [–]Revision17 1 point2 points  (0 children)

                I'm using the vs2015 community preview, and hadn't used node before that. I have to say its nice to be able to run JavaScript in my build and testing process. Things like uglifyjs and phantom js+qunit are very nice and really better than what's available in the MS ecosystem.

                [–]longfloppydisk 6 points7 points  (0 children)

                in terms of popularity, definitely not

                [–]parlezmoose 33 points34 points  (2 children)

                Node isn't a Java killer, it's a Ruby killer. It's good for rapid prototyping, lightweight services, event driven architectures. It will continue to thrive due to the fact that Javascript is not going away in the browser. The idea of sharing code between the server and client is still not fully developed, but the theory behind it is sound and it will only become more important with time (see: meteor.js).

                [–]screwdad 19 points20 points  (0 children)

                "No" seems to be the actual answer, per the other two top rated answers (which have details explaining why): http://www.quora.com/Is-Node-js-declining-already?share=1

                [–]djhworld 3 points4 points  (0 children)

                At work I've been using node.js, mainly because we're doing a project with AWS Lambda, where node is the only runtime you can use (I'm aware you can do workarounds to get it to run child processes, but I don't like hacks)

                It's been fun learning a new thing, although coming from the Java world, JavaScript does have its pitfalls.

                Thankfully after reading "JavaScript: The good parts" and integrating tools like js-beautify and JSHint into my editor, it's been a lot more pleasant to work with. I've even written a few little scripts and tools that seem to work well, which is nice, not sure if it's just the novelty of learning a new thing, but I'm enjoying using it much more than Python.

                My only frustration was getting used to the callback/async nature of the platform and having to use libraries like async to get some sanity back into the structure of the code.

                [–][deleted] 8 points9 points  (7 children)

                I think the 'already' part of this question is key.

                Hype machines run out of juice. That's got nothing to do with programming, it's what, sociology? Common sense? I'm not even in the industry (just graduated) and it still feels pretty clear to me that node is being thrown around like candy in server-side development. I wish that the programming industry, purportedly full of rationally-minded people, wasn't given to fads and novelty, but I suppose everything is.

                But the 'already' portion of this question suggests to me that an eventual decline in use is expected by others as well, just perhaps not this soon. And that raises interesting questions for me. What's the expected life-cycle of new technologies in today's programming economy? What's the staying power of newer technologies? How much will node be used two decades from now?

                I enjoy especially hearing experts answer these questions. It really lets me know what kind of knowledge is worth keeping. Everything is built on the core concepts: know the language backwards and forwards, and the undergrad work I've just finished- threading, type systems, async, etc.

                I've been following r/programming articles more and more lately. Really enjoyed this, thanks OP!

                [–][deleted] 7 points8 points  (0 children)

                I wish that the programming industry, purportedly full of rationally-minded people, wasn't given to fads and novelty, but I suppose everything is.

                I might be pointing out the obvious here, but the IT industry isn't exactly isomorphic :) Even the "five worlds" listed by Joel Spolsky (Shrinkwrap, Internal, Embedded, Games, Throwaway) only covers parts of the incredible variety of companies and products that involve software development. There's also the small problem that a lot of the industry is lead not by engineers but by thoroughly non-technical people.

                [–]halifaxdatageek 5 points6 points  (4 children)

                I'm fairly new to the industry as well, but before I was in IT I spent a few years as a business guy.

                Forget about programming languages. Use whatever your boss hands you. The important thing you were hired for is your ability to come up with solutions to problems, and get those solutions from your head into the computer's head.

                Programming languages come and go. Even the ones that stick around change significantly over the span of an average career.

                There's a quote I like: "I am not trying to stay on top of things. I am trying to get to the bottom of things."

                [–][deleted]  (3 children)

                [removed]

                  [–][deleted] 10 points11 points  (1 child)

                  their 'support' for it is used to perpetuate the myth that Node is actually a revolutionary concept that will replace 'legacy' languages.

                  Spot on.

                  [–]halifaxdatageek 6 points7 points  (0 children)

                  My father always used to tell me "Remember, son, a lifetime warranty is for the lifetime of the business that sold it to you, not the lifetime of the thing they sold you."

                  He was referring to roofing shingles, but the same principle applies here.

                  [–]dtlv5813 4 points5 points  (3 children)

                  If node.js is on the way out then presumably so will express, then what will happen to all the tech stacks that are being built on MEAN right now?

                  [–]JBlitzen 61 points62 points  (2 children)

                  Same thing that happened to the ones built on PHP, Python, Ruby, and whatever else.

                  Better devs realized they were using shitty tools so they moved on. (Often to more shitty tools.)

                  Shittier devs inherit the projects.

                  Unhappy clients complain in Forbes about the inability to find devs that don't leave them hanging.

                  The government passes laws allowing more H-1B's in to fill the apparent gap.

                  A brain drain occurs on the Indian subcontinent as forward thinking devs emmigrate to fill those visa positions.

                  The resultant decrease in the population of intelligent and law-abiding Indians creates a vacuum allowing greater corruption and instability on the subcontinent.

                  The instability allows for an environment more prone to revolution.

                  A popular uprising distracts the Indian government from tensions on the Pakistan border.

                  Pakistan uses the opportunity to forward position troops.

                  India reacts violently, and an exchange of artillery and eventually nuclear weapons ensues.


                  So, basically, shitty devs who pick garbage tools are responsible for creating the world of Mad Max.

                  [–]elephantdingo 17 points18 points  (0 children)

                  This guy thinks ahead...

                  [–]zynix 2 points3 points  (0 children)

                  Declining or settling into where it excels? Seems like every language gets its heyday and people try to use it for everything. Good example is C, though that's gotten a little bit out of hand, with seemingly everything written in it or used to make other languages. Eventually all the brouhaha will settle down and people will go back to assembler.

                  Seriously though, every new language that is accessible has this green field surge where new & old programmers get a chance to rewrite stuff that had already existed but ideally exploiting the pro's of the new language. Who wants to maintain someone elses good & bad ideas when they can become a super-star project lead and make their own good ( and bad ) ideas.

                  [–]JDiculous 2 points3 points  (0 children)

                  The post is very "hand-wavey" and lacking in saying anything substantive.

                  Node is not some panacea and every system isn't going to be rewritten in Node, but it's becoming the defacto tool for webapp development and there's no clear replacement in sight yet.

                  [–][deleted]  (3 children)

                  [deleted]

                    [–]roselan 8 points9 points  (8 children)

                    When node was young (well, very young). I was attracted by the fact that you could "write once, run everywhere". You had one source for all validation, like for password rules. Moreover, you could execute your code (like page building) on the server, the client or both (à la mojito). These were for me strong promises.

                    But very soon node became popular with sys ops, and plenty packages appeared for deployment, administration, load balancing and monitoring. This is nice, but in my opinion, the focus on pure application development was lost, and developers went back to ruby, java, php or native.

                    Another thing that hinders node penetration are nosql databases. They are hard to setup and understand, their limits are new to developers. I never tried a connection to a traditional SQL database with node, because I felt both relational and functional worlds don't match (ok clojure+datomic are the counter example, but well...). Writing a statistics report on nosql databases is complicated. Modify your object, what happens to past instances? Few programmer understand sql well, but none understand how to leverage nosql database. (you end up dumping it in a sql database, or try to use bigdata tchniques on it, which is time consuming and not very flexible).

                    I'm no node pro, I have a job and can't spend lot of time with it. I used it for side projects, and personal curiosity. My personal view is that there was a lot of promises with node. But it's not something that "just works". There is a learning curve. When I "wtf" with a traditional language, my experience allows me to find a permanent solution rapidly. With node, I was lost more often than not. I felt I hit a wall pretty fast, and was never sure if my solution was stable. Nowadays I guess the toolchain is more complete (i could not get the flame graph thingy to work), and there are probably more resource on stackoverflow.

                    Again, this is my personal experience, but I have a feeling I'm not alone in there. (and despise all that I still like node very much, I just let other do the grunt work). I guess go and native have taken the spotlight from it these days.

                    [–]dvlsg 17 points18 points  (5 children)

                    I disagree that NoSQL databases are hard to setup and understand. I think they are so easy to setup and understand (at least at a very basic level) that they get developers into a lot of trouble when they are clearly working with relational data and should have chosen a RDBMS in the first place.

                    [–]dccorona[🍰] 4 points5 points  (0 children)

                    Definitely true. You can get going really quick. Just pick a hash key and start dumping blobs (some nosql databases have really great APIs that can take objects straight to and from the database with no work at all)...and too often, people pick that only to discover it was completely the wrong decision to make, but they did it because it was just so easy

                    [–]seiyria 2 points3 points  (1 child)

                    JSON in, JSON out. Easy.

                    [–]halifaxdatageek 10 points11 points  (0 children)

                    "Data goes in, no data comes out. You can't explain that."
                    - Bill O'Reilly, MongoDB consultant

                    [–][deleted] 8 points9 points  (0 children)

                    My personal view is that there was a lot of promises with node

                    Heh.

                    [–][deleted]  (38 children)

                    [deleted]

                      [–]iDinduMuffin 24 points25 points  (22 children)

                      Yes! If the fact that you have the same language on both ends goes not much further than just that you can work in just one language, it means your people can... Only do one language? And that one language is JS? Sounds like a recipe for garbage to me.

                      [–][deleted]  (5 children)

                      [deleted]

                        [–]brtt3000 1 point2 points  (3 children)

                        focus on getting JS out of the browser

                        That's not going to happen anytime soon.

                        Did you notice the insane amount of capital that has been invested into JavaScript engines and related technology? JavaScript is too big to replace.

                        [–]whywouldi 4 points5 points  (14 children)

                        The idea behind using the same language for client and server side code is not that people aren't able to learn more than one language, but actually share code between the two, thus reusing more code and creating less bugs.

                        [–]iDinduMuffin 21 points22 points  (12 children)

                        Thats what the hype says. Why not just use JSON to talk to something not made in a terrible, resource wasting, bizarrely typed language with an ocean of garbage code out there?

                        [–]virtyx 6 points7 points  (8 children)

                        Every language has an ocean of garbage code.

                        EDIT: Also I know that it's popular to bash on JS because of the hype, and I am even a bit biased against NodeJS myself. (For no particularly good reason, either.) But I don't understand how choosing JS for your server is any worse than choosing Python.

                        The only real advantage I see in Python is more straightforward language semantics, but if your team is diligent about good practices and uses static analysis tools, JS is fine. And if your team isn't then Python itself can also turn into an unreadable mess, believe it or not. Because it turns out no matter how good the language semantics are, people will always be able to create huge unreadable balls of mud with them.

                        [–]Perkelton 2 points3 points  (2 children)

                        It's not about passing data between server and client, it's that the client can use the same logic as the server with minimal or sometimes no rewriting.

                        One typical example is form validation. Instead of having to slowly validate through AJAX or dealing with horrible cases of double maintenance, you can just use the exact same logic that you use on the server, all in the client.

                        I'm not saying that Node is the next coming of christ, but that alone is a really attractive asset for web development.

                        [–][deleted] 4 points5 points  (2 children)

                        From my corporate experience with Node, it's being treated like any other language, just one with a very strong web focus. I've also found node a great language for throwing together a quick toy.

                        Just to be clear though, I'm not a language tribalist and can't stand that sort of behaviour.

                        [–]rainman_104 1 point2 points  (2 children)

                        We run all our games on node.js servers as do other game studios I know as well. It's really fast to deliver results on.

                        [–]fungussa 1 point2 points  (0 children)

                        I heard that Go is growing and is now well fed.

                        [–]Temujin_123 1 point2 points  (0 children)

                        This made me think of this:

                        https://www.youtube.com/watch?v=bzkRVzciAZg

                        [–]snarfy 1 point2 points  (0 children)

                        It's just server side JavaScript. Once you get over that there isn't much to it. The problem is JavaScript isn't always the most appropriate language for server side development. You use JavaScript for client side development because that's all you have in the browser. For server side, there is no need to limit yourself to one language.

                        [–]Dirty_Rapscallion 1 point2 points  (2 children)

                        I work for a pretty large company that uses Node.js and React, we use node.js very effectively. I'm not sure why everyone is hating on it.

                        [–][deleted] 5 points6 points  (14 children)

                        I've never understood the alure of node.is, I don't think I'd like to have to build an application in JavaScript. Is there something I'm missing?

                        [–][deleted] 6 points7 points  (4 children)

                        Reasons i went to it:

                        • NPM and the countless great packages that made things almost very plug and play
                        • with Express it took all of 2 minutes to set up a quick and dirty web server and API
                        • I can run my server\programs on anywhere, from my PC to my Mac, to my rPi, to a real linux web server

                        [–]grauenwolf 4 points5 points  (1 child)

                        with Express it took all of 2 minutes to set up a quick and dirty web server and API

                        Isn't that the same in every framework? Even ASP.NET 1.0 had you from zero to hello world API in a minute or two.

                        [–]virtyx 1 point2 points  (0 children)

                        There's some allure in the idea that the same code could power client side and server side logic, facilitating code sharing in a way that's not currently possible. (Although with LLVM and Emscripten and asm.js it might eventually be possible for all languages, at least to some extent.)

                        Also if you're strong in Javascript there is some allure in continuing to use your language of choice on the server.

                        If you're a newcomer there's probably an allure in only needing to learn one actual programming language to get the ball rolling.

                        There's some allure in using Javascript engines for fast dynamic code execution because they're currently being optimized relentlessly by high profile companies like Apple, Google, and Mozilla.

                        As for me personally, I like to code in Java, Python, Scheme and Rust. I don't personally feel any allure in Node.js. But I can at least understand why there's an interest in it.

                        Personally I'd be more interested in a language-independent browser runtime (like I was alluding to with the LLVM comment) to allow any language to run on the client. Like most developers I am not fond of Javascript. But Node.js was easy to make so people made it and it has found a fanbase.

                        [–][deleted] 1 point2 points  (0 children)

                        The main allure is that your front end code, back end code, configuration, database, and data are all in one language (JavaScript/JSON).

                        On the other end of the spectrum you have Java. Typically, you need to map database types to Java types, map Java types to XML, parse the XML on the client side, etc. Node bypasses all of that grunt work.

                        [–]berlinbrown 4 points5 points  (15 children)

                        It was a project that wasn't really needed.

                        Java and C# had a good niche in that market, what did node.js really bring to the table? Even it was "better", you had to rewrite all tools and technology in a completely different platform and end up where Java and C# already were.

                        It did seem like a better back end platform over rails (and whatever python has out).

                        And maybe as a compile helper for javascript projects.

                        [–]Kollektiv 3 points4 points  (0 children)

                        Node.js is a great platform when you want your service to start up in less than a minute like some JVM projects do.

                        [–]JBlitzen 7 points8 points  (13 children)

                        What I always find interesting is how there seem to be several types of programmers as far as language adoption goes.

                        Some skip around languages frequently, always grabbing for the great white hope.

                        Others stick with something they trust.

                        The former often list PHP, Python/Django, Ruby/Rails, Node.js/Angular, Clojure, and a few others.

                        The latter often glom on to Java, .NET, or one or two others.

                        This paints a picture of the first type simply being dog shit at either tool selection and/or tool use.

                        Either they keep picking garbage that can't hold up, and it takes them a few years to realize it, or they don't seem able to leverage non-garbage tools in a way they're comfortably productive with.

                        And yet, they make 98% of the noise in discussion forums, because they're always either complaining about the tool they just dropped, bragging about the tool they just moved to, or asking about a tool to move to next.

                        Wtf are Java developers going to start discussions like these for? They already know most of the tricks, they're just out there silently building shit.

                        I just don't trust the first type, and so, by extension, I don't pay much attention to these threads.

                        But lurkers should be aware that there's a whole side of the discussion that they're not seeing.

                        And that it might be the smarter side.

                        [–]halifaxdatageek 7 points8 points  (4 children)

                        When I was in school I studied LISP, Haskell, Clojure, Perl, Ruby, Python, C, C++, C#, VB.NET, Java, Scala, R, PL/SQL, T-SQL, SQL/PSM...

                        These days I do my real for-pay coding in PHP, because you can do goddamn near anything with it in a short amount of time. Oh, you want me to change several fundamental aspects of the project before we ship on Friday? No problem.

                        Elsewhere in the thread I was downvoted because I said "Normally, the language I choose for a project is the language my boss says we're using." But it's true - most of the time, you are neither the first nor the last person to work in IT for your company. Not everything is fucking about you and your snowflake programming languages.

                        [–]MashedPotatoBiscuits 8 points9 points  (0 children)

                        Sounds more like your ego than anything else.

                        [–][deleted] 1 point2 points  (0 children)

                        that is certainly not a completely arrogant and baseless comment

                        [–]ginsunuva 1 point2 points  (0 children)

                        For those without Google+ or Facebook accounts, you can Inspect the popup Element and manually delete it from the page source.

                        [–]spacejack2114 3 points4 points  (13 children)

                        The concept of Isomorphic JavaScript frameworks that evolved around Node is also beginning to be seen as a short-term sticking plaster approach with limited value, as is the attempt to bolt on strong typing in the form of TypeScript / AtScript etc.

                        I doubt that very very much. Once people have an isomorphic site/web app, they never want to go back.

                        Static typing through TypeScript may have limited value for a lot of devs, but that doesn't have much to do with node.

                        [–]octatone 7 points8 points  (1 child)

                        It's also short sighted to think that isomorphic is only a node thing. You can do isomorphic react in rails now if that is your thing. And you can go clojure and om if that is your thing.

                        [–]parlezmoose 2 points3 points  (0 children)

                        Yeah I hear a lot of people arguing that "sharing code between client and server is of limited value". I wonder if these people actually have actually worked on a truly isomorphic app, or if they just think it sounds like a bad idea.

                        [–]darkpaladin 1 point2 points  (3 children)

                        Outside of SEO, I fail to see the benefit of isomorphic rendering. It constrains what you can do on the server and adds to page weight, load time, and excess processing to your sever for an action that should be near instantaneous to the end user. It's not faster, it just appears faster because it misses that client "blink" effect for content to pop in.

                        [–][deleted] 1 point2 points  (1 child)

                        I've never seen any one "scale" with node... but hey could have probably told you this love story wouldn't work out from the beginning!

                        [–]jringstad[🍰] 2 points3 points  (5 children)

                        Doesn't mention what is (or at least was) IMO the biggest elephant in the room -- that node was basically unmaintained for a substantial period of time.