Grokking Simplicity: Taming Complex Software with Functional Thinking
Audiobook & Ebook

Grokking Simplicity: Taming Complex Software with Functional Thinking by Eric Normand | Free Audiobook

By Eric Normand

Narrated by Mark Thomas

🎧 12 hours and 4 minutes 📘 Manning Publications 📅 January 19, 2022 🌐 English
🎧 Listen Free on Audible 📖 Read on Kindle

Free 30-day trial · Cancel anytime

About This Audiobook

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

Summary:

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.

🎧 Listen Free on Audible

Free 30-day trial · Cancel anytime

Quick Take

  • Narration: Mark Thomas delivers a technically fluent reading that handles the code-concept exposition with appropriate pacing – he reads carefully enough that functional programming terminology lands without feeling rushed.
  • Themes: Functional programming principles, actions vs calculations vs data, managing complexity through design
  • Mood: Methodical and revealing, with a satisfying sense of ideas building on each other toward a unified framework
  • Verdict: A rare programming book that genuinely changes how you think about software design, and unusually well-suited to audio format for a technical text – the conceptual depth travels without code examples better than most.

I was about three hours into a solo road trip when Grokking Simplicity made me pull over. Not because I was lost, but because Eric Normand had just explained the actions/calculations/data distinction in a way that reframed something I had been doing wrong for years without knowing it, and I needed a few minutes with the thought before the next chapter arrived. That kind of listening experience – where the book interrupts your driving and demands actual contemplation – is what marks a genuinely good technical audiobook, and this one earns it repeatedly.

Functional programming has a reputation problem. It is often taught through languages and abstractions that feel distant from the code most working developers write every day – Haskell examples, category theory vocabulary, academic framing. Normand’s approach is deliberately and strategically different. He builds functional thinking from principles that apply in any language, using JavaScript throughout the examples, and he sequences the ideas so carefully that by the time you encounter higher-order functions and composition, you have been using them implicitly for several chapters and the formalization feels like recognition rather than introduction.

The Central Distinction That Changes Everything

The book’s organizing framework divides code into three categories: actions (code that depends on or affects the world outside itself – things with side effects, like network calls, database writes, or reading the current time), calculations (pure functions that map inputs to outputs deterministically, with no side effects), and data (plain values with no behavior). This taxonomy sounds simple and is simple, but applying it rigorously to real code is not. Normand spends considerable time on why developers instinctively over-write actions, how to refactor action-heavy code toward more calculations, and what you gain from that refactoring in terms of testability, predictability, and debuggability.

The insight that resonated most with me personally: most code that seems difficult to test is difficult to test not because the logic is complex but because it has been written as an action when it could have been written as a calculation. Pulling the logic out of the action and testing the calculation directly is often straightforward. The difficulty is recognizing the separation in the first place. Normand gives you a systematic way to see it.

How Well the Code Concepts Travel Without Visual Aids

One reviewer notes they initially gave the book four stars based on what felt like outdated syntax choices, then revised their assessment after finishing – Normand uses older syntax early in the book intentionally, to establish concepts before introducing more modern idioms. This is a pedagogical choice, and it is a good one, but it requires patience in the first few hours of listening. In audio, without the ability to see the code, you are working from descriptions of what the code does, and Normand is careful enough with his explanations that this works more reliably than it should for a programming book.

The companion PDF is not mentioned for this title, which means the audio has to carry the full conceptual load. The reviewer who called it “deceptively simple” is right: Normand builds from small pieces, and each half of the book has the same structure – apparently simple opening ideas that cascade into more powerful applications. In audio, that cumulative architecture works because you cannot skip ahead. You build the way Normand built the book, which may be why the format suits the content unusually well.

Mark Thomas and the Technical Register

Mark Thomas narrates with a technical fluency that suggests he has at least some background in the material. He does not rush through code-description passages, which is the most common failure mode for narrators handling programming content. The pacing allows the listener to construct a mental model of what is being described before moving on. For a book that relies entirely on verbal description of code rather than visual display, this is not a small thing.

At twelve hours and four minutes, the book is well-paced for its intellectual density. Reviews consistently describe it as rewarding rather than exhausting – one reviewer notes that they “felt tricked into learning things,” which is exactly the effect Normand is going for. Another describes the book as appropriate for developers with two to five years of experience, and the author’s own audience note in the synopsis agrees: this is for intermediate to advanced developers, not absolute beginners.

Prerequisite Experience and What You Get From It

Essential listening for any developer who writes JavaScript, Python, or any language where the distinction between pure and impure code is not enforced by the type system, and who wants a rigorous mental framework for managing complexity without adopting a new language or entire paradigm. The book is also strong for developers from object-oriented backgrounds who are curious about functional thinking but have found Haskell-first approaches alienating. Skip it if you are a beginner who does not yet have working code to apply the concepts to – the book is most valuable when you have existing software design problems it can help you reframe. And if you are already an experienced functional programmer, the early sections will cover familiar ground, though the timing model and composition sections in the second half may still offer useful framing.

Frequently Asked Questions

Do I need to know JavaScript to follow Grokking Simplicity, or can I follow along in another language?

The code examples use JavaScript, but the book’s principles are language-agnostic. Normand is explicitly teaching functional thinking, not JavaScript specifically, and the concepts apply in Python, Ruby, Java, Kotlin, or any language where you have a choice about whether to write pure or impure code. Some familiarity with programming in any language is assumed; JavaScript fluency is not required.

Is this a good first functional programming book, or does it require prior exposure to the paradigm?

It is an excellent first functional programming book specifically because Normand does not assume prior functional exposure. He builds the framework from first principles, using vocabulary he defines rather than assuming you are already familiar with terms like monad or functor. The one requirement is that you have some prior programming experience and existing code to apply the concepts to.

How does Grokking Simplicity compare to other functional programming books like Professor Frisby’s Mostly Adequate Guide or SICP?

Frisby’s guide is more JavaScript-specific and assumes more comfort with functional abstractions. SICP is a computer science classic but uses Scheme and is oriented toward CS education rather than working developers. Grokking Simplicity is positioned as the most practical and accessible of the three – it teaches functional thinking in languages developers already use, which makes the concepts immediately applicable.

The author mentions the book uses older JavaScript syntax early on – does this affect the listening experience negatively?

At least one reviewer initially found it confusing, then understood the pedagogical reason after finishing the book. Normand introduces simpler syntax before modern idioms to establish concepts before adding syntactic complexity. In audio, where you cannot see the code, this approach generally helps rather than hurts – the concepts remain clear even when the described syntax is not the most modern form.

What Listeners Are Saying

★★★★★

An amazing book that explains concepts succinctly and will expand your knowledge

Edit: i made the classic mistake of judging the book before I finished it. I had given it 4 stars after reading 120 pages of it. Now that I have finished it, I realize my one criticism of using outdated syntax was misplaced.Normand uses older syntax at the beginning of…

– Michael S. Veronie
★★★★★

An easy-to-understand decomposition of software design and functional thinking

I thoroughly enjoyed this book. The author breaks down the ideas into such tiny pieces. At times I felt tricked into learning things. Each half of the book begins with deceptively simple ideas that crescendo into powerful and practical finales. He claims the book is for 2 – 5 years,…

– Benjamin D Allred
★★★★☆

Buen libro para aprender programacion funcional

Buen libro para aprender de programacion funcional. Se agradeceria la inclusion de otros lenguajes de promgracion

– daniel santiago avila borrero
★★★★★

Valuable wisdom.

I've been making a living developing software for over 40 years. In that time a lot of technologies have come and gone. There have also been new programming paradigms and evolving interest and increased understanding in established paradigms. One thing that has seemed quite consistent is that systems that are…

– D. Gustafson
★★★★★

As clear and as helpful as it gets

I'm early in my career as a software engineer working primarily with JavaScript. I had gotten some advice to work in the style of Functional Programming, but didn't know where to start.The concept of breaking up your code into actions, calculations, and data has completely changed how I approach work….

– Johnny West

Start Listening: Grokking Simplicity: Taming Complex Software with Functional Thinking


Free 30-day trial · Cancel anytime

Alexandra Reed

Written by Alexandra Reed

Founder & Literary Critic