The Liberating Experience of Common Lisp
The author critiques modern programming languages for their complexity, praising Common Lisp for its stability, unique developer experience, and creative freedom, making it preferable for software development.
Read original articleThe author reflects on their programming experiences, contrasting the complexities of modern languages like Swift and Go with the liberating nature of Common Lisp. They express dissatisfaction with Swift's increasing complexity and maintenance challenges, arguing that well-written Objective-C can be just as effective. In contrast, Common Lisp offers a unique developer experience, allowing for rapid inspection and debugging through its REPL environment, which enhances productivity. The author appreciates the language's stability, noting that its specification remains unchanged, unlike many modern languages that frequently evolve, leading to obsolescence in code. They argue that programming should be a creative endeavor rather than a repetitive task, and they find joy and empowerment in using Common Lisp for personal projects. The author concludes that the freedom and abstraction tools provided by Common Lisp make it a preferable choice for software development, especially in a landscape filled with languages that can feel restrictive or uninspiring.
- The author finds modern languages like Swift and Go increasingly complex and less enjoyable to use.
- Common Lisp is praised for its unique developer experience and rapid debugging capabilities.
- The stability of Common Lisp's specification is highlighted as a significant advantage over frequently changing languages.
- The author views programming as a creative activity and enjoys the freedom that Common Lisp provides.
- Common Lisp's abstraction tools allow for simpler software development compared to other languages.
Related
I Probably Hate Writing Code in Your Favorite Language
The author critiques popular programming languages like Python and Java, favoring Elixir and Haskell for immutability and functional programming benefits. They emphasize personal language preferences for hobby projects, not sparking conflict.
Objective-C is like Jimi Hendrix (2014)
The author compares Jimi Hendrix's influence on guitar music to Objective-C's impact on programming, noting how perceptions of its features have evolved as newer languages emerged, reflecting on programming history.
Objective-C is just, like, a leaky abstraction over C
Objective-C is described as a "leaky abstraction" over C, integrating modern programming features and enabling interoperability. Its design is effective, with Objective-S proposed as a streamlined variant.
Objective-C is just, like, a leaky abstraction over C
Objective-C is described as a "leaky abstraction" over C, integrating modern programming features and enabling interoperability. Its design is effective, with Objective-S proposed as a streamlined variant.
A Love Letter to Go
The author reflects on 12 years with Go, praising its simplicity, performance, and concurrency, while suggesting improvements in data structure handling and broader use in data science and machine learning.
- Many users appreciate the unique features and freedom that Lisp offers, contrasting it with the constraints of more mainstream languages.
- Some commenters express frustration with the ecosystem and tooling around Lisp, citing issues with dependency management and library quality.
- There is a recognition of the learning curve associated with Lisp, with some finding it more intuitive than object-oriented languages.
- Concerns are raised about the practicality of using Lisp in professional settings, with some suggesting it may not be suitable for average development teams.
- Several users highlight the importance of personal enjoyment and creativity in programming, advocating for languages that empower developers.
Once I started down the path of functional programming and Clojure, it became clear in retrospect that "objects" as C++ and Java envisioned them were poor fits for most problem domains, which is why their purpose never clicked in my head. Reducing data down to...well, data, and methods down to functions, and programs down to pyramids of expression calls made everything about program structure click in my head. Functional, expression-based style was FAR more intuitive to my brain than stateful object style. I now try to lean heavily into expressions and referential transparency no matter what language I use, though some languages make it easier than others.
Funnily enough, C program structure came much more naturally to me than either C++ or Java. Maybe because it's easy to decouple data from operations on that data, even if stateful. Hard to say.
> Often developers say how you can make a mess of a Common Lisp codebase because of such freedom it provides. But isn’t that the same with any language?
There is a story about the code behind the terminal interface for Tops-10 for the PDO-10. It had been tweaked over the years adding various features, such as using control-T to see what was happening in the running program. Many attempts were made to rewrite it, but it was so intertwined, that whoever tried fixing it gave up.
Three things are killer features for me with the slime+emacs running sbcl. First is that you can see the underlying source for anything down to the lisp implementation, e.g. the definition of 'macrolet'.
The second thing is if there is an error, it displays the stack with the ability to see what the local variables are in any function on the stack.
The third thing is that one can patch a running program, either once a breakpoint ('break) is encountered, or by doing control-C at the repl. And then resume it.
It is also fun that SBCL is unreasonably fast. It compiles itself in 2m15s. I am pretty sure that gcc/clang/llvm take longer than that and also likely Rust.
I have developed a habit of using s-expresions for lots of things, such as configuration files, and web page representations. I blame paredit and lisp for this tendency. See https://github.com/wglb/configuration-r
- A Gentle Introduction to Symbolic Computation. Get both the book and the figures.
https://www.cs.cmu.edu/~dst/LispBook/
Paradigms of Artificial Intelligence Programming
https://github.com/norvig/paip-lisp
https://unglueit-files.s3.amazonaws.com/ebf/59f74a93bbc1435c...
Get SBCL as the compiler/interpreter, it's the fastest FLOSS one.
Portacle has everything to begin with minus the books.
On side note, they say that 80% of developers are unhappy, do we think that languages have a big part in this?
Like I once wanted to have my own syntax for querying a SQLite, so built my own ORM. The query syntax is defined in like 50 lines of code. Doc for it here [1]
1. https://asjir.github.io/FunnyORM.jl/dev/#FunnyORM.TableQuery
But opportunities to use it in the day job are few and far between, and I would have qualms about recommending it, in most contexts. For a lot of purposes, its libraries are just nowhere near as good as Python or JavaScript or Java. And some of its superpowers (macros!) can also be used really, really badly.
There was an essay about Lisp being a "language for smart people" that captured some of what would give me pause. On average, most shops have average people (for that occupation/industry). Not sure Lisp is the best solution for that context.
(Obligatory mention here of Coalton, which is an experiment in creating that sense of security within a CL paradigm: https://github.com/coalton-lang/coalton )
In my most recent foray I wanted to give roswell, qlot, and quicklisp a proper try, because I really want to find the Right Way to consume dependencies with proper version management. It's what I'm used to in just about every other context. But the version of qlot you get through roswell is old, nothing in that stack is doing versioned dependency resolution, and despite claims of stability, SBCL and ASDF seem to have had incompatibilities recently that'll trip you up if you happen to install the wrong thing, so you don't get Clojure's "code from a decade ago just works" effect.
What have I missed? It feels like I'm holding it wrong.
I like CL as much as the average dev who's dabbled with it on weekends but can't find anyone to pay me to use it, but...this essay really adds so little to the conversation about it. There's not an awful lot explicitly wrong in it per se, but people have been writing these little puff pieces on their blogs about Lisp for (at least) twenty years now. This checks all the usual boxes: "it's so powerful and liberating", "working in an image on a living system is amazing once you try it you'll see", "critics are wrong you can write unmaintainable code in any language", etc.
OP hasn't even really used Lisp in anger, yet: "my next project is being built with it". I'd be much more interested in seeing a postmortem after that - "Ten Years Building a Major Piece of Software in Lisp" - with some actual self-reflection, rather than just a regurgitation of the usual talking points.
Shameless plug: just yesterday I published a step-by-step code walkthrough hoping to convey my "Clojure way" of modeling:
You powered it on, and it landed you in a BASIC environment. Apple IIs, C64’s and Ataris all had a full-screen editor environment where you could type code, run it, pause it, inspect variables, and continue running. It wasn’t LISP, sadly, but it was great as an introduction and moving to “more professional” environments and tools took away a great deal of freedom away from us.
A long time ago I read someone saying "Lisp is the only language where I spend more time thinking than typing". Recently, when I was telling ChatGPT what logic I wanted written on what data structures, I realized the same was true about having an LLM write any other language.
Related
I Probably Hate Writing Code in Your Favorite Language
The author critiques popular programming languages like Python and Java, favoring Elixir and Haskell for immutability and functional programming benefits. They emphasize personal language preferences for hobby projects, not sparking conflict.
Objective-C is like Jimi Hendrix (2014)
The author compares Jimi Hendrix's influence on guitar music to Objective-C's impact on programming, noting how perceptions of its features have evolved as newer languages emerged, reflecting on programming history.
Objective-C is just, like, a leaky abstraction over C
Objective-C is described as a "leaky abstraction" over C, integrating modern programming features and enabling interoperability. Its design is effective, with Objective-S proposed as a streamlined variant.
Objective-C is just, like, a leaky abstraction over C
Objective-C is described as a "leaky abstraction" over C, integrating modern programming features and enabling interoperability. Its design is effective, with Objective-S proposed as a streamlined variant.
A Love Letter to Go
The author reflects on 12 years with Go, praising its simplicity, performance, and concurrency, while suggesting improvements in data structure handling and broader use in data science and machine learning.