Callbacks were advertised as the reason why one should use node. They're a foundation of JS.
Then they got covered up by promises. And now, with async await, we're back full circle towards the style of a more linear programming language such as python.
It wasn’t that callbacks we’re a selling point, it’s that asynchronous execution was.
Callback were just the way of doing that in JS. Now we have Promises + Async/Await as sugar around what is basically the same pattern
ie - cb(err, result) is not that different than .catch(err).then(result) but it’s much nicer to develop with.
Of course now you can do the same in imperative try/catch for with await so yes, we’re back to similar syntax but a whole lot change under the hood and provided a much more performant concurrent model
According to the article, the node.js community hates itself. They are lucky as it seems as soon as they join the "rest of you", no one will hate them anymore.
Given the number of CS/Math guys who don’t understand the basics of prototypical object systems and try to make every OOP system fit into the C++ model... I wouldn’t throw stones there.
Most of the concepts in JS date back to Scheme and the Actor Pattern languages of the 70s & 80s.
In other words: you really don’t know what you’re talking about.
Yeah because CS/Math professionals have never use VB or JS. I'm quite sure that many Wall Street quants and Fintechs who use VBA in Excel to do their job today will find your statements hilarious.
Some of the worst code that I've ever seen has been written by hard maths people.
> It's fun for the rest of us CS/Math guys to sit back and watch you JS programmers discover things we learned 40 years ago. :-)
I just don't think it's fair to say that "JS programmers are just discovering concurrency".
Libuv, the I/O engine for Node.js is written in C and Node.js itself is a mixture of C, C++ and JavaScript. Plenty of other "JS programmers" including myself have also been programmers of C, C++, .NET and many other environments all of which have well defined concurrency stories. None of these people fit your profile.
> But I think you're reading more into what I said than what was meant.
Sorry, but this comment conveys no useful information to me. Your original statements were quite explicit.
I expressed myself poorly. Please accept my apologies.
I did not mean everyone who writes JS is a bad programmer. That's not only a dogmatic statement but demonstrably false.
However, people who shouldn't be programmers have to land somewhere and right now its JS.-- just like VB was back in the day.
It's clear to me at least, that JS has been stretched beyond its abstraction level. It's ripe for replacement, its just that attempts to replace it have been closed solutions, so JS continues.
I don't think node.js per se is the worst thing. However, the way it is used, particularly what I believe to be a misguided attempt to do "full stack development" is really terrible. And it is not the first time that we have made this mistake. The whole Java on the client side blew up in our faces.
If bosses really understood that client side and server side are two different problems with different mindsets and specializations we would not be in the world of pain that we are
I am referring to the following mental algorithm I see being used by managers and some devs:
1. My front end guy does JS
2. My backend guy costs money
3. Let me remove 2 and get 1 to do both, it is all JS anyway; completely ignoring that the way you build the two is fundamentally different, with different mindsets. Language is just a small part of the equation. The claim that having a single language on FE and BE will save cash is simplistic and misguided. It is like saying since my kitchen utensils are built of stainless steel and aircraft carriers are built of stainless steel, I will get Le Crueset to manufacture my aircraft carriers
I don't think there's a single language or framework that I haven't heard this about.
None of our tools are perfect, but great software has been written with all of them anyway, and lots of people have enjoyed working with those tools along the way.
If you don't like a tool, switch or build a better one. Don't write long borderline-nihilistic blog posts about how everything is terrible and we're all clueless.
That's generally true. However, when the creator of a popular language/framework disses it himself, it carries a different kind of weight that can't be easily dispelled by your argument.
It doesn't read that Ryan Dahl dissed it. He dissed every language and their role in adding to the complexity of the thing that is called IT these days. And he tried to make the focus about the user of the software: as it should be!
"The only thing that matters in software is the experience of the user."
Why not? Is there something wrong with expressing an opinion about a programming language. You've just expressed a similar opinion about their right to expression.
It pushes too hard, it's not balanced nor it is fair. There are articles which generally criticize js that I've bookmarked, but this is mostly expressing emotion not so much opinion.
"Of all the ways of doing concurrency, callbacks are by far the worst,"
Why? Working with callbacks on a solo thread has proved to be more performant I/O wise than threads.
"for any other problem anything else will be much better than Node.js, even PHP."
Why?
While it might be true to certain extend (i.e. Node not being the right solution for many cases), this article is just filled with baseless arguments.
I hear the main complaint in Node.JS, and even in Go too, is that the error handling is too verbose, eg you can not wipe all fail cases under the rug, they will litter your code and stare annoyingly at you like "hey, you have not handled me". And the code will fail spectacularly, while I guess some developers rather have silent errors with the motto "what I can not see can not hurt me". It gets unbearable for the CRUD app developers when each SQL line needs to have it's own error handling and you have to think about in what order and when to send the SQL queries, where as in traditional "skin your database" programming framework everything is done synchronously. But now we have async/await and you can just await, await, await, and even "forget" about the catch, or that everything is done asynchronously under the hood.
Didn't read that, because title is enough for me. But usually people who hate javascript are those who didn't learn and understand it properly. I mean very basics, like concurrency model and event loop. I saw so many monstrosities in production, like checking for result of some async call, with setTimeout. No wonder, people who wrote that code, hate js.
Critiques of Node.js like this are usually from people who can't keep a single thread up and running. Can't count the number of otherwise intelligent ppl who have told me "Node.js doesn't work". No. Your code doesn't work. Try again.
Now we have async/await, I think there is no problem.