Grokking Simplicity, Video Edition

Video description

In Video Editions the narrator reads the book while the content, figures, code listings, diagrams, and text appear on the screen. Like an audiobook that you can also watch as a video.

"Java, JavaScript, C++, Python, and so many others are not purely functional languages, but have adopted ideas from functional programming that make them much easier to use. These simple ideas can be used in any programming language. This book shows you how to do that. It’s an easy read, filled with practical examples and sidebars that explain the technical terms. I was drawn in, really enjoyed it, and learned a couple of new ideas that I am eager to apply in my own code. I hope you enjoy it, too!"
From the Foreword by Guy Steele

"Functional programming does not transfer peacefully from academia to business software. We aren’t starting from scratch. We depend on runtimes and libraries outside our control. Our software interacts with many other systems. It is a long way from FP-land to legacy business software. Eric has undertaken this journey for us. He delved into functional programming, found its most helpful essences, and brought them to us where we are."
From the Foreword by Jessica Kerr


Distributed across servers, difficult to test, and resistant to modification—modern software is complex. Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development. It introduces a unique approach to functional programming that explains why certain features of software are prone to complexity, and teaches you the functional techniques you can use to simplify these systems so that they’re easier to test and debug.

about the technology

Developers rightly fear the unintended complexity that infects most code. This book shows you how to write software that keeps complexity close to its inherent minimum. As you write software you should distinguish between code that alters your system’s state, and code that does not. Once you learn to make that distinction, you can refactor much of your state-altering “actions” into stateless “calculations.” Your software will be simpler.

about the book

The book also teaches you to solve the complex timing bugs that inevitably creep into asynchronous and multithreaded code. In advanced sections of the book you learn how composable abstractions help avoid repeating code and open up new levels of expressivity.

what's inside

  • Patterns for simpler code
  • Powerful time modeling approaches to simplify asynchronous code
  • How higher-order functions can make code reusable and composable

about the audience

For intermediate and advanced developers building complex software. Exercises, illustrations, self-assessments, and hands-on examples lock in each new idea.

about the author

Eric Normand is an expert software developer who has been an influential teacher of functional programming since 2007.

This book is a must-read for taming complex software. One of the most engaging titles in years.
Michael Aydinbas, EXXETAAG

A great resource for learning functional thinking and the practical programming techniques derived from it. I can recommend to my colleagues with confidence.
Joel Luukka, Geniem

An indispensable guide to identifying and conquering complexity.
Bryan Miller, Petrolitix

NARRATED BY MARK THOMAS

Table of contents

  1. Chapter 1. Welcome to Grokking Simplicity
  2. Chapter 1. Functional programmers distinguish inert data from code that does work
  3. Chapter 1. This book is language agnostic
  4. Chapter 2. Functional thinking in action
  5. Chapter 2. Timelines visualize distributed systems
  6. Part 1
  7. Chapter 3. Distinguishing actions, calculations, and data
  8. Chapter 3. Lessons from our shopping process
  9. Chapter 3. Applying functional thinking to new code
  10. Chapter 3. Implementing the coupon email process
  11. Chapter 3. Applying functional thinking to existing code
  12. Chapter 4. Extracting calculations from actions
  13. Chapter 4. Extracting a calculation from an action
  14. Chapter 4. Extracting another calculation from an action
  15. Chapter 5. Improving the design of actions
  16. Chapter 5. Categorizing our calculations
  17. Chapter 6. Staying immutable in a mutable language
  18. Chapter 6. Converting a write to a read with copy-on-write
  19. Chapter 6. What to do if an operation is a read and a write
  20. Chapter 6. Applications have state that changes over time
  21. Chapter 6. Converting nested writes to reads
  22. Chapter 7. Staying immutable with untrusted code
  23. Chapter 7. Wrapping untrusted code
  24. Chapter 7. Implementing deep copy in JavaScript is difficult
  25. Chapter 8. Stratified design: Part 1
  26. Chapter 8. Pattern 1: Straightforward implementations, Part 1
  27. Chapter 8. Pattern 1: Straightforward implementations, Part 2
  28. Chapter 8. Three different zoom levels
  29. Chapter 8. Three different zoom levels - Extracting the for loop
  30. Chapter 9. Stratified design: Part 2
  31. Chapter 9. When to use (and when not to use!) abstraction barriers
  32. Chapter 9. Pattern 3: Minimal interface
  33. Chapter 9. Pattern 4: Comfortable layers
  34. Chapter 9. Code at the top of the graph is easier to change
  35. Part 2
  36. Chapter 10. First-class functions: Part 1
  37. Chapter 10. Refactoring: Express implicit argument
  38. Chapter 10. We will use a lot of objects and arrays
  39. Chapter 10. For loop example: Eating and cleaning up
  40. Chapter 10. Refactoring: Replace body with callback
  41. Chapter 10. Why are we wrapping the code in a function?
  42. Chapter 11. First-class functions: Part 2
  43. Chapter 11. Returning functions from functions
  44. Chapter 12. Functional iteration
  45. Chapter 12. Functional tool: map()
  46. Chapter 12. Functional tool: filter()
  47. Chapter 12. Example: Concatenating strings
  48. Chapter 13. Chaining functional tools
  49. Chapter 13. Clarifying chains, method 1: Name the steps
  50. Chapter 13. Tip 1: Make data
  51. Chapter 13. Debugging tips for chaining
  52. Chapter 13. reduce() for building values
  53. Chapter 14. Functional tools for nested data
  54. Chapter 14. Visualizing values in objects
  55. Chapter 14. Writing incrementSizeByName() four ways
  56. Chapter 14. The anatomy of safe recursion
  57. Chapter 15. Isolating timelines
  58. Chapter 15. Different languages, different threading models
  59. Chapter 15. Principles of working with timelines
  60. Chapter 15. Simplifying the timeline
  61. Chapter 15. Summary: Drawing timeline diagrams
  62. Chapter 15. Making our code more reusable
  63. Chapter 16. Sharing resources between timelines
  64. Chapter 16. Building a queue in JavaScript
  65. Chapter 16. Principle: Use real-world sharing as inspiration
  66. Chapter 16. Analyzing the timeline
  67. Chapter 17. Coordinating timelines
  68. Chapter 17. Simplify the diagram: Step 3
  69. Chapter 17. Using Cut() in our code
  70. Chapter 17. A primitive to call something just once
  71. Chapter 18. Reactive and onion architectures
  72. Chapter 18. FormulaCells calculate derived values
  73. Chapter 18. Treat series of steps as pipelines
  74. Chapter 18. Review: Stratified design
  75. Chapter 18. Analyze readability and awkwardness
  76. Chapter 19. The functional journey ahead
  77. Chapter 19. Parallel tracks to mastery
  78. Chapter 19. Production: Eliminate a bug today
  79. Chapter 19. Functional languages by learning opportunity

Product information

  • Title: Grokking Simplicity, Video Edition
  • Author(s): Eric Normand
  • Release date: June 2021
  • Publisher(s): Manning Publications
  • ISBN: None