Node. This is the most focused way to become one with "asyncness" in JS.
Lodash. is JS zen. Even if you don't use it for everything, try and "think like it" when you are solving problems.
For grins and giggles go read some of the "Data Structures and Algorithms in JS" posts or books they have. Do different sorting algorithms.
My breakthrough moment in my JS journey was codewars.com . When you see how clever you aren't after understanding other people's much more elegant solutions to problems - only then do you realize what you need to do to get better. True in life - true in JS.
I mean, yes, in a way learning that would give him a taste for what modern development in JavaScript is like, but not really in the nicest sense!
It's a lot farther along than a lot of folks realize. And IMHO, the impact of it makes it something that even Safari will have to begrudgingly implement soon after Firefox brings it to production.
If I thought it was anything less than inevitable, I'd say "wait". But for a JS-dev, I honestly think this right now is the sweetspot between "Hot Shit" and "Will ACtually Still Be Relevant in 5 Years". (Think XHR 6-7 years ago.) So, yeah, I stand by the recommendation.
Don't start with a framework. It's a crutch. If you feel you've mastered JS then feel free to try out some of the frameworks but I suspect you'll quickly realize they're not really all they're sold as.
> become one with "asyncness" in JS.
This is probably the biggest hurdle most people hit with Javascript. Really understand the concept of asynchronosity, and learn about all the different abstractions over it (callbacks, promises, streams, etc). Then look at how other languages (say, Go and Erlang) handle concurrency. Then come back to Javascript and look at things from a new perspective.
> Lodash is JS zen. Even if you don't use it for everything, try and "think like it" when you are solving problems.
This largely means thinking in a "functional" way (as in, functional programming), and is golden advice IMO. Probably the most common piece of advice I give people that want to get better at JS is to program in a more functional style. Warning to OP: you mentioned having really grasped OOJS - be prepared to let some of that way of thinking go. There's definitely a place for object-orientation in Javascript, but in my experience, thinking in more functional terms leads to much simpler, easier-to-maintain code.
> DON'T learn any of the frameworks
This is where I disagree slightly. I don't advocate trying to become a master of every framework-du-jour that comes along, but I think that discerning the key features and insights from popular frameworks is a good way to augment your skills. React promotes a heavily functional style, and emphasizes "one-way flow of data", which I believe is a very powerful concept. One of Angular's more important features is dependency injection - this can do wonders for the structure of your application. These are just some examples, there's plenty to be gained by reading about popular frameworks/libraries, without necessarily becoming a new flavor of zealot every few weeks.
[0] - http://underscorejs.org/
• Ecmascript 6
• Frameworks (React, Ember, Angular are the big three)
Beyond that, it's important to understand the pain points that people are trying to solve. For instance, why is React a better approach to front-end UI's than MVC? Is JSX a reasonable approach to the DOM, and is it worth breaking conventional wisdom? What problem does Facebook's css-layout solve? What issues with modularity and reusability are people trying to solve, and how is this different at different scales of complexity? What's the "why" behind the changes to ES6?
And even beyond that, look at the future, and see what people are trying to solve that nobody has quite solved yet.
In other words, don't just understand what you can do with Javascript, understand what hurts and how people are trying to fix it, or at least make it hurt less.
Also, the online version of the book features an inline code-highlighting text editor from the same author as the book. You can use it to edit and evaluate the examples. It's actually the same editor used in the Chrome developer tools.
Look into stuff like functional programming, reactive programming, contextual programming. Learn the patterns and learn to apply them in your projects
http://eloquentjavascript.net/1st_edition/chapter6.html
Also maybe look at larger libraries like underscore, lodash and get acquainted with the programming concepts they apply since they are well maintained libraries.
I read you are familiar with AngularJS, get into the source code, understand how the beast works. Get your hands dirty, maybe build something into the angular library itself just to test it out.
Functional programming & reactive programming are absolutely valuable, though, and fulfill very real design patterns in Javascript. They're great skills to learn. No one reading this comment should come away thinking that OO is not absolutely important to JS, and that if you try to solve every problem in JS without utilizing it's aspects, you're probably hamstringing yourself without need.
- A taste for strong drinks.
- An ignorance of how nice other languages/environments are.
I had the immense pleasure of taking a workshop with Kyle Simpson, the author, at a conference last year and it covered much of the material from his books. In particular I found the book on 'this' and object prototypes to be fantastic.
JS is moving into everything because it's easy to learn, reasonably expressive, and is accessible. It may not be the best but often as not its the "good enough" that seems to rise to the top.
In other words; you're better off accepting it for what it is and doing the best you can with it.
I can't wait to teach that to my kids.
[1]: http://rmurphey.com/blog/2015/03/23/a-baseline-for-front-end...
I am surprised by how many js developers that I personally know are unaware of them.
I kid (I tried to do the same thing), but in reality, the higher level programming paradigms come into play when your software complexity increases to unmanageable levels.
Building small projects won't help you understand why they're necessary.