The Essence of Software: Why Concepts Matter for Great Design

TLDR: “Interesting, prescient ideas”

Book review by Deane Barker tags: programming 1 min read
An image of the cover of the book "The Essence of Software: Why Concepts Matter for Great Design"

This author is claiming that the “essence” of software isn’t code, rather it’s concepts. He’s arguing that we should design software more on the conceptual level.

Concepts are the user’s mental model of how the software works, and how the big pieces of the software interact. He argues for designing these concepts along multiple axes:

I’ve known this as a “noun” analysis. When trying to learn new software, sometimes it’s helpful to analyze the “nouns” – the… things, in the software, that you do stuff with. That really helps you organize the software in your head.

What’s interesting is how relevant this is in the new era of AI-driven software development. Writing code is no longer the critical thing. What’s becoming more important is understanding how your users will use the software, and the models they will use to think about the problem domain.

Future software will likely be designed at the conceptual level, and here’s a great example:

Configuration Language: Specification

This is a configuration language that I designed (…or maybe “evolved” over years of use). I wrote a detail specification for it, delineating the concepts behind it. Since then, I’ve had Claude Code implement it – write the actual code – for two different languages. It’s neat because it works the same in both, because the concepts are the same.

This is the future of software development. The book was ahead of its time.

Also, the book has an interesting format, in that it’s divided into two halves. The first half is the meat of the argument, without much elaboration of asides. The second half is basically an extended set of “notes” to the first half, in which the author tells colorful anecdotes and explains the concepts with more narrative. (The author is a professor at MIT, so if he was using this as a textbook, I think the students find that helpful.)

Finally, the author has an entire website in support of the book. It’s not just promotional – some of the content expands on and reinforces the concepts of the book.

Book Info

Author
Daniel Jackson
Year
Pages
336
Acquired
↑ Outbound link to – Configuration Language: Specification

I write a weird amount of code that needs dynamic configuration, meaning configuration which is supplied at runtime, not at parse or startup time. To configure, the code needs to read in a string of text (the “source”), and turn it into an object. I use these when configuring pipeline processes….