Lisp as Chaos

Pulished 2018-06-03. Written by Teodor Heggelund.

Lisp is a family of flexible programming languages. Want to know more about Lisp? I recommend Paul Graham’s essays on how Lisp differs from other programming languages and what makes Lisp good. Both articles are from the early era of the Internet, yet relevant today.

Lisp can on the first glance seem totally chaotic. The visual image is crowded – indeed way more crowded than would be the case for JavaScript or Python. Every line of the source code file bears more meaning. Conditionals are no longer neatly separated by their own line. Instead, there may be ifs within ifs within ifs.

Ghost recently released Prequelle. Its cover is unsettling:

Cover for Prequelle by Ghost (2018)
Cover for Prequelle by Ghost (2018)

Instead of a stable structure, the throne is a reptilian predator. What we see is surprising. It is not as we expect. The boundaries are blurred, and we can no longer separate the ground from the predator. The ground is no longer stable. We cannot trust it.

Let’s look at a piece of Clojure code:

The meaning of the code really depends on handle. Is handle a function? In that case, (foo/car "AA") must be a valid function call. What if handle is a macro? Something like this could happen:

Our foundation in Lisp is not solid. It is moldable. We can change it. That means other people can change it, too. The ground may not be what we expect it to be.

We see something, but we cannot tell what it is. Not knowing the identity of something is at the core of fear. We naturally fear what is unknown. Why? Fear provokes reflection. Fear causes us to stop and think. Stopping and thinking happens to be extremely useful when we encounter something new. In fact, there is reason to believe that fear, evolutionarily, developed as the optimal way to handle the unknown. Don’t like feeling bad? Don’t like having to redefine how you think? Your options are twofold. Either protect what you do know as if it is what is dearest to you, and fight off all attacks. What if you wish to continue learning? By handling the initial fear of the unknown, you may end up in a mode of exploration.

Lisp is flexible. So flexible, in fact, that the natural reaction may be fear. I will not claim this to be purely positive or purely negative. An experienced Lisper would say that the fact that you can mold the language into what you need is a foundational reason why Lisp is great. A person with experience from procedural languages, would face something that is not at all what he expected.

Good systems, however are neither rock solid nor infinitely dynamic. They provide well-negotiated boundaries. Should the boundaries be solid at the level of the language? Or do we want to reach deeper, designing boundaries ourselves as we need them?

What about yourself? Are you ready to redefine your boundaries, or would you rather have some peace and quiet?

Got a comment? Just , then use the arrow in the upper-right corner to make a general note. Or mark text to make an annotation to just that text. More information on the commentary system is available at Commentary with Hypothesis.