I think JS is a pretty bad language. It’s a down-and-dirty language that was in the right place at the right time 20 years ago. But if you want to do web stuff, then you absolutely must know it.
In all, that’s no big deal for folks who already have a decent arsenal of languages under their belts. We can just suck it up and deal with the stuff we don’t like while we’re writing JS. But for newcomers, it’s trickier.
Beginners pick up cues from the language (and its community) about how development should be done. They’ll think semicolons should get automatically inserted in ambiguous places, that all numbers should be floating points, that there should be only two scopes for variables, etc. To me, that’s a bad way to get started.
I worry that people who pick up JS won’t end up with enough perspective to reflect critically on JS itself. I worry that we’re expecting the future of web programmers to put up with too many of the hasty/bad decisions that were made in the 1990s. I worry that they’ll jump into a half-baked development vehicle and think they need to start reinventing wheels in order to get anywhere.
In the end, I wouldn’t tell someone NOT to learn JS in 2016, but I would give them a heft warning that there’s a lot more to programming and “software engineering” than JS can offer right now.
> The biggest thing [...] is its universal nature: being able to write an application once that runs everywhere without modification.
The same was said about Java, although on a slightly different axis. It never
really worked, and similarly, it doesn't work this way with JavaScript.
And your point of view is very, very narrow: only web applications. There are
plenty of other applications of programming that have nothing to do with web
development, barring semi-statically displaying some results. For those
applications, JavaScript is a very bad fit.
> A massive, diverse, and vibrant community.
The same that produced tons of abandoned libraries, probably even more than
lay abandoned in CPAN, which is much, much older and more mature. It's not
a sign of a healthy community.
Also, your glorious React didn't exist three years ago. Why should I expect it
to be still developed three years from now? It doesn't sound like a very
transferrable skill.
> Getting Rid of `this'
> [...] purely-functional programming is becoming more popular in JavaScript.
Why not learn functional programming language for functional programming? It's
not like JavaScript could do even decently. Just throwing bunch of functions
to other functions is not quite functional programming yet; there's much more
in this paradigm. And one has to go way, way out of his way to use this
paradigm for real in JavaScript.
And so on. Overall, it's better to spend time learning several different
languages of different levels and paradigms than to try to fit round peg in
a square hole with JavaScript. JavaScript should be approached only after
already learning three or four other general purpose languages (and twice as
many DSLs, like make or SQL).
I talked about native mobile applications as well.
> Also, your glorious React didn't exist three years ago. Why should I expect it to be still developed three years from now? It doesn't sound like a very transferrable skill.
Facebook is dogfooding React in a way not seen in other libraries in use on the web. Sure, Google uses Angular here and there, but nowhere near to the extent that Facebook uses React -- both on the web and native mobile.
> Why not learn functional programming language for functional programming?
That's not really the point I was trying to make. JavaScript is already widely adopted on millions of devices. I can deploy functional JavaScript anywhere.
> And one has to go way, way out of his way to use this paradigm for real in JavaScript.
I mentioned libraries that encourage this paradigm. Including lodash-fp which makes a point of making everything in lodash auto-curried, iteratee-first, and data-last.
In all, that’s no big deal for folks who already have a decent arsenal of languages under their belts. We can just suck it up and deal with the stuff we don’t like while we’re writing JS. But for newcomers, it’s trickier.
Beginners pick up cues from the language (and its community) about how development should be done. They’ll think semicolons should get automatically inserted in ambiguous places, that all numbers should be floating points, that there should be only two scopes for variables, etc. To me, that’s a bad way to get started.
I worry that people who pick up JS won’t end up with enough perspective to reflect critically on JS itself. I worry that we’re expecting the future of web programmers to put up with too many of the hasty/bad decisions that were made in the 1990s. I worry that they’ll jump into a half-baked development vehicle and think they need to start reinventing wheels in order to get anywhere.
In the end, I wouldn’t tell someone NOT to learn JS in 2016, but I would give them a heft warning that there’s a lot more to programming and “software engineering” than JS can offer right now.