Skip to content

Instantly share code, notes, and snippets.

@lsaville
Last active March 24, 2020 02:46
Show Gist options
  • Save lsaville/b286f10b5455fd1889bb2ff4b852305a to your computer and use it in GitHub Desktop.
Save lsaville/b286f10b5455fd1889bb2ff4b852305a to your computer and use it in GitHub Desktop.

Destroy All Software Screencasts

Testing

This season covers testing tools and how to write good tests. We switch between those topics frequently: first build a testing tool (like a test runner), then use it to talk about how to write good tests, then repeat!

  • 1 Test Runner From Scratch: An RSpec-style test runner - 10 min
  • 2 Assertions Large and Small: Asserting is surprisingly subtle. - 12 min
  • 3 Implementing Assertion Syntax: RSpec-style expect and raise_error. - 12 min
  • 4 A Motivating Example Test: A test to guide our runner design. - 11 min
  • 5 Implementing Let: A major refactor lets us write "let". - 11 min
  • 6 Implementing Before: The last piece of our motivating test. - 3 min
  • 7 Finding Missing Tests: A general way to expand test suites. - 16 min
  • 8 Test Data Factories: A way to write cleaner tests. - 13 min

Web Framework From Scratch

We give the "from scratch" treatment to an entire web framework. It will do HTTP request routing, template rendering, database access, form validation, and more. Each piece of the design will be driven by the needs of an example application.

  • 1 Routing Simple Requests: A simple router for static URLs. - 11 min
  • 2 Variables in Routes: A complete web request router. - 10 min
  • 3 Three Router Tweaks: Changes to ease future dev. Optional. - 3 min
  • 4 First Attempt at Database Library: We discover SQL injection attacks! - 13 min
  • 5 Database Library Tests: Tests drive our SQL injection bug fix. - 10 min
  • 6 Better Database Library API: We make queries easier and safer. - 18 min
  • 7 HTML Template Language Parser: A line-oriented template language. - 15 min
  • 8 HTML Template Rendering: The final piece of our web framework. - 12 min

From Scratch

We rely on thousands of tools to do our work: compilers, editors, audio and video codecs, data compression formats, and so on. Many of these tools are clever or well-designed or both. By examining how they work, we can see the design insights behind them while simultaneously making them less mysterious.

  • 1 A Compiler From Scratch: A simple compiler to JavaScript. - 38 min
  • 2 Data Compressor From Scratch: Huffman-coding-based compressor. - 39 min
  • 3 Text Editor From Scratch: A basic text editor including undo. - 33 min
  • 4 Shell From Scratch: A Unix shell with pipelines. - 35 min
  • 5 HTTP Server From Scratch: Serving static and dynamic content. - 28 min
  • 6 Malloc From Scratch: A simple memory allocator. - 31 min

Computation

All computing systems follow definite rules, both in theory and in practice, in the realms of both computer science and everyday programming. In an hour and a half of dense screencasts, we get a high-level view of major computational topics demonstrated using code, not mathematical notation. 1

  • 1 Introduction to Computation: A survey of the topics we'll cover. - 5 min
  • 2 Computing by Changing: Basics of Turing machines. - 13 min
  • 3 Power of Turing Machines: Numbers and hints of data structures. - 11 min
  • 4 Computing by Constructing: First steps with the lambda calculus. - 10 min
  • 5 Power of Lambda Calculus: Building numbers and booleans. - 12 min
  • 6 The Limits of Computation: Halting problem and undecidability. - 13 min
  • 7 Recognizing Simple Languages: Regular languages and grammars. - 17 min
  • 8 Recognizing Programming Languages: Context-free languages. - 14 min
  • 9 The Most Complex Languages: Context-sensitivity and beyond. - 9 min
  • 10 Final Notes on Computation: Metalanguages and history. - 11 min

Classic Season 5

  • 1 Collapsing Services Into Values: Rails - 11 min
  • 2 Splitting Active Record Models: Active Record - 11 min
  • 3 Removing a Rubinius Feature: Language Features - 12 min
  • 4 Python vs. Ruby Objects: Python - 9 min
  • 5 Where Correctness Is Enforced: Rails - 10 min
  • 6 Separating Arrangement and Work: Coupling - 11 min
  • 7 Primitive Obsession: Design & OO - 16 min
  • 8 Isolating by Separating Value: Test Isolation - 11 min
  • 9 Imperative to OO to Functional: Programming Paradigms - 13 min
  • 10 Debugging With Tests: TDD - 10 min
  • 11 Test Cases vs. Examples: Types of Tests - 14 min
  • 12 A Bit of C: Unix - 11 min
  • 13 Analyzing Context Switches: Unix - 12 min
  • 14 Actor Syntax From Scratch: Language Features - 15 min
  • 15 Running Tests Asynchronously: Unix - 8 min
  • 16 Test Recommendations: TDD - 16 min
  • 17 When Rails Is Right: Rails - 11 min
  • 18 A Day in The Life: Junk Drawer - 13 min

Classic Season 4

  • 1 Sucks/Rocks 1: The Rails App: Building An App From Scratch - 9 min
  • 2 Sucks/Rocks 2: Computing Scores: Building An App From Scratch - 12 min
  • 3 Sucks/Rocks 3: The Search Engine: Building An App From Scratch - 11 min
  • 4 Sucks/Rocks 4: Caching: Building An App From Scratch - 14 min
  • 5 Sucks/Rocks 5: a Bug and a Model: Building An App From Scratch - 13 min
  • 6 Sucks/Rocks 6: a Controller: Building An App From Scratch - 11 min
  • 7 Sucks/Rocks 7: More Cucumber: Building An App From Scratch - 12 min
  • 8 Sucks/Rocks 8: The Whole Design: Building An App From Scratch - 11 min
  • 9 Pretty Git Logs: Git - 10 min
  • 10 Mutation in Tell Don't Ask: Design & OO - 9 min
  • 11 A Magical Isolation Story: Test Isolation - 10 min
  • 12 Ugly Tests Trigger Refactoring: TDD - 11 min
  • 13 The Mock Obsession Problem: Stubs & Mocks - 12 min
  • 14 Test Driving Shell Scripts: The Unix Shell - 11 min
  • 15 Conditional Whac-A-Mole: Design & OO - 13 min
  • 16 Time to First Request: Unix - 12 min
  • 17 Test Isolation Without Mocks: Test Isolation - 13 min
  • 18 Functional Core, Imperative Shell: Programming Paradigms - 13 min

Classic Season 3

  • 1 What Goes in Active Records: Active Record - 13 min
  • 2 What Goes in Active Records Part 2: Active Record - 10 min
  • 3 Outside-in TDD: Stubs vs. Stash: Stubs & Mocks - 13 min
  • 4 Web Apps: When to Test in Isolation: Test Isolation - 10 min
  • 5 Untested Code Part 1: Introduction: Untested Code - 11 min
  • 6 Untested Code Part 2: Adding Tests: Untested Code - 19 min
  • 7 Untested Code Part 3: Refactoring 1: Untested Code - 16 min
  • 8 Untested Code Part 4: Refactoring 2: Untested Code - 18 min
  • 9 Emacs, Chainsaw of Chainsaws: Editors - 11 min
  • 10 Stubbing Unloaded Dependencies: Stubs & Mocks - 11 min
  • 11 Brittle and Fragile Tests: TDD - 10 min
  • 12 Repository Statistics in Raptor: Git - 11 min
  • 13 Generating Coupons With Bash: The Unix Shell - 12 min
  • 14 Shorter Class Syntax: Language Features - 8 min
  • 15 When to Generalize in TDD: TDD - 11 min
  • 16 The .vimrc: Editors - 11 min
  • 17 Pushing Complexity Down: Design & OO - 10 min
  • 18 Three Test Shapes: Types of Tests - 11 min

Classic Season 2

  • 1 Composing a Unix Command Line: Unix - 9 min
  • 2 Tar, Fork, and the Tar Pipe: Unix - 12 min
  • 3 Coupling and Abstraction: Coupling - 10 min
  • 4 Test Isolation and Refactoring: Test Isolation - 13 min
  • 5 Spiking and Continuous Spiking: Untested Code - 10 min
  • 6 Notes on Stubbing: Stubs & Mocks - 9 min
  • 7 Controller Refactoring Demo Part 1: Rails Controllers - 10 min
  • 8 Controller Refactoring Demo Part 2: Rails Controllers - 16 min
  • 9 Extracting From Controller to Model: Rails Controllers - 13 min
  • 10 Acceptance Tests: Types of Tests - 11 min
  • 11 Extracting From Models: Rails - 15 min
  • 12 Some Vim Tips: Editors - 14 min
  • 13 History Spelunking With Unix: Git - 12 min
  • 14 Performance of Different Test Sizes: Types of Tests - 11 min
  • 15 Simple Bash Script Testing: The Unix Shell - 12 min
  • 16 Splitting Into Fine Grained Tests: TDD - 9 min
  • 17 Which Tests to Write: Types of Tests - 10 min
  • 18 TDDing Spikes Away With Rebase: Untested Code - 11 min

Classic Season 1

  • 1 Statistics Over Git Repositories: Git - 14 min
  • 2 How and Why to Avoid Nil: Language Features - 14 min
  • 3 Building RSpec From Scratch: TDD - 15 min
  • 4 Source Code History Integrity: Git - 15 min
  • 5 Extracting Domain Objects: Coupling - 19 min
  • 6 Conflicting Principles: Design & OO - 12 min
  • 7 Growing a Test Suite: TDD - 14 min
  • 8 Processes and Jobs: Unix - 15 min
  • 9 Exceptions and Control Flow: Language Features - 11 min
  • 10 Fast Tests With and Without Rails: Rails - 16 min
  • 11 Git Workflow: Git - 12 min
  • 12 Packaging in Ruby and Python: Python - 16 min
  • 13 File Navigation in Vim: Editors - 10 min
  • 14 Extracting Objects in Django: Python - 15 min
  • 15 Quick and Easy Perf Tests: Types of Tests - 13 min
  • 16 A Refactoring Story: Design & OO - 13 min
  • 17 Wrapping Third Party APIs: Rails - 17 min
  • 18 Clarity via Isolated Tests: Test Isolation - 10 min
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment