Eric Normand Newsletter 473: On the meanings of software design
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.
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.
Computer scientist Cal Newport explores whether we finally can make a living from content on the internet.
My newest podcast episode about the value of rewriting.
For some reason I really like to read about how computer games get made. I don't even play games!
I love it.
Grokking Simplicity 📘
That's nice praise:
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 Manning.com (use TSSIMPLICITY for 50% off).
Clojure Challenge 🤔
This week's challenge
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
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.