Learning JavaScript: And the Danger of Spreading Yourself Too Thin

In the tech scene, tools come and go quickly. The different currents in the ocean of programming languages have various rates of flow and times for staying afloat.

Those aren’t pokeballs. This is just a bad metaphor.

Programming languages, for example, can last as long as Java (21 years and counting), whereas various JavaScript frameworks have come and gone in the span of the last 6 years (Angular, React, Ember, Backbone, Meteor, etc.). The computer science and software development fields are still in their early stages, so expect more change as the industry evolves.

If you’re just learning how to program, or are looking to start your career in software soon, do not get phased by the fads.

Knowing the newest, trendiest MVC framework will not help you because that skill will soon fade and you will have wasted your time learning it.

Remember, it’s not a race to who-knows-what the fastest.

With all these new “framework” tools that are being built over languages, the most important points you need to take from this post are: Get to know *all* the basics of a language. Tools change, but languages don’t … as much. Master the essentials over the trends. Get Involved. And learn to love learning.

Somehow I managed to do this backwards and ended up working more than I should have. I tried learning Angular and Meteor before I had a solid understanding about JavaScript prototypes, promises, and scopes. Had I known to learn the latter first, I would have had a much easier time picking up the former.

Starting to Learn JavaScript

Back in mid-2014 when I got my BS in Computer Science, I got a job as a C# and Android developer. Working in both Java and C# tied me down to Android-only and Microsoft-stack jobs for my career. I knew that if I wanted to be more employable, I’d have to pick up skills that are less commercialized and more open. Maybe not as hardcore open and free as GNU/Linux but somewhere in between would’ve been nice.

A quick search on Google and GitHub shows you that the hottest programming language was (and still is) JavaScript. Why? Because of the popular frameworks like Angular and React. Also due to Node.js, JavaScript broke out of the browser and into the server, mobile, and desktop applications. Because of JavaScript’s newest ES6 features, the higher order functions, and not having to worry so much about static data types, JavaScript became my main language to learn.

The First of Many Mistakes (1st month of learning)

Being an entitled Computer Science graduate, I thought I knew enough about programming and JavaScript, so I dove head-first into learning Angular. I knew basic web development (HTML, CSS, JS) since childhood and got a refresher through Codecademy. I picked up Angular with CodeSchool’s dorky — but very informative! — videos. Afterwards, I made a few personal side-projects just to test my Angular knowledge. It all felt new and I felt like I was learning…

More Mistakes (~3 month’s time)

After various side projects, I moved on to learning Express and Node with the help of NodeSchool.io (great learning resource for Node btw). I was able to make server-side Express apps and learned how to manage my Node packages with the npm tool. I learned about Yeoman, the scaffolding tool, to set up some boilerplate code for my personal Angular projects. Yeoman’s pre-built Angular apps were way too dense for a beginner like me on my side-projects, so I began picking up build tools like Gulp.js.

Somewhere along the way I mistakenly came to the conclusion that the best JavaScript developers knew as many tools as possible.

My First and Last Correction

Getting into these “tools” for my newfound JavaScript journey widened my breadth of knowledge about the JavaScript ecosystem, but the depth of knowledge was lacking. T-Shaped Skills. By the time I felt okay with Angular 1.x, the Angular 2.0 beta had just come out, and this time Google recommended TypeScript. With this, I put off learning tools for a moment to reconsider my learning path. After many road-blocks, I decided to get back to the basics, so I went to re-learn vanilla JavaScript again. Not Angular nor React. Not Express. Not even jQuery.

FreeCodeCamp (~8 months and counting)

My girlfriend introduced me to one learning site that set itself apart from the rest, and that’s Free Code Camp (FCC).

(Feel free to follow Quincy Larson, a well-known teacher over at FCC, who also curates tech articles that help inform FCC’s community.)

Through FreeCodeCamp, I was able to: solidify my knowledge in HTML, CSS, and JavaScript; practice algorithm-based exercises which are great for interviews; and feel safe knowing that that down the line, React, Node, MongoDB, and Express would be introduced.

I just noticed those birds are brackets. Wow. (CC BY-SA 4.0)

The features of FreeCodeCamp that I found most appealing and kept me a happy camper were:

  1. Completely free to learn
  2. Shows you the entire curriculum path from the beginning
  3. Tracks your progress
  4. Has you practicing on real-world-like digestible projects
  5. Gives you actual real-world projects, by contributing to non-profit organizations
  6. Hundreds of hours-worth of practice exercises
  7. Has a supportive community of other learners (with chat channels, Facebook groups, and a Reddit).
  8. Many people have found jobs before they even finished the course!

The biggest takeaway from FreeCodeCamp was that I got back to the basics, and I learned from my mistakes in pure vanilla JavaScript, way before continuing to learn frameworks like Angular or React. FCC has a well-guided learning path that covers both breadth and depth knowledge.

You Don’t Know JS book series

I’m currently on book 3. Source (CC BY-NC-ND 3.0)
“I’m sure you noticed, but “JS” in the book series title is not an abbreviation for words used to curse about JavaScript, though cursing at the language’s quirks is something we can probably all identify with!”

Another great resource for me was the You Don’t Know JS book series by Kyle Simpson. The title of these books was right, I didn’t know jack s*** about JavaScript!

Here’s a link to the foreword to You Don’t Know JS: Up & Going by Jenn Lukas.

I made it a habit to read a chapter a day, which is pretty doable if you’ve worked with JavaScript before. I read other JavaScript books, but this one was by far the best book I’ve read. Again, no frameworks or tools being taught, just pure Javascript.

People to Follow

If you need other people to follow in the JavaScript scene, I highly recommend following Eric Elliott (@_ericelliott). His articles are very informative on JavaScript and are also peppered with great resources, which led me to the next resource…

Spotify Front End Developer, Mattias Petter Johansson (@mpjme), is a great follow. If and when you get tired of books and coding exercises, I highly recommend following this Swedish dude and his quirky Youtube videos on his FunFunFunction channel. The way he explains JavaScript and discusses software development in simplified terms reveals his expertise of the misunderstood language. The focus on a majority of his videos is on the JavaScript language itself, making the content a bit more timeless than if he were to talk about a specific, opinionated JavaScript framework.

My Unemployment

After saving some money, I quit my job in January 2016, to invest more time into myself, my learning, my CodePen portfolio, and also to not have to ask for another day off work to interview at another company. I was unemployed for 5 months. I thought I would be without a job for less time, but I underestimated how ridiculous the tech industry’s hiring practices can be. Don’t let it get to you! For me, those 5 months were stressful with the high student loan payments looming over me, living expenses, and feeling like a burden, living with my parents on no income.

Thanks to my supportive and reassuring girlfriend, who stuck with me through these 5 months while she continued her college education, I was able to handle the ups and downs of many companies’ interviewing processes. Each rejection at a company made me feel like I wasn’t good enough. What if I never find a job? Maybe I accidentally shot myself in the foot by quitting my last job.

My New Job

Just two weeks ago I was contacted through LinkedIn by a recruiter from a consulting company. They’re one of the “Top 100 Places to Work” on Glassdoor for 2016, and they were looking for a Front End Engineer — my current dream job. In the technical interviews, I was asked trick JavaScript questions that were thoroughly explained by the You Don’t Know JS books. I was also able to mention my FreeCodeCamp front end projects. If you’ve gone through FreeCodeCamp, the Twitch API project, and the Quotes Generator project helped a ton! I even shared about how I encountered CORS (Cross-Origin Resource Sharing) errors with these projects. The interviewers mentioned that this job entailed more than just front end development, so the more proper title would be “Full Stack Engineer”. To summarize, I have no doubt that I got hired after showing strength in the JavaScript essentials.

The company was more interested in the way I knew JavaScript than the number of JavaScript frameworks I knew. It was only until I realized this, that I began having more success in my other front end interviews.

Lasting Tips For the Reader

  • Study the things that change the least: programming languages, rather than language frameworks. But don’t knock frameworks completely.
  • Get a feel for the resources and stick to them: I liked going between FreeCodeCamp’s exercises, Youtube videos, and simple reading. The end result was that I was surrounded by JavaScript everywhere.
  • Do not get frustrated by your pace of learning: I mistakenly learned many tools before I knew basic JavaScript. Don’t run before you can walk.
  • Stay curious: Being in tech as an engineer, you’re making a career commitment to make sacrifices in terms of time by learning new things and staying updated.
  • Turn your mistakes into learning experiences: there’s no use in being upset or frustrated about being rejected for a job or failing a certain code exercise, so take these as learning opportunities. Either break down the problems or go slowly.
  • Meditate: get to know yourself, about how you react to new change, and how to catch yourself when you are holding on to negative things. This can help you a lot in learning and the way you present yourself at interviews.

Many thanks to Dalia for helping me edit this piece.