Grokking Simplicity

  • 12h 6m 8s
  • Eric Normand
  • Manning Publications
  • 2021

Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development.


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 audiobook 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 audiobook:

The audiobook also teaches you to solve the complex timing bugs that inevitably creep into asynchronous and multithreaded code. In ad­vanced sections of the audiobook 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.

In this Audiobook

  • Chapter 1 Welcome to Grokking Simplicity
  • Chapter 2 Functional thinking in action
  • Chapter 3 Distinguishing actions, calculations, and data
  • Chapter 4 Extracting calculations from actions
  • Chapter 5 Improving the design of actions
  • Chapter 6 Staying immutable in a mutable language
  • Chapter 7 Staying immutable with untrusted code
  • Chapter 8 Stratified design: Part 1
  • Chapter 9 Stratified design: Part 2
  • Chapter 10 First-class functions: Part 1
  • Chapter 11 First-class functions: Part 2
  • Chapter 12 Functional iteration
  • Chapter 13 Chaining functional tools
  • Chapter 14 Functional tools for nested data
  • Chapter 15 Isolating timelines
  • Chapter 16 Sharing resources between timelines
  • Chapter 17 Coordinating timelines
  • Chapter 18 Reactive and onion architectures
  • Chapter 19 The functional journey ahead


Rating 4.3 of 86 users Rating 4.3 of 86 users (86)
Rating 5.0 of 5 users Rating 5.0 of 5 users (5)