Ah, nodejs. I’ve learned quite a bit of it and came away with the same impression that a humorist on youtube wrote. To wit
More than a few of these problems the two languages have are a result of a shared trait - their loose datatyping.
Anyway, I always get a chuckle about speed contests between interpreted languages since compiled languages such as C will always leave them in the dust. And if you really feel the need for speed, there’s assembly. The problem comes with the amount of developer time required. As a rule of thumb, your time is always worth more than the CPU’s, so trading some raw execution efficiency for ease of code writing, maintenance and comprehension is worth it.
And that’s my largest gripe with nodejs. The callbacks pattern is fine when in a shallow small application, but it can rapidly spaghettify, especially under time pressures. I’ll concede that some of this problem is me and would go away if I spent some time with it, but some of it is inherent to the language and the framework’s structure.
One large stumbling block with JS is the prototypical inheritance. It is incredibly powerful and allows for very rich code, but it is a considerable paradigm shift from classical inheritance and the similarities belie the differences between them. It takes awhile to make the jump and for awhile I found myself using prototypical inheritance to emulate classical, which sells the concept way short of what it’s capable of.