
Why You Should Learn JavaScript in 2016 - kpthunder
http://knpw.rs/blog/learn-javascript-2016/
======
egwynn
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.

------
dozzie
> 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).

~~~
kpthunder
> only web applications.

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.

