You've successfully subscribed to Jerry Zhang
Great! Next, complete checkout for full access to Jerry Zhang
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.


Web programming is not my specialty. I've always tried to stay away from JavaScript because whenever I work with it, I found it messy. However, the web is everywhere that it's so hard to avoid it. So I decided I might as well take the plunge.

My interest in JavaScript re-kindled when I learned that Ghost (the technology that powers this blog) runs on NodeJS, a server-side JavaScript runtime engine. Ghost performed so well in comparison to my formerly WordPress blog that I couldn't help but be impressed.

As I re-learned JavaScript, I realized that the asynchronous nature of JavaScript reflects not just the web browser, servers, or programming, but life in general as well. Life is basically asynchronous–you send a text or an email, and you wait for a response. Upon hearing a response back, you might do something.

Anyway, I can rant about JavaScript somewhere else.

This page is intended for me to document my JavaScript journey along with the lessons and pitfalls I've learned along the way. It is by no means complete–there's no way I'll be able to learn and master everything about JavaScript out there. There are simply too many frontend frameworks that evolve everyday.

For me, I'll focus mainly on MERN stack: MongoDB, Express, React, Node.

Confusing Stuff

When I first started learning modern JavaScript, I had a hard time with the following topics. I had to plow through endless Google searches, StackOverflow questions, and articles. I ended up finding official documentations most helpful along with Wikipedia.

Even if you are an experienced programmer but are coming to JavaScript for the first time, you're bound to get confused, just like I did.

Here's what I've learned:

  • ES5 vs ES6 vs ECMAScript 2015 vs All The Versions: Babel Transpilie-Down
  • var vs let vs const
  • Promise to be good! Or else face callback hell.
  • The Asynchronous World of JavaScript: Event Loops
  • The Paradigm of Event-Driven Programming
  • Difference between node, nvm, npm, npx
  • npm install local vs global (prefer npx if possible)
  • package.json vs package-lock.json
  • JavaScript vs TypeScript
  • Closures
  • Loose vs Strict Equality
  • A JavaScript Quiz? If you can get all these right, you're insane!

Building a MERN-Stack App From Scratch

  • Requirements, MVP, and Project Planning (ToDo App)
  • Setting up development environment: download MongoDB community version, use nvm to install node/npm and get access to create-react-app and express.
  • Stand up a bare bones app
  • Setting up version control (link to GIT portions)
  • Unit testing
  • Data Modeling
  • API Design
  • Web Client
  • Authentication/Authorization

(this goes beyond just javascript. but productionalizing stuff and having a CI/CD pipeline is important and practical too!)

  • Setup test/production environment and deployment (CI/CD) (totally optional) (buying a domain)
  • Containers and Docker?
  • Deploying to Digital Ocean or AWS


  • Metrics
  • Logging (ELK/EFK)