Common Lisp is a programming language. Some parts of this article may be slightly technical. If that bores you, skip to the next readable paragraph. I’ve tried to keep things intentionally abstract.
As always, thanks for reading!
Introduction
In childhood, I viewed everything with an unknown splendor. I’d see a painting, a GPS, a building, or a home-cooked meal, and would have no idea how these things appeared, functioned, or were designed.
I had two mental models to cope with this fact.
The first was rooted in my belief that the modern world was much older than it really is. At a young age, especially while entrenched in America’s cult of youth, it’s difficult to avoid projecting your own experience onto the entire world.
To me, historical events only really happened in the way the Star Wars happened. The little bits of history I learned at this age were contained to their own walls: fit only for exams and tests, never for a lifetime. I had absolutely no basis for comprehension, no frame of reference for which I could historically contextualize myself.
The thought was at best stupid and at worst psychopathic. People are real, education is important, and history is ongoing. I understand now; I am making it.
I think I’ll blame the public education system a little for this belief. It is especially evident in history classes: images available in full-color were shown only in black-and-white as to age them. I criticize carefully, as I don’t think lying to children is prudent, but neither is ruthlessly exposing them to the often cold nature of the world. It was only for one year, but Rosa Parks and I overlapped lifetimes. At the time I was taught her story, they spoke of her with an archaeological reverence.
The second mental model I had was religious. The best explanation I could conjure was that God must have designed beautiful things. This was another faulty coping method rooted in the language of the times.
When someone was good at something, they must have “God given talent”. When a doctor saved a patient’s life, we thanked God, not the doctor. I can’t presently refute every theological argument, but certainly, my nine-year old self couldn’t either.
My life has been characterized by a series of disconfirmations of these fallacies of religiosity and modernism. In my relatively short life, I have watched a huge amount of history unfold. I watched my school go from slide-decks to projectors. I watched dust collect on my VHS collection. I continue to watch the internet.
More importantly, I learned how to create things that bring me immense joy. I have learned that there is no (evident) capital C Creator, nor is there some platonic, perpetually-ancient genius man who mysteriously creates things. Or, I have learned, if such a man exists, I may become him.
Programming (also known as hacking), is a field especially riddled with these creative anxieties. It is seemingly impenetrable. And yet, computing remains in infancy.
God doesn’t program, men do. You incite change. The way mass media refers to coding, for example, is hilarious. Why is that character in your head wearing a hoodie? Why is he always a man, and why is his room so dark?
To pioneer is to chose. Those who presently lament that “the good ideas are taken” would whine the all same had they been born in antiquity. We ought to widen our perspectives. The very nature of innovation is within its incalculability. There remains treasures to be unearthed, if only you’ll be courageous enough to dig.
There is no such thing as an “art” person or a “math” person. Let’s cultivate our curiosity, aesthetics, and work ethic, rather than cram our experiences and expressions into predefined categories as a means of acceptance.
In the sections below, I will explain my decision to embark on the undertaking of the Common Lisp programming language, elaborating on my general decision-making philosophy through multiple examples.
Programming Philology
Just like languages spoken by people, programming languages have certain fluctuations, influences, trends, and lifecycles.
We now have enough history of computing to establish a philology of coding languages. How amazing! I didn’t even consider the possibility of the existence of this field. Whereas previously the conversation could only be about language design, syntax, and grammar, now we can speak about meta-evolution.
Why is this important in my decision to learn Lisp?
Due to three observations:
Lisp is one of the oldest programming languages
It is still being used
Programming languages are slowly becoming more like Lisp
All three observations and my conclusion are due to the fact that code and storage are interchangeable within Lisp. It is an incredibly simplistic assertion, yet its potential implications echo an infinite depth.
This interchangeability leads to self-definition. Therefore, Lisp enables a user to become both a programmer and a language designer. In turn, the language is essentially antifragile, both in design and application.
Antifragility is a property of systems in which they increase in capability to thrive as a result of stressors, shocks, volatility, noise, mistakes, faults, attacks, or failures. The concept was developed by Nassim Nicholas Taleb in his book, Antifragile, and in technical papers.
As Taleb explains in his book, antifragility is fundamentally different from the concepts of resiliency (i.e. the ability to recover from failure) and robustness (that is, the ability to resist failure).
On a short timescale, the open-endedness of the language allows for specialization within projects, leading to more concise and poetic code.
On a long time-scale, the language is melding into a progressively efficient form.
Lisp is a beautiful canvas. One measure of the success of the design of a tool is if it is used for things the designer never intended. Did Alexander Graham Bell have to conceive of pizza delivery to know making the phone was a good idea?
The (potential) results are innumerable. And self-definition is just one good part of Lisp. I also like the quick REPL, the ability to decide project scope, the backwards compatibility, the lack of boilerplate, the self-defining recursive functions, the garbage collection, the lack of distinction between compile time, runtime, and readtime … All of which coalesce into a huge potential for leverage.
Leverage
Code and media have always interested me as forms of work due to their efficiency. They can exist without constant upkeep, they are easily replicable, and their effects are culminative.
Consider the work of a writer as opposed to that of a hamburger chef. Even the greatest chef can only cook for one person at a time. And once their customer finishes eating their food, the experience is gone forever, at least until the next burger is cooked.
In comparison, articles that I’ve written can be read as I sleep. Programs I’ve authored can be executed in my absence. My music can be heard without my performance. I can build and distribute without ever being physically present.
This is not to insult ephemeral experiences: I love burgers, concerts, and speeches, and I hope people keep refining them. Just for me, the potential for leverage and longevity is very attractive.
Lisp is not a language that a career counselor would suggest you learn. They’d probably recommend Java, C++, Python, Perl, Ruby on Rails or (insert whatever new fashion exists). They’d recommend these languages because they’re employable. Notice how the people who write code are rarely the same people who hire.
In fact, most arguments for pursuing a different language have to do with the fact that there are pre-existing libraries or other developers currently supporting it. The argument is circular: the reason they’re employable is because they’re employable. There is no consideration of design.
My philosophy dictates that I choose only the best.
Incremental Web Based Implementation
I’ve long known that if I decide to pursue development, it will be web-development, not locally hosted software. This is for a few reasons.
Internet access is incredibly widespread.
I don’t see this changing any time soon. About ⅔ of the world population has internet access. The internet is the medium with the lowest friction for mass transmission of ideas and for maximum efficacy in implementation. A .mp3 or .txt file is a fraction of the cost of vinyl record or hardcover book.
Web development circumvents a lot of hardware / OS issues present in software development.
Hardware is constantly changing. Web development “best practices” change a lot too, but I believe that they’re changing at a slower pace, thus enabling longevity.
Generally, I can still access websites built in 1996. They might be ugly, but they mostly work. However, (most) software written in a bygone era becomes completely incompatible with modern machines. (Exception: Lisp)
Web Development enables optionality.
In software hosted by individual computers updates are often “chunked”: a couple times a year large updates are sent out to be downloaded.
A program hosted by me on a web server can be updated immediately without any user interaction. If I decide I need to make a change (ex. Fix a bug), I can update my program immediately and launch live. Imagine if each time Amazon.com added a new item you had to download it!
This quick, light tinkering approach is preferable for me, and serves as a technological advantage to fend against large bureaucracy. I need to take any advantages I can, especially if I decide to pursue an entrepreneurial route.
Compound Effects
A singular effort enables depth at the potential expense of unique synthesis. Likewise, the opposite sentiment is true. The problem is that culminative effects cannot be predicted. Perhaps I will be harmed, or perhaps my efforts will compound. Maybe this is a “bad” time to learn to program. Maybe I should focus elsewhere.
Either way, I don’t care. The simplest solution to this problem, (and what I have done), is to simply follow my curiosity, wherever it leads.
The best book to read is the one you will devour. The only topic you should pursue is the one that makes your heart jump. As it happens, following your heart is incredibly risky. Fortunately, great risk begets incredible rewards.
Additionally, I have luck in my choices. My writings are in English, I am speaking in Spanish, and now I am programming in Lisp. These fields are similar enough to have a high likelihood of compounding, but different enough to not be redundant. They’re all lingual.
Despite this, I would enjoy learning to program in Lisp for the pure mental exercise. Even in the few weeks since I have began, I feel my thinking become clearer. Even if nothing comes of it, I’d rather remain actionable and honest than passive and unknowing.

In fact, I believe the only way to make beautiful things is to enjoy things for their own sake. Elevation is granted only to those who love processes, not results. Such is the definition of philosophy.
While reflecting on my personal education from last year, I resolved to spend more time deeply reading and re-reading novels rather than using books as a form of procrastination or distraction. I am in accordance with my values: the primary text I am learning from, Paul Graham’s Ansi Common Lisp, is the most difficult text I’ve ever read.
Conclusion
You might be wondering, why are you talking so much and not just writing code?!?!
Great question. I believe social contracts are a great motivation. Now that you know I’m doing this, I can’t disappoint you! I have a reminder set for exactly one year to write a follow-up to this article detailing my experience.
In essence, I am learning Lisp because of its antifragility, difficulty, artistry, and self-definition.
But most of all, I am learning Lisp because I would love to.
Thank you, I’m going to away to study now.