Software Tools in JavaScript

Software Tools in JavaScript is now available on LeanPub.

The best way to learn design is to study examples Schon1984,Petre2016, and some of the best examples of software design come from the tools programmers use in their own work. In these lessons we build small versions of things like file backup systems, testing frameworks, regular expression matchers, and browser layout engines both to demystify them and to give some insights into how experienced programmers think. We draw inspiration from Brown2011,Brown2012,Brown2016, Mary Rose Cook's Gitlet, and the books that introduced the Unix philosophy to an entire generation of programmers Kernighan1979,Kernighan1981,Kernighan1983,Kernighan1988.

All of the written material in this project can be freely reused under the terms of the Creative Commons - Attribution license, while all of the software is made available under the terms of the Hippocratic License; see for details.

All proceeds from this project will go to support the Red Door Family Shelter.

cover image

Systems ProgrammingUsing callbacks to manipulate files and directories
Asynchronous ProgrammingUsing promises to manage delayed computation
Unit TestingTesting software piece by piece
File BackupArchiving files with directory structure
Data TablesStoring and manipulating tables efficiently
Pattern MatchingUsing patterns to find things in data
Parsing ExpressionsTurning text into code
Page TemplatesGenerating HTML pages from templates
Build ManagerUpdating files that depend on other files
Layout EngineFiguring out what goes where in a web page
File InterpolatorManaging source files that have been broken into pieces
Module LoaderLoading source files as modules
Style CheckerChecking that code conforms to style guidelines
Code GeneratorModifying code to track coverage and execution times
Documentation GeneratorGenerating documentation from comments embedded in code
Module BundlerTurning many files into one
Package ManagerGetting and installing packages
Virtual MachineAssembling and running low-level code
DebuggerRunning programs under the control of a breakpointing debugger