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