I want to do useful work and get paid, without having to report it for taxation, confiscation, and regulation.

node.js Is VB6 – Does node.js Suck?

I went on another job interview. This was another startup. Surprisingly, they were less clueless than the others.

One co-founder had a Harvard MBA, which translates into English as “I’m a retard.” However, he was intelligent and had the “abused productive” personality type. Actually, that’s a bad sign. If the non-technical cofounders have the “abused productive” personality type, then they almost definitely hired parasites and psychopaths to implement the website for them.

They had a short domain name, a common English word. That shows what big amateurs they are. They probably paid a ton of money for that domain. Every dollar you spend on a domain name is a dollar you don’t spend building your website. It’s much more important to have a good website than a good domain name. You should never pay more than the minimum registration fee for a new domain. However, clueless VCs will disagree, and their opinion is the one that counts, when it comes to raising capital for startups.

They said “We’re building our website in node.js.”

I briefly researched node.js. I was not impressed. Some of the stuff I write here may be wrong, but it was my first impression.

Node.js is an extension of Javascript, enabling Javascript to be used server-side.

Javascript is incredibly ugly. Why would anyone extend it to a full server-side language?

Node.js is single-threaded only. You use non-blocking calls and callback functions. In these days of multicore servers, why would anyone design a language to be only single-threaded? Plus, it’s a PITA to manage all those callback functions and debug.

With Apache, a new thread/process is spawned for each request. The PHP code then runs in that thread. The database calls are blocking calls; the thread sleeps until the call returns. If one thread is waiting for the database, that thread cedes the CPU via UNIX multitasking, and the other threads work.

However, unless your website is super-popular, it doesn’t make a difference. I doubt I’ll ever get enough traffic to push the limits of my Linode, even without any WordPress caching extensions.

With node.js, it’s only one thread. Instead of spawning a new thread, you have non-blocking database calls. Then, there’s a callback function when the database call returns. Internally, node.js processes all the callbacks, in order.

Node.js does have a lot of built-in libraries. If you want a basic node.js http server, you just include the http library, listen, and handle the request.

If you want to set up Apache/LAMP, that’s a full day of work. If you write an http server in C++, that’s a lot of code. With node.js’ libraries, you can get a basic http server running quickly.

Do you see the fallacy?

Yes, it’s nice that node.js gets a basic http server running quickly, via nice libraries. However, you still have to write the code for your application.

Clueless people get obsessed with languages and frameworks. No matter what language and framework you use, you have to write your application code. If you use a fancy framework, then you have to write framework-compliant code in addition to your program’s code. With node.js, you’re fiddling around with callback functions and manually managing timing, instead of letting Apache and the OS do it for you.

I wonder if a clueless person prefers to install and run node.js, rather than set up a full LAMP installation? It’s a lot more work to properly install and configure LAMP, than to install node.js and run that.

I suspect that the founders hired a parasite/psychopath to build their product. He’s focusing on hype instead of content, and picked the latest trend, node.js. However, unless I meet their CTO, I don’t know if he’s sane or a psychopath. Given that the non-technical co-founders were intelligent, I’m pretty sure they hired a psychopath.

The “beauty” of node.js is that it only spawns one thread that does everything. However, what if your website is super-popular? What happens once one thread isn’t enough? Then you have to add code to juggle requests between threads and servers. Now, all the advantages of node.js are flushed down the toilet, once one thread can’t handle everything. With Apache, I can upgrade from a 4-core server to an 8-core server and get double the power. You can’t do that with node.js, unless you write code to handle it, which defeats the benefit of using node.js in the first place. Yes, I can write my own thread pooling algorithm, but why not use Apache, which was already super-tuned by others? If I’m balancing my load among several servers, I can directly configure Apache to do that for me. With node.js, wouldn’t I have to manually add all the code for that? (There are some libraries planned but not finished, to address some of my concerns. However, they probably will eliminate any advantages of node.js in the first place.)

Node.js seems like exactly the opposite of the language I’d write. In these days of multi-cores, you need a language that handles multiple cores/threads/processes well. Node.js will only use one core, no matter what you do, unless you spawn multiple node.js instances.

I’m not ready to go all-out and say “node.js sucks”. The slogan for node.js is “It’s like Ruby on Rails, but it doesn’t suck like Ruby on Rails.” Is it true? Is it hype? Until I spend a lot of time working in node.js, I won’t be sure. However, based on what I read, I’m not sufficiently impressed with node.js to make me learn it on my own for my personal website. I’m sticking with LAMP, for personal projects, for now. I’ll only learn node.js if they wind up hiring me.

There was another amusing moment from the interview. There’s always a parasite/psychopath on the interview team. That’s a universal rule of The Matrix. This parasite was their “technical advisor, an idea guy”, i.e. someone who spouts buzzwords but can’t actually implement anything. This guy was a parasite, a psychopath-in-training. He’ll be a full-on psychopath once he gets another 10 years of experience manipulating people. He was sufficiently inexperienced that he didn’t notice that I was a potential threat to his gravy train. I’m sure I gave him some tips on improving his lying skills. If you’re the “idea guy”, it’s never your fault when the project ends in disaster, but you get credit for any success.

Amusingly, the “idea guy” had a CS PhD from MIT. I guess that proves one point. Even if you have a degree from a top school, that doesn’t mean you can actually write working code. However, this psychopath would never risk taking a job where he’d actually have to write code. He’ll always take a job as “idea guy” or “architect”, without having to actually code or do real work.

He compared node.js to Rails. I said that I was involved in a Rails disaster. (It definitely was a disaster. They did fire me for “not being a team player”, because I pointed out the disaster-in-progress, but went bankrupt anyway.) He said “WTF? Rails projects never end in disaster! You’re kidding me!” I didn’t mention that I wrote the #1 search result in Google for “Ruby on Rails Sucks!”

His reasoning was “A lot of VC money is spent on Rails. Therefore, Rails must be awesome.” When it’s a hype-based economy and not a value-based economy, a lot of capital can be squandered on stupid things. If you throw enough capital at a project, you might get it to work, even if you use Rails. Also, the psychopaths give each other positive feedback, when they all decide to use Rails.

That’s parasite logic. If you evaluate solely by hype, Rails is awesome. If you evaluate by content, Rails sucks. I’m so confident in my analysis “Rails sucks!”, that I can nearly conclusively say that you’re a parasite or psychopath, if you like Rails. It was amusing to look at the comments on my “Rails sucks!” post. Half strongly agreed with me and half strongly disagreed with me. That’s the divide of productive versus parasitic personality type.

I don’t know if node.js is awesome or a POS, because I haven’t used it yet. However, they were working on their website for 3+ months and had no working alpha yet. That sounds like a disaster-in-progress to me. If they hired a skilled psychopath, he’ll be able to keep making excuses until they’ve burned through their seed funding. They promised to show me their alpha during the interview, but they didn’t, probably because it isn’t ready yet.

I’m 99%+ sure that the “idea guy” advised against hiring me, but that the other two “abused productive” cofounders were interested. Those cofounders probably aren’t aware that their “idea guy” is faking it, so I’m SOL. They’d probably be completely insulted by the idea that he was conning them.

The “idea guy” will build a great reputation for himself. People will think “We’re lucky to have him!”, when he’s really an unqualified twit. That is the power of psychopaths. If everyone else is saying “X is a super-genius!”, then you’ll doubt yourself when you think that maybe X isn’t so smart. In the hands of a psychopath, an MIT PhD is very powerful. Most people would assume that MIT’s faculty is smart enough to not hand out PhDs to psychopaths, and would automatically assume that the psychopath is a super-genius. (I wonder if the top schools and their faculty are completely controlled by psychopaths? In that case, a psychopath will fit in perfectly, while competent people get frustrated and quit.)

I always evaluate someone independently, and have enough experience to know that credentials are meaningless. I have enough experience now to trust my own judgment, no matter what a piece of paper says. That’s also why, as an employer, I’d never use a screening test. I’d need to evaluate the personality type of the candidate, and you can only do that by seeing them or with a phone screen.

If the psychopath senses that you can see through him and are starting to question him, then he’ll fire you or make sure you don’t get hired in the first place. Therefore, there must be a parasite or psychopath on every hiring committee. That’s one of the rules of The Matrix. Unfortunately, that makes it hard for someone unplugged like me to find a job.

That’s one of the main reasons the system is falling apart. Almost everyone lacks the ability to tell the difference between a really skilled worker, and a really good faker. The psychopaths have set up the legal system and political system and financial system to be *EXTREMELY* psychopath-friendly. Most intelligent people are pro-State brainwashed to be susceptible to psychopath manipulation. However, by maximizing their theft, the psychopaths are causing the whole system to fall apart. You can’t make a psychopath understand “You shouldn’t steal so much. The whole system will collapse if this keeps up.” Even worse, by having nearly perfect psychopath control, it becomes very hard for intelligent people to find a job. “Grow your way out of a recession!” is impossible if psychopaths control everything.

Is node.js the next great thing? Is it another hype bubble like Rails? I’m leaning towards “hype bubble”, but I’m not making a full-on commitment to that statement, because I haven’t tried node.js yet.

In the days of multicore servers, it seems stupid to design a language that uses one core max. I’d be much more impressed with a language that promoted efficient easy use of multiple cores. That’s the biggest lacking feature of modern programming languages, support for multiple cores and multiple threads. For that reason, node.js seems like a bad idea. It’s the exact opposite of what I want, easy muticore support. With non-blocking I/O and callback functions, node.js shares all the worst features of VB6.

Thisbit was funny. According to that document, it’s illegal to say anything negative about node.js, because that’s misusing the node.js trademark! It’s like they knew they were designing a turd, when they said that you’re not allowed to say anything negative about node.js. Only an evil person would say “You’re not allowed to publicly say anything negative about my project, or I’ll sue you.” (However, they later say that certain types of criticism are allowed. Self-contradictory legal documents are amusing.)

I have been in programming for 25+ years and every year there is the new wonder language. There must be 1,000′s by now, C/C++,Fortran, Pascal, Cobol, C#, Python, PERL, Ruby, F#, Haxe, on and on and on…… What I think the thing to do is, everyone create your own language. All these languages are just wrappers for C/C++ libraries and given a marketing name anyway.
I would suggest MotherF#$%ingC. Then when you go into the interview you can say, “I’m the world’s #1 expert in MotherF#$%ingC.” They will ask what is MotherF#$%ingC? You reply a new social networking langauge targeted for the urban environment. What is some of the syntax and semantics of MotherF#$%ingC?
Glad, you asked for example you don’t have a Home page you have a Crib page. You don’t have functions like String.length, You use MyBitch.String.howmuchyouholding outoome(). They will be so impressed especially the Harvard MBA’s you can I promise name your own price!

====

Requested edit:

have been in programming for 25+ years and every year there is the new wonder language. There must be 1,000′s by now, C/C++,Fortran, Pascal, Cobol, C#, Python, PERL, Ruby, F#, on and on and on…… What I think the thing to do is, everyone create your own language. All these languages are just wrappers for others C/C++ libraries and given a marketing name anyway.
I would suggest MotherF#$%ingC. Then when you go into the interview you can say, “I’m the world’s #1 expert in MotherF#$%ingC.” They will ask what is MotherF#$%ingC? You reply a new social networking langauge targeted for the urban environment. They will ask: What is some of the syntax and semantics of MotherF#$%ingC?
Glad, you asked, for example, you don’t have a Home page you have a Crib page. You don’t have functions like MyString.length(). You use MyBitch.String.howmuchyouholdingoutonme(). They will be so impressed, especially the Harvard MBA’s, with your up to date abilities, you can, I promise, name your own price!

It becomes a self-selecting community. The people who focus on the hype and ignore the flaws will like node.js. It really is better than Ruby on Rails, but it’s still a POS.

Some people would say “Is this a good language/framework? It has some neat stuff but also has some flaws.” They get disgusted and move on to other things.

This page had an interesting observation. You can run ASP.NET in asynchronous mode like node.js, but that isn’t normally used. Asynchronous ASP.NET beats node.js, in terms of # of “Hello World!” pages per second.

I am 99% convinced that node.js is about hype rather than substance. Also, that startup did give me a rejection, which isn’t much of a loss since they’re probably doomed anyway.

I’ll stick with my PHP/LAMP for now. I am open to new things, but Rails and node.js are garbage.

Going back to your point “I don’t understand why the node.js community is a bunch of douchebags.”, you really need to understand productive/parasite/psychopath interpersonal dynamics. Once you understand that, you’ll understand why Rails and node.js can be so popular, even though they suck so much.

PHP is just like a lot of other languages , it’s a wrapper for C/C++. It’s only considered amateurish because of a lot of them use it. It’s a lot more mature and has a larger support base and more examples and documentation than Python or Ruby or any of the other fads

Haha, PHP morons always resort to auxiliary details like “support base” or nebulous, meaningless crap like being “more mature”. Maturity of a technology isn’t measured in time, it’s measured in *directed effort* over time.

In short, PHP is a bad joke and the only serious attention it deserves is when mocking and laughing at people who use it.

At least I don’t come across as many smug assholes in the PHP community.

It’s really hard to want to try it at all without being afraid I’ll wind up as arrogant and douchy as you.

There’s a lot of amateurs because it’s the language of choice for the vast majority of web developers, and subsequently wannabe developers. It’s like how Mac partially receives less viruses only because it is less common.

At the end of the day, it’s a personal choice, like Coke vs Pepsi. Stop trying to make it a fucking war.

Hold off on PHP being the bastard language for amateurs, I develop Flex applications. Last I heard Flash/Flex developers are the red headed stepchildren in the programming world. I also develop in nodejs (got hired at a company, they said “use this”) so I did. I like the scalability of it and it’s lightweight nature. I don’t know how it compares to VB6 cuz I started in the C/C++ world and then C#/MVC as far as MS development. As such I always thought of VB6 as the bastard language to be forgotten. I always chose C# over VB. But to each his own. It seems every company I work for wants to do something else. So I tend to go with the flow. I will say this, I once got hired for a PHP role(don’t know why), needless to say it did not work out.

Actually Flash is not dead. It just out grew the browser. That’s how the AIR runtime came to be. If you have a strong Flash or Flex background you don’t have to ditch your skillset to produce mobile apps for both Android and Apple. Also there are new tools such as edge that will translate Flash and actionscript to html and javascript.

One complaint I have with Flash/AIR is that the development license is big $$$, along with the vendor lock-in. That makes it bigger than my budget when I’m just doing a casual experiment.

I looked around, and there also are tools that compile Javascript to native mobile binaries. I don’t know if they’re any good.

One issue with Flash on mobile is that “mouse-hover” is a common operation in Flash (especially Flash games), but mosue-hover has no comparable operation on a mobile touchscreen. Existing Flash content would need to be re-written to work properly on mobile. That’s one reason Flash was banned on the iPhone, because existing Flash web apps wouldn’t work properly. However, I do like the way Puffin browser handles Flash. (I have it on my Android phone.)

1) There is no developer license for for Flex/Flash. The only one charging developers for licenses is Apple.
2) When developing mobile apps, you use touch events, NOT mouse events. Adobe and Apache have been good at developing mobile libraries.

1. I’m pretty sure that Adobe charges money for their Flash SDK. I researched this a couple years ago. The open-source Flash SDK isn’t as good.
2. The problem is OLD Flash content won’t work on mobile, unless it is re-written specifically to work on mobile.

More importantly, I’ve decided that HTML5/CSS/Javascript is worth learning more than Flash or native mobile apps. Of course, I could be wrong, like with my decision to invest in C/C++ instead of Java.

I’ve been (slowly) experimenting with HTML5/Javascript, but I don’t have much energy leftover after work.

I really like Ruby. Ruby is awesome. I’ve written tons of code in Ruby. But it’s all been for myself, to figure out an object model. The syntax is clear and minimal and the language has lots of great features. I first learned Ruby in 2001. When I want to write something serious I pick a real language like C++. That’s because all Ruby offers is a mercurial set of gems. (Yes, there is a tool to handle gems, but doesn’t that say something about the situation?)

In your other blog posting you mention how Rails sucks. Rails is very attractive. But it indeed sucks because it’s documented by idiots. Passing comments which are key to understanding aren’t explained. You’re running one version and all the web renders is results from 2007. irc#rubyonrails is full of onanistic douchées.

I thought about leaning Node.jiz. Thanks for the input, I don’t need another Rails experience.

wow. so everyone who doesn’t agree with your cock-eyed view of the world is obviously a parasite or a psychopath. you really need to take a step back and listen to the nonsense you are spouting. your article is so full of factual inaccuracies i don’t even know where to start. maybe you should put your LAMP stack aside for a few hours and take some time to actually do some research on scalable server design. node.js is far from perfect but it get’s a lot of things very right and has a lot of very smart people working on it. i really hope you don’t get the job because you will obviously just get fired again within a few months for not being a team player…

It also took me longer the first time, because I’d never done it before. It wound up being useful in my new job, where we were moving a bunch of pre-existing websites to a new server. That took longer than a day. That includes moving databases, verifying logins, QA, not disrupting production website, and more.

However if I were you, I would never have published it. Why you ask, because it proves that you are unable to find your behind with two hands. Now you might be right about the people across the table from you, but every bit of analysis you did is plain misinformed.

If you had any real idea, what you were doing, you would have done a more thorough assessment before spouting off. You would have had an in-depth look at the nodeJS source code. You would have then had deep hard think about the concepts involved. You would then have had a look at the nodeJS documentation. And after that you would have (presuming your intelligence is anywhere near what you claim) come to the realization that maybe you should rethink what you believe to know.

Now you might ask: “Why is he so confident in making these claims?” Well because I sam the CTO of a startup; we started out doing a prototype on a LAMP stack as a proof of concept. We have since been funded and have rewritten our site to be more easily able to expand. We did so by implementing all our back-end services in nodeJS and we did that in the time of 3 months, including redoing the front-end, and adding several verticals expanding our offering significantly.

Oh and yes, as a startup we are a small team and the CTO actually has to code. So I actually have a clear and present example of how things can turn out using nodeJS. Of course “disasters” can happen using nodeJS as well. Just like in Rails, Perl, PHP, or any other language/environment. In my time I have seen a bunch of disasters happening. One thing I noticed is that it never was really a problem of the language or the environment. Usually it was bad management, bad resource use, or a bad design.

If I were you, I wouldn’t take myself as the fount of all wisdom. I’d reevaluate my preconceptions and try to imagine a world where I was completely wrong. And once that is done, I’d try to get myself some actual experience and try to look at the bigger picture a bit. Maybe when you get another 10 years of experience under your belt, you’ll be able to find your behind with two hands; who knows, maybe you’ll even be able to find it with one.

I do have a job now. It’s with a company that isn’t going to be bankrupt in two years. I’m using ASP.NET and ASP and VB.NET. I’ve never used them before and I’m doing fine. (Actually, ASP.NET is very similar to PHP, except that the underlying language is VB instead of Perl-like PHP.)

I did look at the node.js documentation. It was unreadable garbage just like the Rails documentation. Why should I have to look at the node.js source code just to understand how to use it?

My article was probably discussed somewhere else. A bunch of people made negative comments at the same time.

If you’re writing small services in node.js, that might work. If you’re writing a complex application, it’s probably going to be a disaster. There’s no way my current employer’s application would work in node.js.

The node.js idiots still haven’t got a working website. They did say “It’ll be ready in a month”, and it still isn’t done. They updated their placeholder website from “Sign up and we’ll E-Mail you when we launch in late 2011.” to “Sign up and we’ll E-Mail you when we launch.”

The node.js idiots were all using Macs. The “Rails Advocate” from my old job had a Mac. I’m starting to be pretty convinced that if you’re a computer programmer and own a Mac, you’re probably clueless. That should be Apple’s slogan “A computer so easy to use, that even an evil person can use it.”

Yes, bad management is also a factor. Bad management is much more likely to chase the latest trend, rather than do things right. I’m convinced that node.js is the latest hot trend, hype over substance.

I saw one amusing code fragment. He had “self = this” in every function. You have to preserve the “this” variable for the callback, because “this” always refers to the current object. If you have “self = this” at the top of every function, that’s a sign that there’s something wrong with your language.

Callbacks are a disgusting way to code. It rapidly leads to a mess.

There was another amusing “feature” of node.js. If you have a bug in your code, then the entire server crashes! That was amusing and pathetic.

Philipp Dunkel sounds like a world-class douchebag. I hope I never work for scum like him again. Also, his website looks like a spam site. Just because you’re the CTO of a startup, doesn’t mean you actually know anything. There are plenty of VCs willing to waste money.

I’m still convinced that node.js and Rails are garbage. I’ll stick with VB/ASP or LAMP over node.js or Rails anytime. When evil people strongly disagree with me, I see that as evidence that I’m right.

I certainly can refuse all node.js and Rails jobs, and still find other jobs. It’s actually helpful. If a job ad says “Rails required” or “node.js required”, then I know they’re idiots and don’t waste my time.

And another thing: just because your company did not succeed in implementing something in Rails doesn’t mean Rails suck. It means that the team you worked with sucks. I know of many many Rails projects that were successful.

The main reason being that you’ll never be competent enough to become an employer. I’ve seen some of your blog posts and screencasts back when I was evaluating node.js. As if being a mediocre developer wasn’t enough, you now have to add “rabid node.js zealot/fanboy” to your list of credentials.

P.S. the team listings for the “Node Firm” are hilarious. It’s like a group photo of barely-literate, clueless hipsters all complete with ironic t-shirts and thick-frame glasses. It makes me feel sick just looking at it.

I thought your original article was cute, and that you only wrote the article without actually trying node.js because you thought it would be ironic. However, this particular comment of yours seems to say (to my meagre understanding) that confirms that you have a fairly superficial understanding of all this language stuff. ;P You judge people by their choice of machine form factor? Do you even know what’s in a Mac? Ever heard of the LLVM? Oh god.

What has LLVM got to do with Apple? They just threw some cash at it and wrote a flimsy compiler front-end after it had already proved it’s worth. LLVM is used by most Linux distributions too, for example in the Gallium3D shader compiler.

So I have to ask you a question. Do you judge technology by sound bites (LLVM!!1? oh god!) and mimicking the other clueless people (Mac users) around you?

Nope, you’re the one who is clueless here. You have proved that in 3 short sentences. When you’re a bit older and wiser you might learn to identify when people are projecting their inadequacies. It’s kind of a pathetic sight to behold.

Just because Rails is widely used, doesn’t mean it doesn’t suck. Microsoft OS is widely used, but it isn’t as nice as Linux. I stick with Windows on my desktop, because much software, especially games, doesn’t have a Linux port.

At one interview, they were using Rails. I should have refused the interview, but I figured I’d see. They had 50+ programmers, for a project where I thought 5-10 people should suffice. They probably had a product that mostly worked, but with huge expense and waste. That counts as a “successful Rails use”, but I saw a ton of waste.

I like node.js, but the author does have some valid points about some of the node.js pain points (albeit in an abrasive manner). Some of it is even kind of funny, especially if you’ve ever had to work with “difficult” people.

Well EACH NodeJS process is one threaded, but that doesn’t mean you should run just one thread! In production of NodeJS application, we usually use more than one process(usually one for each core). You can have a load balancer which redirects the requests to processes. By this way you can scale and use more than one server easily. Node also have native clustering support. Using one thread for the whole application is not a good idea, since if there’s any unhandled exception, that will kill the whole application. Beside the idea of using a load balancer, you can even use Hook.io which is a provides a fancy TCP, for different processes of your application to talk to each other. With hook.io you can have one process for each component, using multi-core advantage, you can even have an easier error management design. The only thing that I find NodeJS might not be good enough, is that it is not faster than C! Though thanks to V8, it executes JavaScript faster than PHP, python and ruby. You can even easily have your async modules written in C, that can expose the library API to JS.

My experience with a Rails disaster was very educational. If node.js is the Rails replacement, I definitely want to avoid it.

I probably have more experience than most of the people advocating for node.js. By programmer standards, I’m an old man now. In most of my job interviews, I was the oldest person there, and I’m not that old!

If you have to install a bunch of other packages and tools to get proper behavior out of node.js, that’s a symptom that you’re building on a flawed foundation.

You have not convinced me that node.js is not hype over substance.

Anyway, you’re free to work with node.js, and I’m free to work for people who have a clue. At this point, we’re just calling each other names and not really having a discussion.

I only looked into node.js because of that job interview. They still don’t have a working website, and I know I could have done it by myself in a month. It reminded me a lot of the Rails disaster. I briefly researched node.js, and concluded it was garbage like Rails. In fact, many of the people who loved Rails are following the hype and moving to node.js. I wrote a post summarizing my conclusions, hoping to warn some of my regular readers. Some of them appreciated it, and one said that he avoided wasting time on node.js based on my recommendation. My old post was cited on a node.js discussion group, and now some people there are upset. All of the comments they made about me were name-calling without addressing any of my points.

There is one point that is true. If you’re an evil hiring manager, it definitely would be a disaster to hire me. Fortunately, I found a job working for people who have a clue and seem to appreciate me.

I have a new job working with VB.NET and ASP.NET. Those will definitely still be around in 5 years, so that’s good experience. I have no reason to investigate node.js anymore. PHP/LAMP/WordPress is fine for this website.

Maybe I should E-Mail the CEO of the startup that was using node.js, and taunt him? He was pretty rude to me. He still doesn’t have a working website. I know I could have written it by myself in a month in LAMP.

I still say that “I have a Harvard MBA!” or “I’m developing my website with node.js!” translates into English as “I’m a retard!”

Well I agree with the former. As a PHP/LAMP guy for most of the early part of my career, who is now a rapid, relentless supporter of Node.js, I’d ask you to reconsider your stance. Happy to walk through direct benefits and the experience I’ve had running my realtime studio and using Node.js– I’m on skype @balderdashy.

Decent article and you make some good points — thanks for posting. I am weighing the pros and cons of Node myself and like to hear both sides of the story. But I must say you have a huge superiority complex. Harvard MBA retards? Parasites/Psychopaths? From this article *you* are the psychopath type that I’ve worked with that thinks everything they touch is gold, and who won’t work on anyone else’s code unless you get to refactor it so its in your own image. It’s no wonder you were/are job hunting

It’s February now (4 months later) and they still don’t have a working website. My analysis, “They were retards!”, was correct. I know that I could have done it by myself in a month with LAMP.

Of course, “Those specific people were retards!” does not prove “Everyone who uses node.js is a retard!” I gave plenty of other reasons. PHP/LAMP or ASP.NET are superior to node.js. If it were my website, it’d be 100% PHP/LAMP, as is this website. My current job is a Microsoft/.NET shop, which is also a reasonable choice.

My projects at my new job have a greater complexity than their simple website. I’ve done both maintenance on other people’s garbage, and complete rewrites. At my new job, I’m rewriting old VB6 in VB.NET, but I don’t have the freedom to fix the design flaws in their database, making it a combination of both garbage/maintenance and new code.

From the viewpoint of an evil person, someone honest and intelligent is evil. I have the opposite viewpoint, correctly identifying evil as evil. I totally understand that an evil person would say that I’m evil. At that point, all we can do is call each other names. I don’t expect to convince an evil person. The target audience for my blog is the “abused productive” person trying to understand, and not evil people.

Yes, it is that black-and-white. Some people are just plain evil. Don’t make excuses for them. It’s painfully obvious to me now that I’m mostly unplugged from The Matrix.

I can try to find a situation where I’m not working for evil and not supporting evil people. Given the nature of the State, that’s practically impossible.

I do have a new job. It’s pretty lame, although I am getting some .NET experience. I expect that I should move on in another year or two. Ideally, I should start my own business (on-the-books or agorist-style), but that isn’t easy.

I’d like to find a way for the intelligent “abused productive” people to organize and avoid the evil people. If they do that, they should be incredibly productive. That’s one of the benefits of agorism.

In the present, most intelligent-but-abused people struggle to get by. They are manipulated into thinking it’s their own fault, due to the evil people controlling them (directly and indirectly).

This website is bizarre. It’s not often I see so much hatred towards others. :sigh:

I have noticed that you quite often write ‘PHP/LAMP’ and would wish to let it be known that the ‘P’ in LAMP refers to PHP.
Or course, other technologies (Perl & Python) like to think they also have ‘usage’ for the ‘P’, but as your article clearly demonstrates: there are many who just follow fads and want to be included, most often for the wrong reasons.

Either write ‘LAMP’ or if you insist on writing redundant notation, use: ‘Linux/Apache/MySQL/PHP/LAMP’.

Nevertheless, your article was a good read, simply because it does burst the ‘I love node.js’ bubble. I would suggest using softer words in the future, however.

PS: It shouldn’t take more than a couple of hours to set up a secure/hardened LAMP server from scratch. This includes downloading the latest OS of choice. I am not particularly linux savvy and it really shouldn’t take you a whole day

I had never set up a full LAMP before, and I’d never been root before. I also had to look up all the proper security rules, such as disabling ssh for root and setting up an ssh tunnel for the mysql gui client.

If setting up Linux servers was my full-time job, I could do it quickly.

Don’t ask me why, but even when it smells like troll, I can’t resist chiming in. While the tone of your article doesn’t sound much like you’re looking for a discussion, I’d like to at least attempt to address some of your points. I’m not a core contributor to node, but I’ve contributed several patches and am pretty familiar with the code base and philosophies, so I’ll try to address these from a non-”clueless” perspective.

First off, one of your early points that is built upon later in your article is that “Node.js is an extension of JavaScript, enabling JavaScript to be used server side”. This is actually pretty far off from reality. The only language in use is plain ol’ JavaScript, and absolutely no language extensions are used. Node.js provides a container for JavaScript (running on V8) with a set of core libraries that emphasize system and protocol level support for things like file system access, HTTP, etc. Node.js is not a programming language, it does not extend any other languages, it does not have its own interpretor, the code is not compiled/transpiled or otherwise munged to run on the V8 runtime.

I was going to skip over the “JavaScript is incredibly ugly” remark, but coming from a guy who settled on a project using VB… not sure I can help you there.

You mentioned that Node.js is “singled-threaded only”. This is incredibly false. I believe what you meant to say is that JavaScript has a single-threaded execution model. Node.js, on the other hand, offers several facilities for running tasks across n-number of threads and processes, each with their own separate context. The only hard rule there is no shared memory.

You also mentioned that Node.js’ argument against the thread-per-request model (e.g., Apache and 90% of the other servers out there) is that spawning threads/processes is expensive. This is also not accurate – the cost that Node.js attempts to eliminate is the context switching between threads. In IO-bound applications, the amount of PCB/switchframe/stack/heap/etc activity related to context switching is very disproportional to the amount of work being done (unless, of course, you’ve found an alternative model such as is employed by Node.js, Tornado, et al.).

You also state that this isn’t important unless your website is super-popular. High RPS isn’t the only use case for Node.js. It’s also useful for running on low-grade commodity hardware, or provide a service with long-lived persistent connections, or for sharing feeds across multiple clients without mucking with multi-threaded access patterns, or providing complete control over the HTTP lifecycle for HTTP nerds like me, etc…

And let me get this straight, it takes you a DAY to get an Apache/LAMP stack working? Moving on…

If I skip over the remainder of your comments referring to Node.js as a language or insisting that Node.js only allows single-threaded execution, then there’s pretty slim pickings. You did have an amusing statement in your comments, however, saying that “ASP.NET is very similar to PHP”. Different topic, of course, but this is pretty bizarre statement. How bizarre, depends on whether you’re using ASP.NET MVC or ASP.NET WebForms. Regardless, I suppose that once you get rid of your component model, and data bindings, and view state, and the page life cycle, and state management, and code behind, and virtually anything else that distinguishes ASP.NET from plain ol’ ASP, then ya… kinda like PHP, if you’re a troll.

Just same as my guess, he wont comment to this. Long posts reply to the article has been giving him too much fuel to live on with his lack of being a good teammate. It’s okay for us, just work on your own .NET shopping website dude, and dont bother about scability of your apps, because you wont get anything big and meaningful in your coding life. Making some boilerplate code and you’ll get your boring life, which will produce some other nice articles like this.

“…because Rails is widely used, doesn’t mean it doesn’t suck. Microsoft OS is widely used, but it isn’t as nice as Linux. I stick with Windows on my desktop, because much software, especially games, doesn’t have a Linux port…”
Just face it, you’re using a sucked OS, and node.js wont work nicely with your OS, which probably proves that nodejs is only working with a nice Linux distribution. Dont even reply me that because of your .NET projects make you not a linux user, well, you chose it anyway.

I’m not a good nodejs user but I can see its potential. I wont be a .NET or LAMP die-hard fan like you. Open-minded to what you stated? You’re trolling so well then.

Hey man, you’re attacking something you don’t even understand. Node.JS wasn’t designed explicitly for building a web site. It takes Google V8, stirs in some C-extensions, and presto, you have a Swiss-army network utility. Sure, you can make web sites in it, and good ones, too, but you have to realize that wasn’t the explicit design idea. So it doesn’t come with a lot of that sugar in the box–you sprinkle it on there later.

The HTTP module can serve as either a web client or a web server. You could probably implement a web site around this module, but you probably wouldn’t want to. It would be tricky to figure out how to route requests effectively this way. If you are ever presented with a case of web sites being developed in Node.JS, I would encourage you to meet Connect and Express.

You can very effectively produce a small web site in Express, but do to the way you usually write Express MVC-controllers in a single file, I wouldn’t recommend using it for a very large-scale site. If you plan to do a large site with complex routing in Node.JS, try Locomotive.

I also recommend running the Node.JS web server on a port other than 80 and then using iptables to forward the request from port 80 to the actual Node.JS port. This eliminates much of the issue with trying to configure security policies to allow a user to listen on port 80.

One of the fun things about Node.JS is that in certain cases you can run the same scripts on both the server and the client. There is a DOM package that mimics the web browser behavior on the server so that entire scripts intended for a web browser can render a web page before it ever goes out over the wire.

ASP.NET can’t do that, sorry. In fact, much of the work involved in many of these “server-side” languages is that they have to always translate things back and forth. Web browsers run Javascript, so it is more natural to run Javascript on the server, too. Both the browser and Node.JS can use JSON with no effort at all.

I’m totally impressed with Node.JS, and I’ve recently become fanatical about it! I was never big on Rails, and PHP has always been a friend to me. I hate VB, and I’m no big fan of C, and I do like C#, and I love Node.JS! It’s such a handy thing to have. You can write tiny scripts on the fly, or write little scripts that do big things, and you can just combine things all day long and come up with wonderful mashups of code.

I encourage to mess around with it a little more. Get a feel for it before you go blasting it. There is a lot to be gained from using Node.JS. I have a feeling it isn’t going anywhere anytime soon.

By definition, nothing I write on my own blog is trolling. I would be trolling if I went to the node.js discussion groups and started calling them a bunch of losers.

Yes, it did take me a day to get LAMP set up. I’d never done it before. There were a lot of other little security things I set up. (Disable root via ssh, disable default mysql root account, disable default WP admin account, etc.) I still do some tweaking from time to time. If I was a full-time admin, I probably could do it much quicker.

Also, “You did not convince me I’m wrong.” is not the same as “I’m not openminded.” I did some brief research on node.js, and concluded that it was a POS hype-over-substance like Rails. I’m very good at telling the difference between people who know what they’re doing, and people who chase hype. At that interview, they were clueless and chasing hype. If they are typical of node.js users, then most of them are doing it wrong. It certainly is likely they were using node.js wrong.

I still say that node.js is unsuitable for anything more complicated than a small service. If all you’re writing is a simple service, you can use any language. And if performance is all you care about, it only takes a little longer to use C with non-blocking calls.

Even if node.js is lousy, it certainly is possible that it could be popular and widely used. If you have a lousy language and throw enough labor at it, you might even get something that sort of works.

I mentioned this counter-example already, and I’ll cite it again. That guy showed me his code. He had “self = this” at the top of every function, to preserve “this” for the callback. When I saw that, my reaction was “This is wrong.”

Wow, what can I say that wasn’t said so succinctly by others on this thread…

If you thought the node.js documentation was “unreadable garbabe” it means you didn’t understand it. Otherwise it would have just been “garbage” and you’d have more than just wantonly unfactual statements to use as criticisms.

Node.js != VB6, ASP.NET != VB, ASP.NET != PHP, and C is not slightly more time consuming than node.js. Statements like that are how programmers can tell the difference between people who know how to program and those who look at syntax.

The only thing you’ve managed to concretely point out is that you couldn’t write a complex application in node.js because you don’t understand it. Other people work on massively complex applications in node.js on a daily basis, including myself without any problems of complexity.

I saw one amusing code fragment. He had “self = this” in every function. You have to preserve the “this” variable for the callback, because “this” always refers to the current object. If you have “self = this” at the top of every function, that’s a sign that there’s something wrong with your language.

So, one guy’s less than stellar programming practice means JavaScript is wrong? First, “this” refers to the calling scope not the object. Second, “var self = this;” is only necessary if you need to maintain a reference to a parent scope from within a closure and JavaScript is not the only language that offers this construct. But this has nothing to do with node.js and everything to do with lexical scoping.

Callbacks are a disgusting way to code. It rapidly leads to a mess.

Have you ever written a web app? Worked with dom events? Used jQuery? they all require/use callbacks for a variety of tasks, and they’re all pretty succinct ways of doing event driven functionality. Maybe the lead to a mess when you write them…

There was another amusing “feature” of node.js. If you have a bug in your code, then the entire server crashes! That was amusing and pathetic.

Wow, the ignorance is making me light-headed. First there’s a global exception handler to prevent the server from crashing (look for uncaughtException in the docs, it clearly explains the purpose.) Second, only the process crashes, not the entire server, and only if you don’t use any of the existing utilities to restart the processes on error. And finally, your ASP.NET application will crash in the same spectacular way when it hits a runtime error, so how exactly is this a problem with node.js?

If you have to install a bunch of other packages and tools to get proper behavior out of node.js, that’s a symptom that you’re building on a flawed foundation.

node.js is a fully functioning stack of its own accord. No other libraries are necessary for proper behavior, only node.js. And anything you can say about node.js requires X for blah, can also be said about LAMP stacks.

Is this because you tried to write complex business logic in node.js and stumbled through it? I believe you said you lightly reviewed it one day before a job interview. Complex business logic is written on the client side in JavaScript for a number of applications that run on LAMP stacks like GMail. So what about node.js makes this impossible that is otherwise possible in a browser?

All of the comments they made about me were name-calling without addressing any of my points.

Just about every point you’ve made has been addressed as invalid here with supporting facts. If you really know that node.js is flawed, you should provide some examples, perhaps some code samples. At the very least some warranted statements.

Fortunately I won’t have to worry about hiring you because you’ll never apply to one of my job applications.

So sick of the “I’ll just do it with LAMP stack” or you “MUST” use the LAMP stack. Holy shit that lame piece of turd that is PHP keeps getting propped up as the best thing ever invented. Please open your brain to learning something new. Sick and fucking tired of the company founders who don’t know that LAMP is not the only way to build an application. BTW self = this is a very typical paradigm, to preserve the scope of ‘this’ inside a function. Want to find out more about javascript, just listen to Douglas Crockford on YouTube. PHP has sucked for a very long time. Go read the PHP documentation for some of the absolute worst examples of user contributed code examples to understand why. As to setting up LAMP being hard, when has this ever been hard? Setting up LAMP can be done in your sleep. The reasons NOT to use LAMP become more clear once you stop swimming in the PHP hole.

Exactly what I have been saying for a long time. One of my friends has become obsessed wit node.js and express. Agreed, node.js can be useful as a web socket server. but people are trashing Lampp stack completely for node and mongoDB.
I can understand including a few pieces of code to get a decent chat application, but trashing LAMPP Stack for node? Retarded!

Try doing anything that is even slightly memory extensive with node, and you’ll see how non blocking it actually is. Plus, the obvious drawback is: when something goes wrong, your only thread collapses and you’ve got a few days of down time right there, until you can get it back up. Even a simple memory outage can cause the whole thing to crumble like it never existed. In case of PHP, it will simply destroy the worker thread, and declare so.
Node, on the other hand will go down the minute somebody finds even a slightly innovative way to crash it.

And then the whole non blocking function calls, there’s a reason we accepted serial processing as a standard and that reason was: coherence.

Well in all fairness, LAMPP might have its flaws, but that doesn’t mean we have to keep inventing languages.

And node, really? I can crash a node server in a few minutes. It won’t just not work correctly, it will crash. When was the last time apache crashed when some programmer just forgot to do some validation? node, boom kaboom.
Now, node has its uses alright, but replacing LAMPP stack, really is not one of them.

Notice the two extreme reactions. The people who disagree with “node.js sucks” are very hostile. The people who agree with me seem reasonable.

If you are handling a lot of quick small requests, then node.js may be appropriate. However, you can do non-blocking http calls in C, C#, VB.NET, or ASP.NET.

If you have complicated business logic, using node.js seems wrong.

I’m definitely willing to learn new languages. In the past few years, I’ve learned PHP and VB.NET and ASP.NET After a few hours of research, I concluded that node.js is hype-over-substance just like Rails. Node.js gives off the same “vibe” as Rails.

“FSK doesn’t like node.js. That proves he’s an awful programmer.” sounds a lot like “FSK doesn’t like Rails. That proves he’s an awful programmer.” I know that I’m competent.

That was interesting. “You can share the same code on client and server!” makes little sense, because the client and server are doing different things.

However, that guy did give an overall favorable review of node.js. I didn’t like node.js, but I only did brief research. Node.js seems best for many quick tasks, but you can do non-blocking socket calls in other languages.

There was another interesting bit in the comments on that thread. It was about nosql. Unless you have *HEAVY* data load, there’s not much benefit to nosql. With nosql, you lose transactions and all the other nice things your rdbms does for you.

1.) Unified language stack > TOBS (Tower of Babel Stack)
2.) I’ve seen PHP code so horrible, each Apache spawn would take up 512MB on production. The language attracts fuck-ups the same way cocaine attracts hookers.
3.) Ngnix is single thread and it can hold its own against Apache very well.
4.) Redis is single thread(ish) and, when properly setup, can give AMQP a run for its money.

Can anyone point me into the direction where a LAMP stack can push notifications down to a client? No? No one? Still need those cornball AJAX keep-alives? *chuckle*

I am currently looking up node.js vs Apache like servers. However, I am specifically looking for a situation where real-time push notifications are possible (and efficient).

Therefore, currently I am neutral between node.js and Apache. That being said, despite what you say, node.js users seem more reasonable and friendly that the node.js haters.

Yes this particular comment you replied to is a bit aggressive, but no more than some of your comments.

Furthermore, I have trouble reading any of your comments that aren’t covered in insults. You either insult the previous poster (without actually countering ANY of the points they post) or node.js without arguing why (other than the original post).

From JUST your attitude alone, I am currently leaning towards node.js. But remember, I am focusing on the need for real-time push notifications. And you don’t really want to hold open threads on Apache, it’s not designed for that.

Your comment shows lots of ignorance. You normally don’t use *JUST* Apache to write a web service. You use Apache+C or Apache+PHP or Apache+Perl or Apache+Java (or others). (I did find something called axis and an Apache scripting language, which also sort of counts as another language. That wouldn’t be a good idea for something complicated.)

Dont even prove that by expose user emails although how bad or anonymous it is. I think you’re old enough not to do such a childish reaction. If you have a feeling you are against the world and overwhelming, please do close the comment option, hope that you have used it before.

Based on your comments, you are barely able to write coherent English. If you and the other commenters are typical of node.js users, I’m better off staying away.

I can tell, by the IP address, when the same person posts a bunch of comments under different IDs. That is childish.

I am not obligated to reply to every comment. My policy is to publish all comments except for spam. You should see from the large volume of hatred on this post, that I’m open to publishing comments posted by people who disagree with me, no matter how stupid or evil they are.

Also, this blog is on a Linode, so I do have basic UNIX/Linux competence. I use Windows on my desktop because many games only have a Windows version.

I don’t require E-Mails for comments. You can leave the E-Mail blank or make a gibberish E-Mail. It only does a regexp match if you do fill in the E-Mail address. I’m not running a mailserver. Also, you are under no obligation to post a comment or read my blog.

By definition, nothing I write on my own blog is trolling. Having analyzed all three, LAMP is better than ASP.NET and ASP.NET is better than node.js. I am open to other possibilities than LAMP, but node.js is a POS.

What you said about node.js it’s very interesting. I’m currently learning node.js just because I love javascript. I started with it a couple of weeks ago and I can extract some conclusions.

It’s still a VERY VERY immature environment. It’s true that you can find modules for every thing you can imagine, but there’s no definitive framework to build a serious website. Too many libraries/plugins/modules it’s definitely good but you can easily feel lost because you don’t know which module is the best and the most important, where to find it. The only public module list it’s a wiki page on github; are you kidding me? can’t you publish a decent official repository? (i’m not talking about npm, this is just a download manager). In this sense, node.js has a lot to do. They write a wrapper for the V8 engine with a basic functionality to communicate with the OS layer, and they’re done. NO!

A single-threaded language in the age of multi-core CPUs it’s more a drawback than an improvement. It’s impossibbbbrrruuuuuu to scale well. According to node.js we should stop buying multi-core CPU and continue with the ultra hot single-core CPUs? What a great idea. I’m going to throw away my i5-2500K, just a second… ok, I’m done.
The only benefit I can see to it is to be able to install it as a personal webpage (:D) to show to your buddies and say: “Hey look at my page. It rocks because is written in javascript. It’s cooler than your shitty awkward PHP.”. It can also be used as a replacement for Windows CLI. Thats good.

It’s my first experience with a hyped language. yay!

For me, the only possitive thing that node.js has is the JavaScript language. If it had been written with another language, it’s probable that now after 2 years it would be dead.

Anyway, I’ll continue reinventing the wheel writting the tenth version of the same module. Just for fun and for learning new technologies.

What you said is right, we should focus on using real multi-core power instead of trying to reinvent what already exists. It’s like in few years everybody will know how to write code in a cool-buzzed-facebook-money interepreted language but nobody will know anymore how to write code in C/C++. I exaggerate a little but not that much actually

Node.js puts the emphasis on evented IO. This can optimize the processor usage by preventing threads from waiting around for IO operations to complete. The actual javascript code (or coffee-script, etc.) is executed on a single thread, but that is unlikely to be a bottleneck. Even if it is, the bottleneck, you can spawn more instances.

Just like you, I used to hate JavaScript before, because JaveScript is very slow, and also a lot of JavaScript developers always wrote nasty code, they never know how to manage system resources and computer how to work. With flexibility of JavaScript language, many developers do programming job that’s just like a baby do.

But I really love JavaScript now, since I researched the V8 JavaScript Engine and Node.js. Google got a good job on JavaScript engine and JIT integration, to improve JavaScript performance. Not only V8 become faster, Node.js also has a pretty good mechanism of module, easy to write C/C++ Add-on to extend any functionalities for Node.js application.

So if you are familiar with C/C++, Node.js is the best language for you.

In my opinion, Node.js can do ANYTHING well right now. We can add new APIs with C/C++ to do that JavaScript cannot do, such as multi-threads and system programming.

For web purpose, node.js has different design to process requests. In fact, Non-blocking model was proved that good performance for web service, even better than Thread solution, handling thousands of request is not difficult for Node.js. In order to use multi-processor or multi-core, Node.js has already support API to do fork to spawn more instances.

OK, for the record, here are a couple of things missing from this, coming from a 30 yr-exp hands-on architect who has seen the entire evolution :

* The comment about arrogant self-absorbed hipsters was spot on. I shortened my resume as a quick test, and had twice the recruiters calling me from Mountain View.

Here’s the technicals reason Javascript is a bad server-side language:
* Weakly-typed (errors caused by lack of typing)
* Late-bound (runtime errors instead of compile-time)
* Exception handling is not typed.
* Lexicon is not completely defined — just try to change the order of chained event handlers.
* Exceptions in the parser and JITter and VM — how they’re handled is suspect.
* Callbacks in JavaScript pollute the global namespace.
* JavaScript is nearly OO, but not quite. There are more limitations, especially with collections of objects. There are no true virtual method, just pseudo workarounds.
* More abstraction layers that nullify the advantage from the event model.
* Memory usage is horrible. It’s for business apps only. DOMs have always been memory hogs. That’s just another restriction to add to the list.

So, in short, the model is good, the language is horrible. From an HR perspective, when I interview people, I’m lucky to find people that even know JavaScript. That’s the cepstral source of the problem — cheap labor from outsourced development that passes for acceptable. From experience, you should always treat as suspect non-american cultures where the mama dictates to the child what to study.

Node.js has a good use on phones for development. Phonegap is excellent.

I’m glad node.js is out there as a choice, it works in some specific situations. I’m hoping the Mono project gets us to a JavaScript.net implementation of node.js someday. That would be much more palatable.

I can’t see a single thing to suggest that the author actually TRIED Node.js. Regardless of the outcome, your method is to paste theory onto theory. You are “Thinking about” something which is easily testable. There is a reason they don’t give degrees in “Computer Philosophy”.

While it does seem like you might’ve dealt with some idiots in the situation you described in your article, I don’t think your conclusion about node.js is very fair.

When I write web applications I usually use PHP. I have a lot of experience with PHP so I can write decent scripts quickly and easily. I’m sure there are valid criticisms of PHP, but many of them (there are too many function aliases! it’s sloppy! etc) are irrelevant to somebody who knows the language.

I recently started working at a new job with a team that’s making use of node.js for some of their web applications. Since I barely even knew what it was before I started, I’ve spent the last few days researching and learning to use node. I was, like you, skeptical of node at first, but closer inspection and further acquaintance has shown that it is actually a nifty piece of software.

For people used to developing in PHP, node might take some time getting used to. It’s been a little frustrating at times. But contrary to what you might’ve said, node is actually very powerful. It has very high performance, rivaled mainly by C/C++ and Java (yes, Java isn’t the slow piece of shit it used to be nowadays). In fact, the company I work for uses it precisely for this reason and also because it allows for rapid development. Better yet, you can actually incorporate C or C++ code into your node scripts, which opens the door to capabilities that might not be attainable using javascript solely. As for your comparison of node to VB6, I can tell you that node is cleaner and more sophisticated than VB6 was. A shitty amateur who could poorly write node-based scripts that work could also write shitty PHP or ASP scripts.

I can only encourage you to avoid assumptions and sweeping generalities. While it is true that staunch proponents of certain technologies can often be ignorant nutjobs, the fact that there are node evangelists doesn’t mean that node itself is bad. Try node out for yourself, should you desire, and rid yourself of these preconceived notions, lest you stoop to the level of the uninformed “psychopaths” you so enthusiastically denounce.

Those specific people were doing it wrong. They described their product to me, and I know I could have built it by myself in a month. It took them more than 4 months, and their website isn’t that great.

I was involved in a Rails disaster. They weren’t using Rails correctly, and Rails was unsuitable for that project, and Rails itself is a POS. I researched node.js, and it reminded me a lot of Rails. There was a lot of hype, but not so much in terms of useful documentation. For example, the php.net website is much easier to use and search, compared to anything I found for Rails or node.js.

As a practical matter, I can refuse all Rails and node.js interviews, and there still will be plenty of other jobs. I briefly researched node.js, and concluded I didn’t like it. Some of the comments here are really hostile, which is interesting. I just wrote a summary of that interview and my conclusions after briefly researching node.js.

Some people are evil. An evil person would say that I’m evil. I’m confident that I’m mostly in tune with the truth now. That’s why Rails and node.js are popular even though they suck. They are attractive to evil people, who evaluate based on hype and not technical merit. That’s also why people are so hostile. If you’re running a scam, you’re very hostile to people who question your scam.

I never comment on blogs, this is a first. I cannot believe that you find ASP.NET / MVC enjoyable and quality at best as well! What documentation do you need for node, if you look at the API or *gasp* read a book and have a firm knowledge of real Javascript not using jQuery to do animations than perhaps you would see the strengths. A lot of us work on sites that get over 100,000k concurrent hits, hence the reason we do not use PHP / MySql … Rails is great for what it was meant to do, who cares what the community acts like? Balmer was just appointed as the worst CEO by forbes, what does that say about MS? Should all .NET developers stop using C# because he threw a chair at a Java guy? Your arguments make literally no business sense in any regard. Some of the highest trafficed sites on the web are using Rails, and chug along just fine. And when the time comes to scale, some go with Scala / Clojure / C on the backend, just like your beloved .NET (which other than MS sites, the only ASP.NET site I have even heard of these days still is Match.com that is high in traffic). I think you need to understand long-polling a little better to know that you do not need 100k + concurrents to have that many active sockets, imagine if you have 20k users per every 10 minutes, but they keep an active tab open, are on a mobile device, etc… What do you think is pushing those updates to the user? It sure as hell isn’t PHP with Ajax calls, its a custom library (or Backbone / Ember) bound to an event that is listening to a callback from some kind of ASYNC programming methodology … Node / EventMachine / Twisted … Go do some research before you spew shit.

You are a really bad programmer if it takes you an entire DAY to get LAMP up and running. You’re being enormously sarcastic, right? As I was reading the first part of this rant, I was saying to myself, “I wonder if this guy thinks PHP is awesome”. Then you mentioned PHP. That speaks *volumes* about your know-how at the keyboard. Plus also, PHP has a 3500-word namespace. Smaller and more agile is way moar bettar. Do you understand what it means to write code for someone? It means getting their shit to work so that everything involved is as happy as it can be, from the developer and the co-founders to the language and the framework and at the apex of this pyramid, the person paying for the code. Was it really that Node.js is substandard as a framework? Or is it — my money is on this one — that Node.js doesn’t fit YOUR coding preference and style? I’d bet you simply aren’t comfortable thinking in Node’s “callbacks”. Considering you’re still carrying LAMP around on a devan, I’d also bet anonymous functions are too difficult for you, so you don’t take them seriously.

Why are people obsessing about “It took me a day to set up LAMP+WP for this website.”? I had never done a full LAMP install before. I was careful to make sure I set up the security properly. (disable root via ssh, disable mysql root remote login, etc.) I’m also including all the time I spent configuring WordPress.

My opinion is that Node is so new that it’s really too early to determine if it’s valuable, a positive addition to web development or a negative one. The thing about emerging technologies is that everyone’s a hater these days. The value of having experimental projects is that they produce interesting solutions to problems. For anyone to say “LAMP is all you need, it does everything” is a false reaction to these emerging technologies.

What we should do is encourage people to use and understand the technology for what it is. It’s new, it’s somewhat untested, if you’re going to use it you have to understand and accept the risk. There is no silver bullet framework, framework, platform. Every app is different and every need is different. I’m personally a nodejs supporter because I like some of the theories behind it. I see the need in it but I also see the downsides.

Both sides of the fence need to pipe down and let node grow to its full potential. If it’s a powerful platform it will find a niche if not it will naturally die. I have a very Darwinian approach to development. Those haters on HackerNews and elsewhere should calm the F down and let nature run its course. Everyone’s a critic these days but no ones in the trenches actually using this stuff and extracting the lessons learned!

Haven’t you heard? Hard work is obsolete. I can file a human rights complaint for being asked to do too much work or fire my professor for making me learn new programming languages. The stench of Herbert’s Butlerian Jihad fills my nostrils. We rely more and more on computers to do all the thinking so that our brains can atrophy and shrink, I have no idea why this is considered a good thing.

In this context it works like this: programmer works less, designs less, plans less, leaves more processing up to the computers. This translates as more work for the end-user’s computer to do. So due to programmer incompetence or down-right sloth, the end-user has to wait longer for a web-page to load.

Our role as developers is to shield end-users from pain and time-sink. So we go the extra mile and setup a proper LAMP stack–a one-time capital cost, we’re not talking variable cost here–so that the end-user throws money at us.

Node.js could be sensible if it wasn’t a CPS-based approach and if JavaScript was a modular language, not just a scripting tool intended for making animated rainbows appear on your 1997 web-page’s scrolling marquee. The language is in dire need of a make-over, but personally I think RubyScript or PythonScript would render JavaScript a faint memory of the old Internet.

You know what..the job wasn’t meant to be. There’s always a better job out there. My suggestion – start your own business in the meantime. I think the best thing to do is to work for yourself. you have skills – start to get clients and then eventually you won’t need to work for someone else. I know it’s stressful, but in the long run i think you will be better off. you can do it!

I came here following a google search on node.js … and stayed for the crazy

Awesome blogging work, every word of which resonantes 100% with this reader. A perfect description of the current state of affairs. I love the way you have managed to tie together banksters, cycling cheats, gold bugging, psychotic employment practices .. and coding conventions all into a single unified field theory of everything that is broken.

Great stuff!! Looking forward to reading future posts regularly. Ill order the book if you ever get it published too .. dont hold back.

On the subject of node .. its just another tool, and it does have its place. Its a good fit for some problem domains. Its not a good fit for builing big, stateless, monolithic things – thats where LAMP excels. Its a good fit for small, responsive things that hold a lot of state information and communicate with each other with low overhead. Recommend that you have another look, perhaps with a different problem set in mind that is a better fit for the tools. It starts to make more sense when you are working with other tools like SocketStream, Redis, NPM, etc, etc, etc.

If LAMP or ASP.NET was a Mack truck that hauls websites, Node and friends is a bucket of generic lego blocks that can also build some web apps .. or a robot … or a light saber. Apples and oranges. Its not entirely a tool for building big web apps.

On the subject of tools in general .. I always like to keep in mind that a computer is a computer, machine code and IO is real … everything else is an artificial construct. There is really no such thing as an object, a file, a registry entry, a Word document, a DLL, a thread, a domain, a socket, a process, etc.

If confronted by a fanboi of any of these artificial constructs, simply crack open a computer case and ask them to point out where these ‘things’ physically exist. They dont, of course. They only exist in people’s heads.

Computer languages are just another layer of abstraction, and best used with that in mind. As long as you keep your head out of the hype, you can use any number of tools to get real work done. At the end of the day, machine code has to execute, and something gets output on the IO bus. Everything in between those events is an abstraction. Some abstractions are more appropriate to the problem domain than others, but it all comes down to machine code and IO in the end.

Node falls into this category, along with every other tool out there. Use it, enjoy it, go make some real things happen.

Jobs – I notice that a lot of job adverts these days dont even ask for qualifications – they want to see your github repo instead. That makes a tonne more sense to me.

The current layer of crap in the job market is a reflection of the evolution of tools and abstractions. We used to have C64′s, AppleIIs, AtariSTs and Amigas that people cut their teeth on .. and these people gave us the PC, Linux, the Internet, Mars missions and everything that works. Now we have commerce graduates with a cert IV in MS-Office designing systems with no idea how they fit together.

Its fertile ground for idiots to thrive in.

It should be compuslory for every child to spend 10,000 hours writing apps on arduinos, or rasberry Pi’s before being allowed anywhere near a computer system, let alone make decisions about system design.

According to piwik, most of the “node.js sucks!” traffic is bounces. I didn’t know that any of them stuck around. I need to write some custom SQL that queries the piwik database.

I still don’t see how node.js outperforms PHP or C/C++. In node.js, you’re doing stuff that the OS normally handles for you.

If I was writing a serious web application, version 1.0 would be in PHP. If that wasn’t fast enough, I’d go to C/C++.

I want a language that lets me utilize multiple cores effectively.

It may seem awesome to do work normally handled by the OS. It’s a waste of time. I’m not going to manage thread priority better than a highly tuned OS.

If you want to maximize the number of “Hello world!” operations per second, that’s one thing. It’s another thing to write something with complicated business logic.

At the interview that motivated this post, they had a website with static content and a few forms. In that context, using node.js is wrong.

If I see a job ad that mentions Rails or node.js, I mentally translate to “We’re a bunch of fruitcakes. Don’t waste your time applying.”

I don’t have a github profile. Why should that be a requirement? When I see a doctor, I always ask how much surgery he performs for free in his spare time. I don’t mention my blog on my resume, because clueless people would reject me based on my observations.

In my current job search, most job ads have a laundry list of languages listed as requirements. For example, “5 years Java” or “5 years PHP” or “5 years .NET”. I don’t get past the keyword screening phase, because most of my experience is in C/C++, which nobody uses anymore. If a job ad says “0-2 years Java required”, then I get rejected because I’m “overqualified”.

Node.js hype and banksters stealing trillions of dollars are two closely related ideas. Watch “American Greed” on the Communism Channel (CNBC), and watch the personality type of the people running Ponzi scams. The people who love Rails and node.js have the same personality type. I avoid working for scum. Therefore, I don’t mind avoiding node.js and Rails jobs.

My favorite is when an interview prescreen demands you solve a puzzle or programming assignment. Most of the time, I do the assignment, I know I aced it, and I don’t even get an interview. I should refuse out of principle, but I’ve got nothing better to do, and maybe there really are a lot of unqualified losers out there.

Another favorite is the multiple-choice prescreening test with errors. I know that C++ doesn’t have closures, but this multiple choice question assumes that C++ does, and “WTF? C++ doesn’t have closures!” isn’t one of the choices. The person who wrote the question is obviously clueless, and I have to guess which error they made. I also love the questions on multiple inheritance and template specialization, which I never would use and would look it up if I did need it.

I have more than 10 years of experience, a CS degree from a highly ranked University, and every job screening asks me basic skills questions. Is your stupid programming assignment going to measure more than my 4 year CS degree and 10 years of experience?

The trolls on this post will say I’m not having career success because I’m a pathetic loser. I know I’m on the top end of the ability scale. We live in a society of inverted values. I’m really intelligent and honest and not a wimp. That’s a liability and not an asset. No manager wants a highly skilled subordinate, because he’s insecure about his own job. My long-term goal is to get my own business going. In the meantime, I’m sticking with the wage slave track.

The leaders are criminally insane. Intelligent and hardworking people struggle to find any job at all. That’s the reason the economy is collapsing.

“I still don’t see how node.js outperforms PHP or C/C++. In node.js, you’re doing stuff that the OS normally handles for you.”

Totally correct. It doesnt outperform either (esp C), and it cant. If you have a perfectly good system written in PHP (or anything else), then re-writing it in javascript is meaningless.

All the ‘cool’ factors in node – super fast async non-blocking blah blah blah … well, you are right, thats what OS’s do, and do really well. Its a pointless argument, directed at impressing the clueless. Thats not

Performance is one factor amongst many. Development time and agility is another factor I suppose. PHP on a LAMP stack suits me as the best all-round environment for getting things done 99% of the time. C will always be my preferred tool for doing things right. I am using node for an MMO game control system, because it fits the problem really well, and its fun to program in. Its all just code anyway. Code is a means to an end.

One thing that is rarely spoken out loud too – Coding is easy, and should be fun. For example – I often prefer to ride my bike everywhere, because its much more fun than driving. Its not always about being efficient, or safe, or sensible. I will code in any enviroment that is fun. If the environment needs to be fought, then I cant be f*&cjked trying to make a pig sing like a bird. Life is too short to be working with bad implementations of bad ideas.

The multi-core / multi-threaded scalability thing. It is not a good idea to put too much into a single threaded node program if scalability is a concern. I dont think its meant for that at all. If “the system” you were developing was divided up into dozens of small independent processes that all talked to each other, then node might be a good fit. Depends.

The async thing is relatively important. Its certainly not a new idea though.

I have written perfectly good async event-driven programs in C before … its not about the language or performance so much, as the mode of thinking that it places you in. Coming at a problem from a completely different angle can sometimes shed light on more elegant solutions. Depends really. No silver bullets out there. Im sure you have been around the block a few times to see so-called “systems” that have been cobbled together … where no amount of extra CPU cores will fix the fundamental mess that has been allowed to grow.

Choice of language and tools can, by themselves, destroy a project … but they can never, by themselves, create good solutions. That, as you know, requires experience. There is no subsitute for experience.

And thats one of the factors that is royally f*^cking everything up at the moment. Experience is no longer valued. Buzzword compliance beats common sense.

Hype based economics that rewards stupidity and stifles anything honest and useful. Expressing honest opinions .. attempting to apply common sense and good engineering practices … get pushed aside in favour of feel-good nonsense. The whole so-called “workplace” has turned into a putrid real life version of facebook – a massive popularity contest where everyone who plays by the rules is a winner.

Agree with everything the clueless bosses say, sweep problems under the carpet where they cant be seen, turn a blind eye to corruption …. and smile as you follow the herd off the cliff life a good little worker.

I love programming – I have been coding now for nearly 30 years in all sorts of projects. At least 6 days a week, every week for 30 years. Without a break. I am still learning, still loving it, and still further than ever from being bored. I find it ridiculously easy to program, and endlessly fascinating.

But I WONT do it for a living any more. Its not worth dealing with the unqualified idiots that have injected themselves into this industry, and completely corrupted this beautiful form or art.

What I see happening everywhere in corporate land now is so disheartening. This is NOT what I dedicated my life to. Its the complete opposite of everything I believe in. I willl NOT – EVER – write another single line of code to help out these liars and human filth ever again. I wont do it. I will only take on honest real work like working on bicycles, or harvesting crops, or cooking, or cleaning dishes, or personal training .. or whatever. I wont sell my time writing programs though. Fixing other people’s problems that they are too stupid to see for themselves. Not worth it for any money.

When your OS dishes out time slices, it typically uses a minimum of 20-50ms. When I was working on a Windows trading system, I found a way to configure the time slice to 1ms, which would slash any OS-caused delay, but 1ms was the minimum. On Linux, you probably can get any OS time slice interval you want.

The idea of “manually manage callback timing” goes back to the days when you didn’t have an OS to do it for you.

“Threads and processes have overhead” is also false. Apache keeps a pool of idle threads and processes, so it doesn’t need to create a new one for each request.

I’ve worked for derivatives traders. It was OK, but one of the bosses was a real Madoff type, leading to the obvious problem.

Financial software has zero real economic value. I would do it, because I have to get the best job I can for myself.

Traders say “We have a ‘Type A’ personality.”, which is a code phrase for “We’re abusive jerks.”

I like computers and programming. My problem is working for scum.

It is frustrating looking for a job, because “# of years in X language” is more important than my actual ability. I know that in a few weeks or less, I’d be more productive than a mediocre person with 10 years of experience in that language. However, I don’t make it past the keyword screening.

There’s one “advantage” of filtering resumes by keywords and # of years experience in each language. That enables a clueless twit to filter resumes. Headhunters promote the idea that “# years in each language” matters, because it enables them to pretend to be adding value.

If node.js is a new “hot” buzzword, then all the early adopters get a huge career boost. When employers demand “2 years node.js experience”, then all the early adopters are set.

This also encourages lying. If I lie and say I have the proper keywords, then I make it past the initial screen and may get hired. It was a silly requirement anyway, so it doesn’t matter when I do get hired.

An honest person gets filtered out at the keyword screening phrase. A dishonest person submits a different resume for each job, one that’s a perfect keyword match. Dishonest people have an advantage over honest people.

I won’t get full value for my labor until I have my own business. Even if I have my own successful business, most of the taxes I pay support evil people. The only way fully out is agorism. Then, you minimize the amount your labor supports evil.

Fantastic blog. I loved it. I’ve tried a lot of web-development frameworks and tools and 90% of them are hyped to death like Node.js and waste your time. PHP is one exception. It may not be blindingly fast (though faster than people give it credit for), but for many web projects it’s actually good enough and easy to use. When people give a new name to a reassembly of old stuff that all the young programmers have never heard of, and say it’s the greatest thing since sliced bread, you have to be sceptical. And no I don’t liked typeless languages for coding complex server-side tasks. Node applications will be so hard to maintain because the APIs are changing all the time and no one will have a clue what the type of variables are. To design a tool to be single-threaded and then have to subsequently fix it with load-balancers and other hacks just means that your initial assumption was wrong. I’ve seen too many “latest and greatest” technologies backed by narrow commercial interests fall by the wayside to waste my time trying to learn how to use it. What happens when Joyent decide to ditch it, huh? (And they will). How useful will Node.js skills be then? After you’ve had your fingers burned a few times that way and wasted too much valuable time you tend to gravitate to technologies that don’t change much. Then you can make real progress instead of running around inside a hamster wheel chasing the latest programming fashion designed by inexperienced people and hyped by venture capitalists.

How can anyone write about a new framework or programming paradigm without having tested it, or used it for its preferred use cases? I guess someone arrogant and lazy enough to think he knows it all without putting in the necessary time and effort.
In the end it all comes down to curiosity and open mindedness, as well as an understanding of where the web is going: Mobile location aware always connected with live feed and messaging.
Obviously the guy who wrote this article is old school and has no need for things like nodejs. If he’s an aging programmer, I hope his bad attitude (lazy, lack of desire to experiment, adverse to new tech, judgmental ) won’t affect employers perception of older programmers.

I would equate this guy to all of the old-school Microsoft developers who thought (and many somehow still think) that PHP & MySQL would never be able to scale for larger sites like, oh I don’t know… Facebook? Twitter? It’s amazing that I still find MS devs who laugh at PHP and are stuck thinking it’s still what it was in 3.x.

I’m sure there will always be places for guys like the author of this blog, but it really feels like he’ll be left behind in the next movement of web technologies.

How do we take a person seriously who equates being guided to an trough Harvard as some sort of personal defect. I take it you did not get the job that you interviewed for, and perhaps we should be thankful for the child-like rant versus some of the alternatives. It’s a common affliction that some of the ignorant and uneducated engage in sour grapes to boost their own egos. So, don’t think your unusual.

Harvard MBAs are ruining the economy. An MBA is good at getting appointed CEO of a large corporate bureaucracy. Most MBAs could not build a successful business. An MBA learns how to exploit defects in the State financial system and State economy. An MBA does not have skills that are useful in a really free market.

A Harvard MBA has negative knowledge.

The startup from that interview has already failed. The website still exists, but hasn’t been updated in awhile.

Holy crap you’re such a moron! I couldn’t read anymore after you said:

“Javascript is incredibly ugly. Why would anyone extend it to a full server-side language?”

You’re such an idiot! Lol. Guess what? *Your* javascript is ugly because you suck at programming. Javascript is an incredibly powerful language you can easily make beautiful with reasonable knowledge about object composition.

I did read through the comments and laughed at how you said setting up a LAMP stack is a day of work. Good job man. Hope you’re working on something unimportant.

I have just had to fling out someone who forced node.js on my dream project, and I fear maybe I am an abused productive type, but my experience was precisely what was described. Node.js is shit and it is being forced on people by parasites.

Way to embrace new technology. First, JavaScript is one of the best pure OO languages out there. Second, Node.js represents the future of web technologies. I am a senior PHP dev and have recently jumped on the Node.js bandwagon. While Apache is a solid and stable technology, it’s very much antiquated in both its design and capabilities. Look at the benchmarks for Apache vs. Node.js as a web server. PHP (and other established languages) may reign supreme for large-scale web apps for the foreseeable future, but for smaller projects, newer projects and APIs, Node.js may be the best new technology out there.

Hi,
I am a senior web developer and i have worked on different technology like C#, Asp, Vb, java and some of the experiance on Php. But node.js is a new web technology and now days is very usefull for small type of project, new one project, and for Api its great usage in there type of project.

I have been programming PHP for 8 years…and not your speghatti code…I think you are just insecure about nodejs and shunning it without giving it a chance…

“Node.js is single-threaded only. You use non-blocking calls and callback functions. In these days of multicore servers, why would anyone design a language to be only single-threaded?”

Did it occur to you that you are a retard and you don’t know how to scale nodejs to multiple cores, and even take advantage of hyperthreading with kernel tuning?

PHP is awesome but the prefork MPM doesnt scale and the other MPM doesnt work with most of the libraries, so if you require concurency Nodejs is the way to go…If you are just making a website PHP is the way to go, if you are making a big data scalable high simultaneous hit application nodejs is the way to go.

Nearly every language has something that it does very well. Is node.js a great tool to use for a massive enterprise level site with lots of logic? Nope not alone it isn’t. However it does do websockets very well making it a great choice for your websockets layer. With a good design you can have several languages work in tandem to use them where they are shine and end up with a product that is greater than the sum of its parts.

Your php chainsaw may solve every problem you run into but I promise it waste a lot of resources doing it for certain cases and in those cases leaves behind some ugly code someone has to maintain.

Author of this blog post, sorry but I cannot trust in someone that calls parasites and psychopats people that understand someone that he does not.

As a previous poster said… You just seems insecure at something totally new, which you simply cannot understand, that is taking over and probably threatening your fields of knowledge. I just see lack of experience speaking here.

What a great load of crap. I have dealt with people like you in the past. Self-absorbed idiots who believe they are cleverer than everyone else, usually gets fired or in a dark corner, mumbling to themselves about how the rest of the world is stupid.

Meanwhile, the world goes on and you are being left behind. Your “cleverness” does not seem to be enough to escape the need to ask for a job to someone else. All this together, make you the kind of person who is going to be unhappy forever…

Grow a backbone, kid. Seriously.

Oh, and about node.js… are you a developer, really? Don’t you know by now that, unless we are the bosses of the project (you clearly are not), we code in whatever the pyscopath/manager says?

Thank you for the early indicator that you hate JavaScript. It made all the inaccurate stuff amusing rather than annoying, which it always it when the person criticizing points out at the end of a long list of things that aren’t really true. Also thank you for hating on TDD. Let us unite our hatred across your funky-ass bolted together Frankenstein of a server-side language with highly similar API methods with arguments in no discernible pattern that nobody wants to use anywhere else and my beautiful first-class function-wielding complexity reducing/normalizing beast of a rapidly evolving language that’s spreading everywhere like wildfire and really hate on TDD together, in love and admiration for how much we can hate on each other’s choices yet still hate something even dumber more.

Alot of your analysis is terrible, and your premises suck. True, there’s was alot of hype around Ruby and Rails, then Python and Django, now JS and Node.js. The exaggerated amount of hype doesn’t mean any of them suck. There are phenomenal successes and fantastic failures that involve all of these technologies, because in the end, picking a good technology won’t build the product for you.

By the way, you have obviously succumbed to the anti-Node hype, seeing as how you claim Node.js can’t use more than 1 core. It can – you spawn more processes and use message-passing between them, just like you would to parallelize Ruby or Python. It’s actually quite easy to run parallel processes on Node (and Ruby and Python…).

Node of course also has the advantage of leveraging the V8 interpreter, which is very, very quick (for a dynamic interpreted language that is). If you know Javascript well enough (or one of the languages that compiles down to it), Node.js is a great choice – fast, lots of libraries, good design, easy to set up/be productive.

Good programmers will probably be successful using just about any technology – Ruby, Python, PHP, Perl, Java, Scala, .NET, Clojure, Node.js, Haskell, even Common Lisp and OCaml. Bad programmers will just blame the technology when they fail, and will probably write shitty generic code in a ‘safe’ technology (usually some MS technology that gives them alot of hand-holding…).

My favorite part of most typical job ads is something like (from that ad):

Our client is one of the most sought after employers among startup focused developers. Not only will you be among some of the most elite developers and engineers

Nobody ever says “We’re looking for mediocre performers who won’t threaten their boos with their competence.” Everyone always says that they only hire the best.

My new part-time job is interesting. After 50+ interviews of being treated like a clueless loser, at this job, they’re saying “OMFG! I can’t believe FSK is fixing all these problems and making it look easy!” For example, one critical bug that had the other programmer stumped was a 5 line fix. The other junior programmer is more interested in getting the opportunity to learn a lot from me, rather than backstabbing me.

I didn’t readed all the comments here, too long, but i want to clarify some points.

But, before that, i want to say that I am a C/PHP progremmer, on Linux/Mac OS X and C# progremmer on Windows and i know javascript quite well.
I’ve seen a LOT of religious wars about the best language BLA BLA BLA, but the main point is the it’s you that use the language, and not the language that uses you … so you can use the head and use the appropriate tool for the job.

Ok, now:
- nodejs isn’t single threaded, it uses more than one thread but they are internal stuff, all the user code runs in the same thread
- to “distribuite” the load on multiple cpus/cores you can spawn process, today almost any framework support this and it is very easy to do (few lines of code)
- if you need long running task you can do it on another process, spawining it

Is this the best solution? I’ve no idea, but i like it.

Why do i like it? The reason is simple: do you have never developed heavy multithreaded applications? Have you any idea of how much time the CPU will spent on context switching? Let me to answer … A LOT!

All modern efficent network servers uses thread pool to avoid to spent too much time on context switching, but this means that you can’t spent 10 seconds on a request because if all the thread in the thread pool are used the successive request will stucks.

Apache, for instance, doesn’t care at all and spawns a process (or a thread, on windows) for every request … this has a lot of drawbacks, but let the developer to don’t care too much about blocking/long-time-running calls.

For i work, i developed a C# network server able to “eat” up to 4gib of data per second on my test machine (i7 3770 + 8gb memory), my code ported on nodejs is able to do a bit better.
On my C# version i was using (mainly) the following:
- thread pool, to avoid the necessary time on creating/destroing threads and to reduce the context switching as much as possible
- object pool, to preallocate all much stuff as possible to reduce at minimium the pressure on the virtual machine (the garbage collector works less and this means less pauses and more speed)
- iocp, IO Completition Ports are a mechanism that let you to ask for an IO and let to windows to notify when it’s ready, so you avoid to pool to check if there are data to read or to check if a new connection is incoming (on linux there is a system that has the same purpuose but works in a different way called epool, on *bsd it is kqueue/kpool)
- compare&swap, called compare and exchange or CAS too, to avoid locks on data structures (but usually you need to write up to 50 lines of code instead of 4/5 to handle the CAS)
- spinlocks, for some stuff it is impossible to avoids locks but instead of using mutex, that causes the context swithing, the spinlock avoid it if the locked resources is helded by a thread handled by another core/cpu (basically the spinlock doesn’t suspend the thread immediately, it waits for some ms before doing it and it helps a lot)

On node.js, my code needed only;
- object pool
- iocp (but that are used natively, so basically i did nothing to use them)

The difference? less than 15kb of javascript code vs more than 100kb of C# code for the base libraries and the server … oh … yes … two days to do this with node.js and 1.5 months to do this in C# on windows ^^
The CPU Consumption was about the same, near zero (thanks to the IOCP)

And, we should consider that a system like this is less bug-prone … debugging multhread stuff is the hell!

Regarding the comparison IIS vs node, search better … that article was comparing iis towards iisnode, that is node started inside iis where iis was proxing the requests (that means that iis was parsing the request to understand how to handle it)

I scrolled down to write a comment exactly like this one. Thanks for saving me the time.

Anyway, node.js is NOT a replacement for PHP and stuff nor a better RoR etc…
You should see node.js like… nodes. small pieces that interact together. Writing a whole website using it is pretty stupid imho.
A nice architecture would be, an HTML + JS frontend, communicating Restfully with a backend written in node that spawns other node.js (workers) processes for time consuming tasks etc… (no server side page generation here (i know i am pretty strict on that)).

In short, use node.js for what it is good at, and do not try to replace with node.js and say it does not perform well.

Assuming this isn’t some elaborate trolling operation you have running here, I hope I never have the misfortune of meeting you in person. I can’t imagine the misery of having to work with someone who acts like you.

“That’s the biggest lacking feature of modern programming languages, support for multiple cores and multiple threads. ”

Do you – by any chance – know why is it so?
Are the multiple CPU architectures so new that it was not enough time to come up with nice solutions?
No dude – it is just because it is f* difficult to solve these problems. And actually things build around Reactor Pattern are one of the solutions, which remove parallel processing from your design of your application. The other solution would be e.g. pure functional programming – which results in the same thing – you’re not thinking how this is going to be calculated – it just gets calculated.
Also, if you complain that e.g. Node is not using multiple cores – you are pretty clueless by yourself. It is really not that these all cores will be ide when it comes to production deployment, seriously…

There is the other advantage to Node-like design (single thread, event-based). It is that it is ready-to-go for computing clouds. Try to spawn threads in your app for e.g. Google App Engine . With Node app – you just deploy as it is and you can add/sub the processes (virtual CPU cores) as you need.
Again – you are not thinking about your target env. – you JUST scale it without planning for it.

He tells his mentality by bragging about using “[whatever].net”. I remind you that .net languages are JIT compile based. Just In Time, compile based means that the raw code is ALWAYS available in UNCOMPILED format for ANYONE to edit or steal. He mentions C++ and VB6, two old languages that are fully able to compile into stand alone executables; and two old languages that are very (read “VERY”) easily multi-threading. C++ is radically powerful. VB6 was designed for Rapid Application Development which can expedite a business’ adapability efforts to changing market environments. Both are fully able to be compiled into stand alone executables, with NO raw code available to ANYONE except the development team. He should have stopped there. But, no, he went on to brag that he was now into coding in “.net” . Then he cursed the users of other languages that he (openly and clearly) pre-stated to not understand sufficiently for a valid boolean response. For him to say that he does not follow the latest trend, and then to brag about using any language that is .net is a reversal of logic. He also went on a rant about mult-threading: If you know how, it can be fairly easy in many languages. He seems to find the tendency of node.js to be single threaded and thus a challenge maybe. Ask someone else for help and adjust it to multi-threading. Industry does not run on crying and whimpering, but rather on self-drive to find solutions, implementing those solutions, and moving on.

I mangaged to read quite a lot of the responses, eventually skipping over the original author’s because they approach null, and I thank you others for some insight into other languages. I like C++. I like javascript (and many of its spun off variations).

It is often the programmer (or programmer wannabe) that creates much of the problems in many (probably not all) programming activities. If you have a problem with a language, maybe another language will fit you better. Do not hate someone else that is less or more than you in skill. Do not despise some else that has not acquired your hours of (maybe) experience.

In the past I have cried because of difficulties. Therefore I cannot fault the author for crying about node.js . I can say that he should now try something else. Get a handkerchief, blow your nose, write your own library base to help yourself in your programming endeavors, and move on.

I am a developer of over 16 years experience, run my own company and have never been out of work. I have worked for large blue chips, public sector bodies and small companies. I have used VB6, C#, Asp.net, SqlServer, MongoDb, Javascript, NodeJs and Python and am currently learning Go.I can honestly say that we can all rubbish any programming language as I am not aware of any language on the planet that covers all the bases. We can all pick holes in any language. I prefer to use the right tool for the right job I am always open minded and have no need to profess how great I am or how bad other people are.

I have hired developers and I can say one thing that holds true and that is if ever I come across a developer who thinks they know it all, or rubbishes other peoples work so by proxy advancing their own I know that they really are very poor developers, very poor employees and bottom line very poor individuals, I suspect FSK falls into this category.

>if ever I come across a developer who thinks they know it all, or rubbishes other peoples work so by proxy advancing their own I know that they really are very poor developers

Aren’t you doing the exact same thing, by posting here complaining about what a loser I am for not liking node.js.

I researched it a little. The overhead for a thread context switch is ~1000-2000 cpu cycles. The memory overhead for a thread is also negligible compared to the memory used by your application data. So, the main argument in favor of node.js is ridiculous, because the overhead of threads are negligible compared to the other stuff your application needs to do.

Where in my comment above have I criticized you for not liking Node ? Where ? I criticise your hyperbolic, aggressive categorisation of mainly people. I make no comment on you technical skills and I also do not advance my own skills by rubbishing your technical abilities. What I am criticising is your aggressive, arrogant and over the top attitude. You throw terms like scum, evil and psychopath around far to liberally, evil is something I haven’t come across and if I did common sense would suggest to me that it would not be in the form of a computer tech/person I didnt like. Also just to clarify I have not called you a loser so don’t even try that emotional blackmail. I suspected you of being poor especially in attitude and anybody reading your comments would come to the same conclusion.

I am more polite in person than the way I write in my blog. Some people really are evil. It’s a disturbing fact to realize. I have noticed that evil people prefer trash like node.js and Rails, because they evaluate hype and not merit. Node and Rails and Git have created great hype, but the product is garbage, so they attract people who evaluate hype but not technical merit.

There have been evil people at almost all of my jobs. They are everyone and dominate our society, due to the way laws are set up and that most intelligent people are conditioned to be victims. Either you are too clueless to notice them, or are one of them.

FSK wrote mainly about psyhopats at work that are a parasite for a company.
I have seen some of them quite few times and its true what FSK says, anothewr story is dealing with them (which is separate skill).

If you really want to experience pure sh**, try GRAILS. that is the ultimate nightmare..

wrt node.js:

Advantage:
- one language for the whole stack: JavaScript. JSON for anything model-related (stored in mongo). Extensions like TypeScript oder Coffeescript make JS a bit more convenient.
- JavaScript developers are those that really can make a Website shine. Even though the language is shitty. Now JS developers can implement their UI concepts more quickly -> more feedback
- c++ Extensions are possible -> Speedup for certain situations
- btw, Paypal moved all of their frontend webapps to JavaScripthttps://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
- From http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js
“In one sentence: Node.js shines in real-time web applications employing push Technology”

You obviously don’t understand asynchronous programming nor how computers work on a low level.

Blocking IO is incredibly costly. I know it just comes naturally to humans, but telling the computer you want something then hanging up the main thread until it comes back with it is wasteful. Just spawning more threads so you can wait for things while you wait for other things is proven as an inefficient solution–look at Apache.

A good programmer adapts his programming to the limitations of the system, not the other way around.

For most of the applications that Node.js is good at, multi-threading, at least the way most frameworks implement it, isn’t what you want. In PHP, ASP, Django, Rails etc… They give each process, usually each individual request its own memory space. This means that there’s no way for a variable that gets set while servicing one request to be available in another. This makes some things, like multiplayer games, or collaborative group stuff, very very difficult to code, requiring a custom back-end that would, due to development-time considerations, usually need to be single-threaded anyway, or tedious database access.

Even temporarily ignoring that Node.js now has multi-threading in the form of web workers, if you really wanted to leverage all the cores of a server-side system, and you had no need for a shared memory space between requests, you would usually just start a number of server instances equal to the number of cores on your system, and configure a reverse-proxy such as nginx to assign requests to them round-robin.

JavaScript can be an ugly language, especially if you try to use it like C# or Java. But closures… Man, with this one language construct, it becomes downright elegant. When you understand them, a lot of the design decisions they made make a lot more sense.

One of my main frustrations with JS when I was as middling programmer, was that it didn’t have proper private class members, and members had to be prefixed with ‘this.’ There’s also the fact that the value of ‘this’ would be reassigned when calling a function outside of its original context. All of these things seem awful, breaking the case for JavaScript being used as anything more than a niche language. Most JS people recommend you define your methods and variables inside your constructor too. This seemed retarded to me at first. I thought it was a philosophical thing, not a practical thing–I thought they were completely thinking of objects as a the result of a process, the same thought process that gave us shit like ‘FactoryFactory’ in Java, and I shuddered at the thought. I mean, sure, they can have it their way, but that’s not how *I* do things.

But then I learned how closures work, and it all just clicked. When you define your functions in the constructor, they inherit the constructor’s closure. This means they can access any variable declared in the constructor, without a ‘this’ prefix, and you don’t see them outside of the class because they’re not really ‘members’ of the class, they’re just free variables that the class instance has exclusive access to. If you want something accessible outside, or ‘public’ as they’d say in other languages, you just assign it to a property of ‘this.’ Also, if you need to access the actual class instance for any reason, you can do so by assigning it to another, scope-local variable, such as ‘self.’

I realized then that I was defining my classes as miniature, complete, separate programs, exactly the way I did when I first started programming. I now love JavaScript.

Finally, I have some advice for you as a writer- If you’re going to be a curmudgeon, don’t be the douchey, egotistical kind. Don’t call people morons who you’ve barely even taken the time to understand. Don’t confuse criticism of a thing for criticism of a specific subset of people who hype it. This creates huge blind spots in your perception of the world, and makes your own failings deliciously easy to pick apart. It sure doesn’t help that from what I can gather, you’re a mediocre programmer at best. Like the fact you consider it a PITA to manage callbacks, which besides revealing a lack of flexibility and creativity, shows you’re an entitled “make this easy for me, fuck everyone else” little hellion. You’re the kind of person who gets commissioned to build a multiplayer gaming social network, and does it in WordPress because “he knows it better,” (I’ve seen someone do this btw) and then blames everyone else when it fails to achieve the project’s goals.

I would never hire you, not even to write ASP which from the sound of things would be your best language.

There’s nothing wrong with not liking a language, but I think it’s a shame that you’re unable to see things from a less biased and abrasive perspective.

My main issue is that you are focusing on (in my opinion) a minority here, and rather than focusing on detracting from the language itself you continually base your points from having to deal with inexperienced people, teams and analysts that try to tell you to solve their problems in a way that you’re not familiar with. Yes, it may not be the best way to solve the problem, but why should you make such a definite decision before you at least give it a chance?

There are a minority of node developers who will swear by node and will try to use it to do absolutely everything: these people are fools. Good programmers know that not every shoe fits every foot, and while node doesn’t try to fit every foot, some developers try to stretch the language quite a while away from its intentions.

Node focuses on being very useful few key areas, and is considered to be fairly scalable, notably by having a small footprint on the server. There are a number of excellent uses for node.

To contrast this, PHP for instance is a perfect example of a language that tries to be the jack of all trades. Overall, PHP is very bloated and verbose language, and it has some very interesting, uncharacteristic, and well, probably unintentional ‘features’ which often cause developers quite a lot of confusion and promote poor coding practice (which is just as bad as callback hell imo), inconsistent naming schemes and way too many function aliases, and overall fairly terrible performance and efficiency (in terms of memory/CPU usage). Consider the analogy below:

I can’t even say what’s wrong with PHP, because— okay. Imagine you have uh, a toolbox. A set of tools. Looks okay, standard stuff in there.

You pull out a screwdriver, and you see it’s one of those weird tri-headed things. Okay, well, that’s not very useful to you, but you guess it comes in handy sometimes.

You pull out the hammer, but to your dismay, it has the claw part on both sides. Still serviceable though, I mean, you can hit nails with the middle of the head holding it sideways.

You pull out the pliers, but they don’t have those serrated surfaces; it’s flat and smooth. That’s less useful, but it still turns bolts well enough, so whatever.

And on you go. Everything in the box is kind of weird and quirky, but maybe not enough to make it completely worthless. And there’s no clear problem with the set as a whole; it still has all the tools.

Now imagine you meet millions of carpenters using this toolbox who tell you “well hey what’s the problem with these tools? They’re all I’ve ever used and they work fine!” And the carpenters show you the houses they’ve built, where every room is a pentagon and the roof is upside-down. And you knock on the front door and it just collapses inwards and they all yell at you for breaking their door.”

To label node exclusively as a bad language with no valid uses is just completely untrue. There are a number of use cases where node is a good option to consider. Every language has its drawbacks, and equally so, every language has its own cult following.

That aside, what you should instead focus on are the developers who form fads and follow newer languages without a valid use.