I say: Don’t learn JavaScript, learn the semantics and pragmatics of Programming Languages.
It’s just the “Give a man a fish; you have fed him for today. Teach a man to fish; and you have fed him for a lifetime” mantra applied to programming.
JavaScript doesn’t bring anything new as a programming language:
- Prototype based OO? Self: 23 years ago.
- Closures? the concept: 50 years ago, Scheme: 35 years ago.
In the 60’s FORTRAN was the first real alternative to assembly, the cool kids were doing it and leaving assembly behind, the seniors were struggling. Ugh, a different way of thinking.
10 years ago it was Java prime and all the cool kids were learning class-based OO and mastering design patterns to make applications in a very fast way that would run “anywhere”. At the same time making fun of everyone that was doing non-OO programming in Java.
Today all the cool kids are doing prototype-based OO and making fun of all class-based OO programmers trying to pick up on JavaScript.
Can you see a pattern here? Don’t trap yourself thinking that JavaScript will still be the cool language 10 years from now.
So I say, don’t learn JavaScript, learn:
- Functional / Imperative / Logic languages
- Lexical / Dynamic scope.
- Weakly / Strongly Typed languages
- Concurrency / Schedulers
- First Class Values
- Polymorphism
- Meta Programming / Reflection
- Type Coercion
- Type Inference
- Lexical / Syntax analysis
- Optimization
- Syntax Trees
- Compilation VS Interpretation
- Lisp / CLOS
Basically read Programming Language Pragmatics.