Rushing Labs

Why create a new course to learn JavaScript?

Totally JavaScript code

Aren't there enough?

I recently started creating a new series for others looking to learn JavaScript. Why? Because after 6 years with the language, I discovered that I didn't really know it, and I know it's because I only ever learned what I needed in the moment. I never stopped to really focus on the fundamentals, just regular vanilla JavaScript. And after 5 minutes focusing on that idea about fundamentals...I'm left wondering, "Can JavaScript be learned with just a browser and text editor?"

How Did I Learn JavaScript§

I briefly played with JavaScript back in college, but it wasn't the best experience. Nothing seemed defined, it was weirdly tossed around in a browser, and I was deep into the CS curriculum learning more interesting things with C# and other languages.

Then, it was 2014--I had just finished a major responsive site design project at work, and I stumbled across Meteor.js for some other work. Shortly after, ES6 hit. My head was swirling in JavaScript; everything I wrote was a webapp. "JS fatigue" seemed to be what every developer was discussing.

Soon after I was diving headfirst into React, and pulling together some large projects. Honestly, it felt great. My opinion of JavaScript was completely reversed. I was still growing my skills with C# on the back-end, and it seemed like I could really become a competent full-stack engineer! Then while integrating a UI library with React I came across memoization and higher-order components. Suddenly, I realized I didn't truly know this language; I was just figuring stuff out.

I've since moved into an AppSec role, but I miss being elbow-deep in code every day...it's leading me to revisit some of these pieces.

JavaScript's Quirk§

Later, while considering writing a video series for learning JavaScript, I figured it would be good to target a more novice audience. Afterall, JavaScript could easily be someone's first language with the state of web development and modern tooling. But how would they want to learn? I wanted to make sure they didn't make the wrong turns I did.

I've seen several JavaScript courses/tutorials go down this path starting with Node.js. To me, this unnecessarily muddies the waters. Node is wonderful, but why potentially confuse beginners with a server-side runtime, npm, and the weird history of JavaScript being created for the browser.

Not to mention, my first taste of JavaScript was while jQuery was still the one tool everyone used. And as we've generally moved away from using that library, I've seen JavaScript tutorials take on a different "flavor" of sorts; there is a lot of focus preparing someone straight for a web framework instead of the language beneath it all.

So...

Why not stick with "just vanilla JavaScript"? Y'know, K.I.S.S. method and all. Okay...what's required?

  • The browser. Yes...

But what about all of that ES6 (and other) fancy-ness?

Okay...so, no extras needed; good. That leaves...an HTML and a JS file?

  • Yes. And a text editor.
  • Which there are plenty...just like browsers

So, is it possible to teach and learn JavaScript's core functionality using only a browser and text editor? For now, seems like it is.

Still, why this first?§

In a word, fundamentals.

Node.js§

To me, starting to learn a language meant for the web, by installing a runtime, thinking about binaries, and (somewhat related) introducing npm, the CLI...it can get messy quickly for beginners. Not to mention, the server vs. client discussion and communication. Node is great, but for beginners...just wait.

React (and Angular, Vue, etc.)§

See previous point. Goodness, this is a love/hate relationship. Is it a library or a framework? Does it matter? What's all of this extra tooling? Didn't we have a collective "JS fatigue" discussion about these things? This isn't beginner friendly. Not to mention the ironic piece on Svelte's website, "compiles your code to...vanilla JS". Kinda seems to highlight we should understand that first :)

npm, Babel, transpilers, polyfills, etc.§

Briefly implied this point before, but JavaScript's larger ecosystem now requires (at least cursory) knowledge of these supporting technologies, too. All of these things are wonderful for their individual purposes, but again...IMO, just not beginner friendly to start here.

Covering the fundamentals first, will undoubtedly make each of these topics--not necessarily easier--but a better experience.

So, what?§

At least in part, my teaching style for this stuff is inspired by Zed Shaw's material. I won't say my series is "the hard way", but I do believe one of a programmer's best tools is, asking "Why?"...and maybe also understanding the underlying abstraction(s). So, I wanted the ultimate answer, for myself, on this knowing JavaScript problem. And why not help others and make a few videos along the way :)

Further, I work in AppSec now. It's this uncanny valley between Software Development and Security. Security teams are often enamored with team members with programming experience, while Development is repulsed by additional work from Security, but everyone knows they need to be following a Secure-SDLC. So, this is my attempt to answer some questions, and gain a deeper knowledge of what may soon be the most important language for AppSec.

Wanna see it? :D

View the codeCheck out the video series




References§