Design principles for programming languages, Part 2a: Readability, Expressability, Concision, and Regularity

Details can denote craftsmanship, as in this ceiling from Quarto Dorado, Alhambra. (source)

1. Readability

(perl)@a = [1,2,3];          # Create an array as denoted by at-sign
$thing = $a[$index]; # Referring to 1 element; use dollar-sign

Simplicity is not Readability

It’s tempting to make things as simple as possible, in the hopes that that will make them more readable. The MATLAB example given above is an example of that.

(Malebolge)(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)”Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:’8dc
(Inform7)The Atrium is a room in the mansion. The description is "A stately atrium, full of attractive trinkets." It is north of the main room. It is brightly lit.Instead of taking something while in the atrium, say "You daren’t touch anything in this posh room, lest the butler thrash you."

2. Expressability

(this is not valid Inform7)The Atrium is in the mansion. The room’s brightly lit, and its description is "..."
(Java)import textadventurelibrary.*;
room = new Room(mansion);
room.setLighting(Lighting.BRIGHT);
room.setDescription(“...”);
...
  1. I want to read numbers from this file and compute the Fourier transform.
  2. Okay, I wrote a loop which , and figured out all the sin and cos calls. But I had to convert from strings to numbers, and looks kinda dorky.
  3. Oh, wait, there’s a parameter which reads in the file as numbers.
  4. Oh, there’s an fft function, and it takes arrays as input. Duh.
  5. Oh, hey, if I use that, I can stick it on the GPU with one extra line of code.

Simplicity is not Expressability

Simplicity is alluring when it comes to Expressability: a simpler syntax seems like it should lead to increased ease of expression. But the winner for simplest syntax is probably LISP; there are only two and a half rules (some folks would omit the third rule):

(LISP)atom                   => A literal: t, nil, numbers, and "strings"(func arg1 arg2 ...)   => Evaluate each argument, then evaluate func
on the results
(defun funcname => A new atom that can be used elsewhere
arglist funcbody)

3. Concision

This one’s simple to explain, but devilish to accomplish. Ook! is a canonical bad example:

(Ook!)Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.
(Golfscript)n(6?,:|2>.{|%2>-}/n*

4. Regularity

(Javascript)"" == 0    (because an empty string is false-ish, and so is zero)
0 == "0" (because the 0 is upconverted to a string)
"" != "0" (because why would they be equal?!)
if (x = 1) {
...
}

Stay tuned!

And that’s it for this installment. Hope you learned something, or at least gave yourself a neck cramp nodding in agreement.

Footnotes

[1] I didn’t call it “writability”, because that doesn’t really communicate the full challenge of crossing the Gulf Of Execution. It’s more than just the writing itself — it’s figuring out how to express what you want to write. Some languages make it easier to think of solutions. More on this in a future post on the intersection of cognitive artifacts and programming languages.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alex Feinman

Alex Feinman

Obligate infovore. All posts made with 100% recycled electrons, sustainably crafted by artisanal artisans. He/him/his.