The Essence of Software

Notes on Daniel Jackson's Essence of Software. This post is part of a series where I review what I learned from each book I read.

The Essence of Software

This article is based on old notes from my notebook. Note that these notes were written on 2/28/23; I am in the process of transferring some of my written notes to digital ones.

Software products are composed of concepts

  • Concepts have a single purpose (ex. A like button to show approval)
  • It is generic, and thus applicable elsewhere (liking a comment vs. like a post or video)
  • They clearly define the states, actions, and purpose. For example, a bookmark state might contain an array of bookmarks. The actions could include addBookmark and removeBookmark. The purpose is to easily save links to go back to them

Concepts can be composed differently to create products

  • Free standing: concepts are not connected and have isolated actions/states (they aren't dependent). This is good for giving user control, but lacks automation
  • Synchronized: concepts are synchronized such that an action on one concept will trigger a corresponding action on another (ex. creating a file on your desktop may sync it on the cloud). This is good for automation and simplicity and consitency, but may lack user control (ex. apple photo's–deleting locally also deletes on cloud)

Rules of concepts

  • Concepts are mapped one-to-one on user interfaces
  • The operation principle of a concept defines it's actions to fullfill it's purpose
  • Concepts should be familiar and consistent with existing ones (that correspond)
  • Concepts cannot directly modify other concept's states
  • Synchronization is to LIMIT actions further by grouping actions together to prevent weird states (ex. pasting styled text, but the style at your cursor is not updated accordingly)

Chapters 4-11 (to spark my memory)

Concept... Structure, Purposes, Composition, Dependence, Mapping, Specificity, Familiarity, Integrity

Final Remarks (5/30/23)

This book was honestly an eye-opener for me. It allowed me to see how seemingly complex applications are actually composed from many simple concepts, and that the only way to build consistent applications is to have consistent concepts. Since finishing the book, I see software in an entirely different light. I'd love to say that I've implemented these ideas into my own apps (like Gunn Alumni), but I don't think this is true. In my next few projects (like Gunn Elimination, Launchpad, etc), I will try putting these ideas into practice.

Apart from having some creative insights on software, this book got me into the habit of reading everyday. I am so glad that I randomly stumbled upon this book at the UCLA library, and I will continue to update this blog with my new book ideas.