JavaScript is an awesome language, but there is so much more to it these days, that it seems some important footnotes are overlooked. When I learned JS in 1995, it was simple, but just enough to make me avoid it until 2015. When I came back learning React.js, and decided to learn JavaScript, and Node.js, I found I had a lot of questions when trying to apply my knowledge. In this article I talk about what I think is the workflow to truly learn JavaScript, and not get lost in the process.

Learning JavaScript itself is pretty straight-forward, but if you are creating anything major, you aren’t using it by itself. It’s when you get into frameworks, and libraries that you notice your knowledge may not be up to par, and that’s going to happen if you learn something new, and robust. Node.js is a large example of one of those awesome frameworks. It was one of those I personally took a break from React.js to learn more about. Why? It intrigued me quite a bit, and I wanted to start creating a custom server-side for my React/Redux applications. The more I learned about Node.js, the more I enjoyed it. Unfortunately I continued to run into new road blocks, as well as hours of frustration; the more I used it, the more I realized I didn’t know what I needed to know what was going on.

learn C++ in 21 days
While this is geared towards C++, learning JavaScript is similar in a lot of ways.

As I started to back-track, and learn more about JavaScript theory, practices, and everything else “base-level”, the more I started to think about an old comic that summed up the learning process for JavaScript, but referenced as “C++”. Those who have learned JavaScript in a deep sense know it is not much different at all. You spend the first 3-4 weeks learning the basics: variables, arrays, objects, statements, expressions, loops, and functions. If you were lucky, the place you learned JS taught you the terminology to go with it, then you could start learning about paradigms, patterns, and flow control.

So to get started learning JavaScript, I want to first point out Team Treehouse, who gave me a great foundation to build upon when learning JavaScript. I also want to mention that it seems to be the only subscription service site that offers a monthly option, as well as offer a well-produced structured learning path. The only down-fall was the lack of the fine details. For instance, when getting to the point of “paradigms, patterns, and flow control”, especially when working on the “Full-Stack JavaScript” track. Of course, this isn’t only Treehouse, these are just hard to find anywhere.

So to learn these three concepts, I highly recommend a few books, which most you can find on Safari Online, as well as Amazon Prime (Borrow/Rent), or even free on Prime Unlimited. Starting with paradigms, I personally recommend everything Functional Programming to learn the alternative one to the usual paradigm taught with JavaScript. Functional Programming in JavaScript by Luis Atencio, and the duo The Magical World of Functional Programming: Part I & II by K Anand Kumar. To take it even farther, or to even replace some of those books, MIT’s Structure and Interpretation of Computer Programs (SICP) will do exactly this.

For the patterns portion you can learn many places, but two books have worked well for me: The open-source book JavaScript Design Patterns by Addy Osmani, and Node.js Design Patterns by Mario Casciaro. If you ever work with Node.js, you will definitely want that 2nd one.

Lastly for Flow Control, the Design Patterns will help, and I will eventually write an article on the subject, as it’s something that is simply ignored. When Node was young, flow control was something that took a lot of priority, and got a lot of attention. I found an awesome online Node.js book by Mikito Takada aka “Mixu”, written back in 2012 called Mixu’s Node Book. Even written so long ago it covers timeless topics, especially Flow Control. Sure, you can use “async”, or another flow control library, but how about understanding it first with manual Flow Control?

NodeSchool.io workshopper list snippet
A small taste of the NodeSchool.io “workshopper” list

Lastly I want to stress the importance of applied knowledge, with an awesome resource I found too late, that I think is absolutely awesome for learning various JS-related topics. This resource is of course Node School. When you visit the site it will look awesome, and the topics covered will surely pique some interest, but you won’t understand how awesome it is until you realize the workshops are run through npm. Install what you want to learn, learn what it talks about, create a project, and see if your project passes. Hands-on is where you should be learning, and even with Treehouse you should be spending twice as much time applying knowledge, compared to the time spent watching videos, and that doesn’t count time in Treehouse workspaces (with videos). You want to spend as much time thinking about what you have learned, experimenting, generating questions, and answering them with your own code. If you’re lucky, there will be a NodeSchool Local Event to help learn.

So that’s it, or at least a great amount of resources and topics to get you where you need to be with JavaScript, and tackle anything. At least for me these are the many topics I had to revisit to fully comprehend libraries and frameworks of all types ranging from Node.js to React-Native, and even tearing apart other projects I wanted to contribute to. JavaScript can be something you can take with a grain of salt, or something you can take passionately. If you follow the path of the latter you can expect greatness, and if you are learning it to make money, it’s what get’s you those jobs that start with six figures. Regardless of money, you should want to learn how to create the best you possibly can just for your own sake, as well as your users. Happy coding!