Eric Normand Newsletter 473: On the meanings of software design

Reflections πŸ€”

On the meanings of software design

I just finished the excellent book Word by Word: The Secret Life of Dictionaries. It's by a lexicographer about the process and experience of writing definitions for a living. It got me thinking about one of the terms that bugs me: software design.

Why does it bug me so? It is a suitcase word. Marvin Minsky coined the term suitcase word to describe words like consciousness. It usually has a bunch of different meanings packed inside. If someone starts talking about consciousness, you don't know which of the many meanings they are referring to. And it is also very easy to slip from one meaning to another without realizing it.

The trouble is, when you're doing something very technical, it is very hard to speak precisely when you don't choose a sense and stick with it. When I read about software design, I can agree with some of the book's pronouncements if I accept one sense of design, but that same sense makes other statements meaningless since they are using a different sense.

I looked design up in the dictionary. Merriam-Webster lists eight different senses for the noun entry, three of which have subsenses. It is a word used for many purposes. I cringe when people talk about software design. If we would talk about structure, perhaps it wouldn't be so bad.

The book also got me thinking about our tradition in the Clojure community to use dictionary definitions to better understand a problem. I think there's a lot of value in starting with a definition. It helps us understand what we mean when we use a word. But there's a danger: It's too easy to reason from the definition (and especially the etymology).

Word by word reminds us that the definition describes the usage of a word, not a factual description of the thing the word refers to. We can't find the truth of the world in a dictionary. We can only use it to

help us understand each other.

Alan Kay : July 2007 : A Conversation with CMU Faculty & Students

Maybe my favorite video of Alan Kay at the moment (and I've watched many!). This one is a conversation with CMU faculty and students about how to do good work.

The Rise of the Internet's Creative Middle Class

Computer scientist Cal Newport explores whether we finally can make a living from content on the internet.

Rewrites πŸŽ™

My newest podcast episode about the value of rewriting.

How Dwarf Fortress is built

For some reason I really like to read about how computer games get made. I don't even play games!

Jonathan Edwards' Research Goal

I love it.

Grokking Simplicity πŸ“˜

That's nice praise:

The only CS audiobook I've found so far that is even remotely
listenable is "Grokking Simplicity" by @ericnormand. You still have to
accept a lot of limitations in the audio format (I know even Eric is
hesitant to recommend the audio version) but I found it enjoyable

He's right, I don't recommend it. I haven't listened to it myself. But I know how much work I put into layout and visual explanation.

You can order the book on Amazon. Please leave a rating and review. Reviews are a primary signal that Amazon uses to promote the book. They help others learn whether the book is for them.

You can order the print and eBook versions on (use TSSIMPLICITY for 50% off).

Clojure Challenge πŸ€”

Last challenge

Issue 472 - Roboto - Submissions

This week's challenge

Simplifying fractions

A harder one for this week.

Fractions are often represented in simplified form, where the numerator and denominator share only the factor 1. Write a function simplify that takes two integers (representing the numerator and denominator) and simplifies the fraction they represent, returning the two numbers.


;; the fraction 10/10
(simplify 10 10) ;=> [1 1]
;; the fraction 1/3
(simplify 1 3) ;=> [1 3]
(simplify 2 4) ;=> [1 2]
(simplify 100 40) ;=> [5 2]

Thanks to this site for the problem idea, where it is rated Very Hard in Swift. The problem has been modified.

Please submit your solutions as comments on this gist.

Rock on!
Eric Normand