A Road to Lisp: Choosing Your First Dialect Between Common Lisp and Clojure

A Road to Lisp: Which Lisp

A Road to Lisp: Choosing Your First Dialect Between Common Lisp and Clojure

I explore the vast family of Lisp languages to help beginners choose their first dialect. While Common Lisp offers a mature, standardized environment with powerful debugging tools used by companies like Grammarly and Google, Clojure provides modern JVM integration. I argue that the specific dialect matters less than learning the unique Lisp way of thinking, as mastering one makes switching to others relatively easy.

Learning Lisp is about learning a new type of programming: a new way of thinking about problems using code.
  1. nobleach

    Since a few folks here recommended Common Lisp to me as the language that would "tick all my boxes", I've been doing a deep dive. Right now, I'm working through SICP again with DrRacket. The first time I worked through it with MIT Scheme MANY years ago. It's shocking how much I've forgotten.

    What I like about this article is that it walks through the different "camps" of Lisp. Scheme is so intriguing to me because of how small it can actually be. I can build nearly any paradigm I want to exist. The problem is, if I were to actually go find a job where they were using a Lisp, (I hear those actually exist) they wouldn't want to use my "Result monad + match statement - railway pattern" that I've used from OCaml and Rust. So learning something that is truly "common" can make more sense.

    As far as learning though, Scheme feels "just right". I've imposed a "no AI until I've found a working solution" rule that keeps my mind engaged. Couple that with a willingness to say, "I don't know that right now... I'll think about it throughout the day and maybe by this evening I'll have an answer".

  2. dieggsy

    CL also has pretty much arbitrarily extensible syntax:

    - https://sr.ht/~dieggsy/whisper/

    - https://dieggsy.com/json-literals.html

    And could also be used to build languages, supporting more modern programming paradigms (though yes, I believe Racket does make this easier):

    - https://coalton-lang.github.io/

    I also might have written the Common Lisp example using reduce as well, which is in the standard library, but that's preference. Nice to have the option though:

    (defun calculate (instructions)

    (reduce

    (lambda (result op-value)

    (destructuring-bind (operation value) op-value

    (case operation

    (:add (+ result value))

    (:subtract (- result value))

    (:multiply (* result value)))))

    instructions

    :initial-value 0))

    (calculate '((:add 5) (:multiply 3) (:subtract 4))) ;; => 11

  3. phtrivier

    From my experience, to be happy I would need the perf of sbcl, the syntax, litterals and data structure of clojure, the begginer-friendlyness of drracket, the type system of ocaml, and the dev experience of rust.

    Does that exist somewhere ? I hope jank gets there. Or maybe roc will.

    At this point, given the progress and expectations of using LLM, writing code is going to be purely a hobby concern, like carving wood furniture became a hobby once you have Ikea.

    So we might as well use fun tools :)

  4. pratikdeoghare

    Shut up and learn Common Lisp using Practical Common Lisp.

    This would be my advice. Why? My own road was haphazard. Other books broaden your mind and teach you really cool tricks. This book gets you using lisp like you would say golang. But it still teaches you the lisp things and broadens your mind. Time spent choosing will be better spent reading this book. After that PAIP, On Lisp, SICP etc.

  5. groundzeros2015

    For me the complete spec is the killer feature. You can learn Common Lisp in 1990 and write it the same now. As long as we can keep the compilers alive it will be forever.

    It’s funny to me that it was critiqued for being “bloated” when now it looks like a focused minimal library.

  6. BoingBoomTschak

    (Disclaimer: CL weenie) A decent and balanced writeup IMO. But it should really have contained the following:

    Warning about the issues that come with ANSI CL's frozen spec (threads/sockets/unicode/extensible sequences/gray streams/etc... as extensions with a varying amount of support with compatibility layers often available to write portable-ish code, "bolted-on" CLOS never fully integrated) and its various rust spots, not just the good points.

    Mention that CL has provisions for gradual typing (with limits) which are exploited by SBCL.

    Scheme, obviously, along with the same warning as CL about pain of writing portable code that interacts with the OS (does it have compatibility layers like CL?) amplified by the R6RS vs unfinished R7RS-large mess.

    A few words about the build system/third-party packaging situation and alternative implementations.

  7. adamddev1

    How to Design Programs with Racket was life changing.

    https://htdp.org

    That helped me to think about recursion, functional programming, and type driven development. After going through HTDP I was able to breeze through complex problems that were unsolvable before.

  8. davidw

    When people have a lot of choices, that can create problems, because it's often the people with the least information trying to make that choice.

    For instance "I'm new to Lisp, I want to try one..." is a person without a lot of background and information to make that choice. And they probably realize it and it makes them nervous about making that choice.

    See: https://en.wikipedia.org/wiki/The_Paradox_of_Choice

More from this day

2026-07-17