Course Overview
Welcome to the most comprehensive Node.js course on the internet!
In this course, we're going to do a deep dive into Node.js itself without cluttering our minds with other tools and NPM packages and truly master this powerful technology.
This course is heavily focused on computer science topics and fundamentals that are crucial to understand for becoming a great back-end engineer. You can only properly understand Node.js and unlock its full power if you understand these other computer science topics. So that's why we will also learn these other vital topics so that you can truly master Node.js and take your back-end engineering skills to a whole new level.
We will also use all these vital concepts that we'll learn in practice by building various exciting projects just using Node.js.
This is an intense course for people who want to get to the top of the field and get to a level of driving innovation and making an impact within the industry instead of just scratching the surface and following a few software trends and tools.
Each section of the course is like its own mini-course, and by completing each section, you'll learn some essential Node.js, computer science and back-end engineering concepts that will help you not just if you want to use Node.js but throughout your whole career as a software engineer. These things will stay with you for years and decades to come.
Let's do a quick walkthrough about what you will accomplish after completing some of the sections:
Understanding Buffers: Here, we will deeply understand buffers and how to work directly with binary data, which is essential for all the other sections.
Understanding File System: As a back-end developer, you'll work with files a lot, be it saving some data to disk, handling file uploads and many other examples, so it's essential to have a good understanding of them, which you'll gain after completing this section. We'll also learn how Node.js deals with files and master the "fs" module.
Understanding Streams: In this section, we're going to master Streams, which will allow us to develop highly-performant apps capable of handling terabytes of data with ease while having great memory usage. We'll build many mini-projects throughout the section, including an encryption-decryption app from scratch that could encrypt terabytes of data by directly modifying the binary data. This section lays the foundation for future sections where we'll utilize Streams heavily to create powerful and efficient network applications.
Understanding Networking: Node.js was primarily designed to create network applications, so it's of utmost importance that we gain a decent understanding of networking, which we will do after completing this section. Here's a list of items we'll learn in this section:
What exactly a network is
How the internet works
Mac Addresses
IPV4 & IPv6 Addresses
TCP
UDP
DNS
Fundamentals of deployment
We'll build 2 low-level apps using only Node.js, a chat and a file uploader app directly on top of TCP! And then, we'll deploy them to a Linux server in the most basic way without using unnecessary tools.
We'll see exactly what happens in our network card, every single 0s and 1s exchanged for a particular thing using Wireshark, and gain a much better understanding of networking and how most of the well-known protocols like HTTP, FTP, Email protocols, SSH, DNS and many others work. This section will broaden your horizons, and you'll realize that there are far more things that you can do with Node.js than just creating web servers.
Understanding HTTP: In this section, we'll utilize and combine all that we've learned from previous sections and finally deeply understand HTTP once and for all! We won't be learning how to use Express; instead, we will build something similar ourselves!
We'll start by understanding the most important HTTP concepts, such as connection types, client-server model, messages, requests, responses, HTTP Methods, status codes, mime types, necessary headers and so much more. And then emulate an HTTP protocol directly on top of TCP using the net module and see precisely every single 0s and 1s that get exchanged for an HTTP request and response interaction!
Once we understand the fundamentals of HTTP and the "http" module, we'll take things to the next level and start building our framework. And then, using our framework, we'll make a fully functional web application.
This section will take your web development skills to the next level. You'll have a much better understanding of how all these popular NPM packages, like Express, body-parser, Multer, cors, etc., that are built on top of the "http" module work. Well, you'll learn how to make them from scratch, just using them will not be that much of a problem!
Update February 2024 - New Module Is Out! Understanding Unix:
With over 15 hours of comprehensive new content, get ready to learn how you can harness the power of multiple technologies and programming languages together with Node.js to create extraordinarily powerful applications!
Unix, one of the most influential inventions ever in the software industry, is crucial for software engineers to understand. In this module, we'll delve deep into some of the key concepts such as Bash, Shells, IPC, Data Streams, Process Management, Clustering, even some C and much more.
We will also understand these Node.js modules:
Child Processes
Cluster
Process
Path
Console
OS
All these Unix concepts that you'll learn in this section instantly apply to many other programming languages. You'll gain a foundation that you can keep building on to create much higher-quality applications than ever before.
At the end of the section, we'll develop a video editing web application with Node.js without using other NPM packages. And this is just the beginning! You'll be able to do much more than this once you're done with the section and see many new possibilities that you never thought about before.
Update May 2024 - New Module Is Out! Understanding Compression:
In this section, we will explore the fascinating world of compression. Understanding compression is crucial for reducing the size of your data, and one important use case is to enhance the speed of your network applications. We'll dive into the Node.js Zlib module and see how it is possible to reduce the number of bits needed to store and transfer your data without losing any information!
Update July 2024 - New Module Is Out! Understanding Multi-Threading:
Get ready for the most advanced section of the course, where we're going to utilize the full power of Node.js to see how extreme we can get.
We'll learn what exactly threads are and how to utilize them to achieve performance boosts up to many times, depending on how many CPU cores we have. We'll learn when we should use multi-threading and when we shouldn't. We'll learn how to set up communication channels between our threads, both with message passing and shared memory. We'll explore the Node.js thread pool and even develop one ourselves from scratch. We'll see how multi-threading differs in Node.js from some of the other languages. We'll cover synchronization, race conditions, deadlocks, semaphores, mutual exclusion and more.
You'll learn how to keep the event loop light and not end up doing operations that will mysteriously block your main thread and cause your app to be way slower.
This section will take your Node.js skills to the next level by teaching you how to run things in parallel, handle multiple event loops, and understand the complications that arise with that.
Update March & August 2025 - New Module Is Out! Understanding Cryptography:
In this section you’ll learn about one of the most fascinating topics in computer science, without which the digital world and the internet would be in absolute chaos, and almost anyone could access everything you have online or stored digitally offline.
You’ll learn about some of the same cutting-edge cryptographic tools that governments and top companies rely on to protect their top-secret data and users online. You'll learn about AES, RSA, Diffie-Hellman, Elliptic-Curve Cryptography, HTTPS, TLS, Digital Signatures, Hashing algorithms, and more!
This section will give you a strong foundation to start your journey of learning about cybersecurity. Learning cryptography is extremely important in today’s world, not only to be able to create secure software and protect your business and users, but also to help protect yourself in the digital world.
Jump right in, and let’s explore the principles and techniques that are protecting our privacy, freedom of speech, and security in today’s massive digital world.
Sign up today, and let's master Node.js and take your back-end engineering skills to a whole new level!
FAQ
FAQ area empty
Course curriculum
-
Introdcution
Xem trước -
Understanding Binary Numbers
Xem trước -
Understanding Hexadecimal Numbers
Xem trước -
Using a Programming Calculator
Xem trước -
Understanding Character Encodings
Xem trước -
The Concept of Buffers
Xem trước -
Buffers in Action
Xem trước -
Allocating Huge Buffers
Xem trước -
Fastest Way of Allocating Buffers
Xem trước -
Reading the Node.js Docs
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
What Exactly Is a File?
Xem trước -
How Node.js Deals with Files
Xem trước -
Three Different Ways of Doing the Same Thing
Xem trước -
Watching the Command File for Changes
Xem trước -
Reading the Content of the Command File
Xem trước -
Cleaning Up the Code using EventEmitter
Xem trước -
Making Sense Out of the Read Data
Xem trước -
Implementing the Create File Command
Xem trước -
Defining the Rest of the Commands
Xem trước -
Solution - Implementing the deleteFile Function
Xem trước -
Solution - Implementing the renameFile Function
Xem trước -
Solution - Implementing the addToFile Function
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
Benchmarking Writing a Million Times to a File
Xem trước -
Using Streams Naively in Our Solution
Xem trước -
So What Exactly Are Streams?
Xem trước -
Understanding Different Types of Streams
Xem trước -
Fixing the Memory Issue in Our Program
Xem trước -
Reading Writable Streams Node.js Docs and Recap
Xem trước -
Readable Streams in Action
Xem trước -
Selectively Writing Our Data from the Readable Stream
Xem trước -
Understanding the Splitting Issue
Xem trước -
Implementing the Solution and Resolving the Splitting Issue
Xem trước -
Reading Node.js Docs and Recap
Xem trước -
Building Our Own Streaming Solution Using Buffers
Xem trước -
Understanding Piping
Xem trước -
Implementing Our Own Writable Stream
Xem trước -
Implementing Our Own Readable Stream
Xem trước -
Understanding Duplex and Transform Streams
Xem trước -
Creating an Encryption/Decryption Application
Xem trước -
Final Notes
Xem trước
-
Introduction
Xem trước -
Understanding MAC Addresses and Switches
Xem trước -
Understanding Routers and How the Internet Works
Xem trước -
Understanding Networking Layers
Xem trước -
Creating a Simple TCP Application in Node.js
Xem trước -
Understanding the Transport Layer - TCP/UDP
Xem trước -
A Networking Scenario in Action
Xem trước -
Understanding Port Numbers
Xem trước -
Creating a Chat Application PART 1
Xem trước -
Creating a Chat Application PART 2
Xem trước -
Improving the UI of our Chat App
Xem trước -
Identifying Users in the Chat App
Xem trước -
Notifying Everyone When Somebody Joins/Leaves the Chat
Xem trước -
Some Final Notes About the Chat App
Xem trước -
Deploying our Chat App to AWS
Xem trước -
Understanding IPv4 Addresses
Xem trước -
Understanding DNS
Xem trước -
Understanding IPv6 Addresses
Xem trước -
Creating an Uploader Application
Xem trước -
Taking Care of Backpressures in the Uploader App
Xem trước -
Getting the File Names Dynamically in the Uploader App
Xem trước -
Displaying the Upload Progress in Our Uploader App
Xem trước -
Deploying our Uploader App
Xem trước -
Understanding UDP and the Dgram Module
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
The Idea of HTTP
Xem trước -
Creating a Simple HTTP Server in Node
Xem trước -
Understanding HTTP Messages, Requests & Responses
Xem trước -
Understanding Connection Types
Xem trước -
Building our Client and Sending a Request
Xem trước -
Sending a Response to the Client
Xem trước -
Learning Postman & Testing Our Server with It
Xem trước -
Reading Some Docs
Xem trước -
Sending an HTTP Request Directly on Top of TCP! PART 1
Xem trước -
Sending an HTTP Request Directly on Top of TCP! PART 2
Xem trước -
Emulating our HTTP Server Using the Net Module
Xem trước -
Understanding Media Types (MIME Types)
Xem trước -
Understanding HTTP Methods
Xem trước -
Understanding HTTP status codes
Xem trước -
Creating a Simple Web Server in Node
Xem trước -
Serving a CSS and JavaScript File
Xem trước -
Adding Some JSON Routes
Xem trước -
Adding a File Upload Route
Xem trước -
Creating our Own Little Mini-Express Framework!
Xem trước -
Making our Framework More Robust
Xem trước -
Getting Ready for Our Next Project
Xem trước -
Using Our Framework to Create a Web App
Xem trước -
Adding the Login Route
Xem trước -
Understanding HTTP Proxies
Xem trước -
HTTP is Stateless
Xem trước -
Understanding Cookies
Xem trước -
Recognizing Users for Future Requests after Logging In
Xem trước -
Sending the User’s Info in Profile
Xem trước -
Enhancing Our Framework with Middleware Support
Xem trước -
Defining the Middleware Functions
Xem trước -
Implementing the Create Post, Update User, and Logout Routes
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
What Is Unix?
Xem trước -
Why Should We Care About Unix?
Xem trước -
Setting Up Unix on Windows (WSL) - For Windows Users Only
Xem trước -
A First Look at the Child Process Module
Xem trước -
Understanding Unix Shells
Xem trước -
Demystifying Bash Execution Order: Aliases, Functions, Built-ins, and Path
Xem trước -
A Few Notes about Unix File Permissions
Xem trước -
Sourcing in Bash
Xem trước -
Understanding Shell Config Files
Xem trước -
What Exactly is a Child Process?
Xem trước -
Understanding Environment Variables
Xem trước -
Understanding Unix File System, Paths & CWD
Xem trước -
Understanding Stdout, Stdin, and Stderr
Xem trước -
Understanding Pipes and Output Redirection in Bash
Xem trước -
Building a Command Line Utility with Node.js
Xem trước -
Building Massive Communication App - Node Part
Xem trước -
Intro to the C Part
Xem trước -
Learning C - Our First App
Xem trước -
Learning C - Static Types & Our Memory
Xem trước -
Learning C - Memory Allocation
Xem trước -
Learning C - Reading the Arguments
Xem trước -
Building Massive Communication App - C Part
Xem trước -
Only Watch if You Skipped the C Part
Xem trước -
Another Way of IPC - Unix Domain Sockets
Xem trước -
Understanding Clustering
Xem trước -
Clustering in Action
Xem trước -
Installing & Building FFmpeg from Source Code
Xem trước -
Video Editor App - Setup & Walkthrough
Xem trước -
Adding the Upload Route
Xem trước -
Quick Intro to FFmpeg and Video Files
Xem trước -
Making a Thumbnail and Getting the Dimensions After an Upload
Xem trước -
Returning the List of Uploaded Videos
Xem trước -
Adding a Route for Returning the Video Assets
Xem trước -
Adding a Route to Extract the Audio of a Video File
Xem trước -
Adding the Resize Route
Xem trước -
Scheduling the Resizes
Xem trước -
More on Queue-based Processing
Xem trước -
Resuming Scheduled Resize Operations Upon App Restart
Xem trước -
Running Our Application in Cluster Mode
Xem trước -
Refactor from Cpeak to Express in Less than 20 Minutes!
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
Guide for Skilled Multi-Threaded Developers
Xem trước -
What Exactly Is a Thread?
Xem trước -
How to Monitor Threads on Your Operating System
Xem trước -
Understanding CPU Usage
Xem trước -
Spawning Threads
Xem trước -
Thread Communication through Message-Passing
Xem trước -
Introduction to Our CPU-Intensive Program
Xem trước -
Enhancing Performance with Multi-Threading
Xem trước -
Handling CPU-Intensive Operations in an HTTP Server
Xem trước -
IsMainThread
Xem trước -
CPU-Intensive vs. I/O-Intensive
Xem trước -
Examining a Crypto-Heavy Multi-Threaded App
Xem trước -
Node.js Thread Pool
Xem trước -
Developing a Thread Pool From Scratch
Xem trước -
Event Loop Utilization and Main Thread
Xem trước -
Keep the Main Thread Light with Batch Processing
Xem trước -
Effortlessly Expanding Our Thread Pool Capabilities
Xem trước -
Don’t Block the Worker Pool!
Xem trước -
Handling Billions of HTTP Requests
Xem trước -
Communication Through Shared Memory
Xem trước -
ArrayBuffers, SharedArrayBuffers, and TypedArrays
Xem trước -
Race Conditions
Xem trước -
Understanding Atomic Operations
Xem trước -
Understanding Mutual Exclusion
Xem trước -
Deadlocks
Xem trước -
Enhancing Performance Through Shared Memory
Xem trước -
Native Multi-Threading with C/C++ Addons
Xem trước -
A Deeper Look at the Event Loop PART 1
Xem trước -
A Deeper Look at the Event Loop PART 2
Xem trước -
Outro
Xem trước
-
Introduction
Xem trước -
Introduction to Symmetric Encryption
Xem trước -
The Unbreakable Encryption - OTP From Scratch
Xem trước -
How AES Encryption Works
Xem trước -
Understanding AES Modes
Xem trước -
What It Takes to Break AES
Xem trước -
What About Brute-Forcing OTP?
Xem trước -
History of AES
Xem trước -
Understanding Hashing
Xem trước -
SHA-256 From Scratch
Xem trước -
What It Takes to Break SHA-256
Xem trước -
Message Authentication Codes
Xem trước -
Understanding Key Derivation Functions
Xem trước -
Building a File Encryption Application
Xem trước -
Introduction to Asymmetric Cryptography
Xem trước -
A Note about OpenSSL & Setup
Xem trước -
RSA in Action
Xem trước -
Understanding RSA
Xem trước -
Implementing RSA From Scratch
Xem trước -
Understanding Digital Signatures
Xem trước -
Digital Certificates
Xem trước -
Manually Verifying an HTTPS Certificate
Xem trước -
Setting Up HTTPS from Scratch
Xem trước -
Understanding TLS
Xem trước -
Diffie-Hellman and Elliptic Curve Key Exchange
Xem trước -
Elliptic Curve Digital Signatures
Xem trước -
RSA, DH and EC Security
Xem trước -
Outro
Xem trước
Requirment
-
At least one year of programming experience
-
A good knowledge of JavaScript
-
While not mandatory, a little bit of experience with ExpressJS and HTML could be helpful
-
Not a strict requirement, but for the Multi-Threading section, it is recommended to be on a machine with a CPU that has at least 4 cores
-
For the Cryptography section, some basic discrete math is needed; more info on the section’s introduction video
Outcomes
-
Learn some of the vital concepts of back-end engineering
-
Get to a level capable of easily learning various NodeJS frameworks and libraries
-
Truly and deeply understand what exactly NodeJS is and see its full potentials far beyond just creating web servers
-
Understand and master NodeJS as it is without using any other NPM packages
-
Understand some of the most important operating systems concepts that every back-end developer needs to understand
-
Be able to easily learn and understand the NodeJS documentation
-
Learn how to directly deal with binary data and manipulate the 0s and 1s however you want
-
Learn the most important Networking concepts and understand where NodeJS exactly comes into play
-
Learn exactly what happens when you deploy your back-end applications rather than focusing on a few tools
-
Learn how to create low-level network applications directly on top of TCP or UDP and develop your own protocols
-
Deeply understand what HTTP really is and how it works
-
Get a deep understanding of the File System
-
Master Streams to develop highly performant and memory-efficient applications capable of dealing with terabytes of data with ease
-
Learn how to incorporate compression to enhance the speed of your network applications
-
Understand Unix and open up a world of new possibilities
-
Understand the EventEmitter object
-
Master Multi-Threading in NodeJS & achieve significant performance improvements
-
Learn about some of the same cutting-edge cryptographic tools that governments and top companies rely on to protect their top-secret data and users online
3 Students
3 Courses
0 review