Software Design by Example Summary


I wrote 22 posts this month to summarize the chapters in Software Design by Example and to ask who’d be interested in taking an online class based on its Python successor. The list below links to each post in the series, and to the terms defined in each of the book’s content chapters.

My next goal is to prepare an hour-long talk summarizing what I learned from writing this book. It will cover some of the same material as “Software Design for Data Scientists” and this paper, but will focus more on how to teach design and what junior programmers are ready to learn. If you or your team would like to listen to me ramble, I’d be very happy to deliver it online in exchange for a small donation to a mutually-agreed charity—please reach out if you’re interested.

  1. Introduction

  2. Systems Programming: anonymous function, asynchronous, Boolean, callback function, cognitive load, command-line argument, console, current working directory, destructuring assignment, edge case, filename extension, filesystem, filter, globbing, idiomatic, log message, path (in filesystem), protocol, scope, single-threaded, string interpolation.

  3. Asynchronous Programming: call stack, character encoding, class, constructor, event loop, exception, fluent interface, method, method chaining, non-blocking execution, promise, promisification, protocol, UTF-8.

  4. Unit Testing: absolute error, actual result (of test), assertion, caching, defensive programming, design pattern, dynamic loading, error (in a test), exception handler, expected result (of test), exploratory programming, fail (a test), fixture, global variable, introspection, lifecycle, pass (a test), relative error, side effect, Singleton pattern, test runner, test subject, throw (exception), unit test.

  5. File Backup: Application Programming Interface, collision, comma-separated values, Coordinated Universal Time, cryptographic hash function, data migration, handler, hash code, hash function, JavaScript Object Notation, mock object, pipe, race condition, SHA-1 hash, stream, streaming API, Time of check/time of use, timestamp, version control system.

  6. Data Tables: character encoding, column-major storage, data frame, fixed-width (of strings), fixed-width (of strings), garbage collection, heterogeneous, homogeneous, immutable, index (in a database), JavaScript Object Notation, join, pad (a string), row-major storage, sparse matrix, SQL, tagged data, test harness.

  7. Pattern Matching: base class, Chain of Responsibility pattern, child (in a tree), coupling, depth-first, derived class, Document Object Model, eager matching, eager matching, greedy algorithm, lazy matching, node, Open-Closed Principle, polymorphism, query selector, regular expression, scope creep, test-driven development.

  8. Parsing Expressions: finite state machine, literal, parser, precedence, token, Turing Machine, well formed, YAML.

  9. Page Templates: bare object, dynamic scoping, environment, lexical scoping, stack frame, static site generator, Visitor pattern.

  10. Build Manager: automatic variable, build manager, build recipe, build rule, build target, compiled language, cycle (in a graph), dependency, directed acyclic graph, driver, interpreted language, link (a program), pattern rule, runnable documentation, stale (in build), Template Method pattern, topological order.

  11. Layout Engine: attribute, cache, confirmation bias, design by contract, easy mode, layout engine, Liskov Substitution Principle, query selector, signature, z-buffering.

  12. File Interpolator: header file, literate programming, loader, sandbox, search path, shell variable.

  13. Module Loader: absolute path, alias, circular dependency, closure, directed graph, encapsulate, immediately-invoked function expression (IIFE), inner function, Least Recently Used cache, namespace, plugin architecture.

  14. Style Checker: abstract syntax tree, Adapter pattern, column-major storage, dynamic lookup, generator function, intrinsic complexity, Iterator pattern, linter, Markdown, row-major storage, walk (a tree).

  15. Code Generator: byte code, code coverage (in testing), compiler, Decorator pattern, macro, nested function, two hard problems in computer science.

  16. Documentation Generator: accumulator, block comment, deprecation, doc comment, line comment, slug.

  17. Module Bundler: entry point, module bundler, transitive closure.

  18. Package Manager: backward-compatible, combinatorial explosion, heuristic, manifest, patch, prune, SAT solver, scoring function, seed, semantic versioning.

  19. Virtual Machine: Application Binary Interface, assembler, assembly code, bitwise operation, disassembler, instruction pointer, instruction set, label (address in memory), op code, register, virtual machine, word (of memory).

  20. Debugger: breakpoint, source map, tab completion, watchpoint.

  21. Conclusion

  22. Would You Take This Class?