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

Controlling complexity is the essence of computer programming.(Brian Kernighan)

The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible. (Edsger Dijkstra)

Programs must be written for people to read, and only incidentally for machines to execute. (Hal Abelson)

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

Note: Like many things, it’s easier demonstrate principles by picking on languages that don’t, shall we say, prioritize them. And some that actively do.

I’m going to use some “silly” languages here — or, more formally, esoteric languages — because I want to explain in cartoonishly clear terms. Some of these languages are highly optimized for criteria not necessarily listed above: obfuscation, power, concision, or sheer perversity.

Also, as some of these examples are drawn from MATLAB, let me reiterate that the opinions I present here on Medium are my own, not those of any past or present employer.

1. Readability

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Kent Beck)

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

I had a running compiler and nobody would touch it. … they carefully told me, computers could only do arithmetic; they could not do programs. (Grace Hopper)

But, Grace, then anyone will be able to write programs! (reported reaction to the release of COBOL)

(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(“...”);
...
(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

(Ook!)Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! 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

Although the perl slogan is There’s More Than One Way to Do It, I hesitate to make ten ways to do something. (Larry Wall)

There should be one — and preferably only one — obvious way to do it. (The Zen of Python)

(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!

--

--

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