Tuesday, April 11, 2006

On readiblity and scheme

Are all those parentheses in scheme (and lisp) readable? That's probably the first question anyone asks when they see something like:

(map (lambda (x) (sqrt x)) '(1 2 3))

Below is an excellent response that summarizes an explanation I've seen a few times.

The bottom line is that the parentheses don't get in the way any more than those pesky space characters do between words. Spaces are only invisible because your brain parses them out.

Now, should you try to write code without using an editor that does smart indentation and paren handling? No, of course not. But try writing Java code or any other language with the wrong environment and you'll get the same results. Massive frustration.

In general, the question of readability is a loaded one. Readable to who? To someone who knows the language? Or to someone who knows a class of languages? Or to someone who knows nothing about the language? Is readability the same thing as "uses a lot english words?" Of course not, otherwise we would all be programming in cobol.

Think about it - is Hebrew a readable language? Well, if you don't know Hebrew, then it's not. If you grew reading and writing it then it is.

In general, I think the question of readability is a discussion worth avoiding. Instead, I'd rather talk about the kinds of abstractions I can build up - which allow you to represent a concept in a clean way. With the right abstractions, I think almost any language becomes readable.

Oh, and you need patterns. Because, as the message below describes, it's the patterns that our brain's thrive on.

From: Richard Cleis <rcleis@mac.com>
Subject: Re: [plt-scheme] question about dr. scheme indentation
Date: Mon, 10 Apr 2006 18:47:06 -0600

[original question about the best way to format Scheme trimmed]

Either of those formats reduces the compactness of Scheme. The 'usual' format is very easy to read; after getting used to Scheme, the parens disappear and your eyes see the relationship between the lines.

(define (myfunction myparam)
   (let* ((myvar 10))
     (+ myvar myparam)))

Not convinced? As you read sentences, you don't literally put individual letters together to make words. Nor do you literally put words together to make sentences. This may be hard to believe until you experience one of those perception demos where you can read entire paragraphs even though most of the letters are removed.

Your brain recognizes patterns then forms thoughts. Likewise, by letting DrScheme form consistent patterns, you can read programs without counting parens.

rac

--Ben

No comments:

Post a Comment