Course Outline

JavaScript/TypeScript (2 days) 

Getting Started

  • ECMAScript and JavaScript/TypeScript Introduction
  • JavaScript Dynamic and Loose Typing
  • TypeScript Static and Strong Typing
  • TypeScript Generic Types
  • Variable Declarations (var, const & let)
  • Primitive Types (number, string, Boolean, symbol, bigint, undefined, null)
  • JavaScript Memory Structure

Functions, Arrays & Objects

  • Function Declarations and Expressions
  • Arrow Syntax
  • Value of "this" and function types (call-site this and lexical this)
  • Function Arguments and Parameters
  • Spread and Rest Operators and Functions
  • Functions as Objects
  • Arrays and Array Literal Syntax
  • Array API
  • Immutable Operations with Arrays
  • Array Destructuring and Spread/Rest Operators
  • Objects and Object Literal Syntax
  • Shorthand Properties
  • Property Descriptors including Getter/Setter properties
  • Object API
  • Object Destructuring and Spread/Rest Operators
  • Object Extending, Sealing and Freezing

Classes & Prototype Inheritance

  • What is Prototype Inheritance?
  • Prototype Inheritance contrasted against Classical Inheritance
  • Exploring Getting and Setting properties on a prototype chain
  • Enumerating Properties and its Relationship to Prototype Inheritance
  • Using Classes to Build Objects and Setup Prototype Inheritance
  • Historical comparison to Function Constructors
  • Static Properties

Asynchronous Programming

  • Role of JavaScript in a Web Browser and Node.js
  • What is Non-Blocking, Asynchronous Programming
  • Event Loop and JavaScript Tasks
  • Understanding Closures
  • Role of Closures in Asynchronous Programming
  • Using Callbacks and Problems with Callbacks
  • Using Promises
  • Overview of XHR and Fetch APIs
  • Making AJAX Calls with JavaScript
  • Async/Await API

Modules

  • Overview of JavaScript Module Systems
  • Compare/Contrast AMD, CommonJS and ES2015 Modules
  • Static Nature of ES2015 Modules and Tree Shaking
  • Using ParcelJS to Explore ES2015 Modules
  • Import/Export Syntax
  • Named Imports vs. Default Imports

 

Client-Side Programming (2 days)

Introduction

  • Client-Side Libraries and Frameworks
  • What is jQuery, React, Angular, Vue?
  • What problems do libraries and frameworks solve?
  • Development Ecosystem
  • Component-Driven Development
  • TypeScript vs. JavaScript Development

React Development Tools

  • Create React App project generator
  • React Developer Tools
  • Running and Debugging a React Application
  • Role of Node.js
  • Purpose of React and ReactDOM

React Components

  • What are Components?
  • Create Element and JSX
  • Benefits of JSX
  • Fragments
  • JavaScript Arrow Functions
  • ES2015 Modules
  • JSX and Expressions
  • Displaying Collections of Data
  • JavaScript Array Maps and React Keys
  • Passing Data with Props
  • State Hook

React Unit Testing

  • JavaScript Unit Testing
  • Jest Framework
  • TDD and BDD Testing Approaches
  • Organizing Tests and Suites
  • Assertions with Expect
  • Spies and Mocks
  • Snapshot Testing
  • Mock DOM Testing
  • Testing React Components with Testing Tools

 

Server-Side Programming (1 day)

Node Projects

  • The Node Package Manager
  • Creating a project
  • The package.json configuration file
  • NPM, Yarn & Lock Files
  • Global vs. Local package installation
  • Semantic Versioning
  • Package Upgrading
  • Configuring Scripts with NPM

CommonJS and ES2015 Modules

  • Modularization
  • The CommonJS specifications
  • Defining modules with exports
  • Modules are singletons
  • Creating a package
  • Module scope and construction
  • Objects and Classes

File System

  • Synchronous vs. Asynchronous I/O
  • Path and directory operations
  • __dirname and __filename
  • Asynchronous file reads and writes

HTTP & Express

  • The HTTP protocol
  • Building an HTTP server
  • Rendering a response
  • Using the Express Framework
  • Define Routes and Building Routers
  • Reading POST data
  • Adding middleware
  • Build a REST Server

Data Sources (minimal coverage to show how Node.js interacts with a database, not coverage on the database itself)

  • How Node.js connects to databases
  • Connecting Node.js to SQL Server (SQL Express, Docker, Azure)
  • Performing Database Operations

Deploying Applications (general information)

  • Patterns for Deploying Node.js Applications
  • Installing NPM Packages for Production