A Twitter Essay
When I moved to Massachusetts in 1961 the common street-sign practice at intersections was to name the side street but not the main street. It’s still general practice.
1/20
IF YOU DON'T KNOW THE NAME OF THE STREET YOU'RE DRIVING ON YOU DON'T BELONG HERE.
The lesson:
Certain design choices are inherently exclusionary, and are almost always invisible to the designers.
2/20
en.wikipedia.org/wiki/Unix_phil… .
The UNIX Philosophy is brilliant and has served us exceedingly well. There are several statements of it in the Wikipedia article.
3/20
“Write programs to handle text streams, because that is a universal interface.”
This is an important and productive principle, but it’s very 1970s, based deeply in Procedure/Data thinking.
4/20
5/20
You have to be an insider to build something with Procedure/Data APIs.
You have to understand the details of the programmatic interface.
6/20
A. I’ll describe an example that we all understand of a general principle.
B. I’ll state the general principle.
C. I’ll apply the principle to API design.
7/20
Before John von Neumann invented the digital-computer instruction set (that is, computer control as data stored in the computer's memory), to program an application you had to understand digital logic and use that understanding to rewire the computer.
8/20
phillyvoice.com/70-years-ago-s…
9/20
Von Neumann’s invention created the software industry.
Computer control as data opened up the field of computer programming to people who didn’t understand computer internals. They just had to learn a programming language.
10/20
Think interfaces. Not interfaces between artifacts (i.e., creations) but between communities. In the example the two communities were engineers, whose jargon (practice language) was digital logic, and mathematicians, whose jargon was solution algorithms.
11/20
12/20
The digital computer instruction set is a CJI.
13/20
How to turn APIs into CJIs? It might help to envision two distinct communities of practice, and how a CJI would open up new artifact construction to one of these communities. I’ve done that in one case; I invite you to think of others.
14/20
AND I wanted to make the front end code-free so that non-programmers could build interaction behaviors.
15/20
melconway.com/Home/pdf/human…
I have called the interaction part “wiring diagrams”. You can see the partition design here:
melconway.com/talks/2019_con….
16/20
17/20
melconway.com/talks/2019_con…)
connect to the APIs of the business objects at the components’ inputs.
The business-object behavior specified by these APIs turns the wiring diagrams into business applications.
18/20
The design principle: "Choice over Construction"
19/20
melconway.com/talks/2019_con…
you read that the yellow components' input objects manage the API dialogs. The yellow components themselves are fixed and almost empty of behavior.
Voila: an inclusionary API based on Object thinking, not Data/Procedure thinking.
20/20