Lisp reminds me of the Organians. It seems simple and kind of boring until you try something you know is impossible and it just works. It spoils you for other languages.
Lisp could easily express ideas that I didn't know how to express in other languages. Just as Pascal had made it possible for me to express ideas that I had no idea how to express in BASIC.
Lisp gave me new tools. Just as earlier Pascal had given me new tools.
The Organians told Kirk and the Klingons that they would one day be friends. And rise to their level. Ironically, languages in the 90's and 2000's borrowed more and more from Lisp. Starting with most languages of the last quarter century having Garbage Collection.
It's such a elegant thing, it ruins me for doing "professional" programming
It's like some post-war syndromes where people feel the hollowness and pointlessness when seeing other people living a normal, meaningful life, or have to go back to the village from large cities.
It's like a red pill, it always bugs me like "I wish I have macros here", or "type classes here", "Erlang process here", "Hindley-Millner or structural typing here"... Actually those languages are not that outstanding, however, it defeats the motivations to make small in-box-improvements like "I'm going to use some OO pattern to make this more SOLID".
You can also try hard to slowly push the industry forward but it's still tens of years to be "professional" based on the history you have read, which sound very defeating for mortals, too.
Imagine yourself has been throwback to an early 90s project where the mantra is still "if it ain't broke, don't fix it", and everyone endlessly patches everything while rejects new technologies because no one else is using them.
I don't know if that's necessarily a trait of the paradigm or of some of its adherents. I've felt that same calming effect but with other languages - and honestly I've found lisp code to be masochistically terse and opaque a lot of the time, although I've only messed with Arc and dabbled with Clojure and Racket. I guess that just means I haven't found enlightenment yet.
I would really dislike to work with such people in a professional setting. Can you imagine having PR with someone who thinks code should inspire an emotional response?
You know what’s beautiful? Simple and effective things, even if you can’t fall in love with the way they look.
"I don't really want this glitzy thing. Functions, plain data and a bit of polymorphism is all it takes to solve the problem"
While reading about Common Lisp and Smalltalk/V releases on Computer Shopper?
Sounds an interesting time travel proposal.
Personally, I find that the more feverish I am, the more attractive I find Lisp. It’s one of the first signs that I am coming down with a cold.
Not really sure where to go with this, but I found that getting away from programming for 6 months or so this last year has really helped my psyche.
ml
prolog
apl
forth
they all 'ruin' your life by showing you everything's wrong about daily realities.
oh, and smalltalk
PS: if I missed some, tell me
https://www.youtube.com/watch?v=z_dt7NG38V4
One of the first workstation OSes written in a memory safe systems programming languages, early 80's at Xerox PARC.
I think it comes down to these languages are mostly used by enthusiasts on their own projects, without the daily realities of evolving business requirements and a legacy code base built by mediocre developers.
I've never written lisp professionally, but every few years I try to get back to it to see if the feeling is still there -- only to get pulled away from the endeavor by life stuff before I can dig the same depth.
I couldn't have said it better myself. I've come to think that APL and Lisp represents two diametrically opposing philosophies about structuring programs. Right now I'm leaning toward the opinion that the ball of clay approach has run its course and is no longer (or maybe never way) viable. The thousands of layers of abstraction is no longer viable, for both performance and productivity reasons.
Anyways it would interesting to see 3D-environment where this Lego-paradigm is implemented. I sometimes think about it, but do not find really beautiful way to name things, except tags with letters on them.
Any language without static types brings me a certain degree of anxiety, thinking at all times about all the ways a given piece of code might be misused and go terribly wrong.
But in Lisp you add another layer: that anything looking like a function call could actually be a macro, further blowing open the door of possibilities for what an unfamiliar piece of code might do.
Of course, parsing Lisp is an exercise in tranquility ;)
It's all about the programmer's personality, I think. Graydon Hoare expressed my feelings: "Basically I've an anxious, pessimist personality; most systems I try to build are a reflection of how terrifying software-as-it-is-made feels to me. I'm seeking peace and security amid a nightmare of chaos."
But the biggest thing I look for in a programming language, is “how many bugs can it stop me from writing”, and a lack of any compile time checking is what keeps me from even bothering to look at it.
I’ve spent many years programming in perl, then ruby, before finally using Go and then Java and then Typescript and now Swift, and I feel like the period of time where I would tolerate a lack compile-time type checks is gone. It’s just table stakes at this point.
Maybe lisp is the end game for non-type-checked languages and it’s the best a dynamic language can hope to be. But I just don’t care at this point, because that whole category of languages seems to be a broken idea to me at this point.
Common Lisp more than compensates due to some key features:
1. any bug can be corrected at runtime without having to stop the program
2. the type system is completely strong, not weak
3. it actually has a pretty nice type system.
4. the conditions-restart exception handling system is world-class
Not by default. And herein lies the core social problem with Lisp:
[new/non-lisp programmers]: Lisp doesn't have X!
[lisp programmers]: Just make your own X! Lisp is extensible! Or pick from the twelve implementations already out there!
Here's the thing: probably all of those implementations are going to be half-baked. And good luck finding editor support for the one you end up going with when there's no standard to rally around. And have fun re-learning the nuances of basic language features every time you join a new team.
A simple core language does not mean simple code:
Can you do this in an automatable and testable way? I.e. can you provide a migration script as part of an automated deployment to an Ops team?
Personally I feel better having some of those constraints even on throwaway solo projects, though that might not be perfectly rational.
I will also say that Clojure's heavy focus on immutable data helps somewhat with this problem. You can at least count on functions not having side-effects. Usually. Hopefully.
That's FUD. Just make your code modular. Lisp gives you tools: namespaces, and systems.
>You can at least count on functions not having side-effects.
The great majority of functions in Lisp don't mutate data.
Lispers also have features and methods that mean they sleep peacefully at night too
In a modern lisp like Clojure a type checking tooling is a helpful but small aspect of that
Think about all the ambiguities in the English language. Imagine if you just couldn't get your point across to someone because the words you chose together bring up a different image than the one you intended. And if you really want to have nightmares think about all the ways using the public highway might go wrong.
At some point you have to stop worrying about things that aren't a problem in practice. Type errors represent a tiny proportion of the bugs in dynamically typed programs. It just isn't a problem. Emacs doesn't even have namespaces or anything, yet it still works.
These sound like negatives, but it's better to learn these things up front.
One domain where I'd go with Lisp/Clojure/Scheme any day are banking/financial switches - software used to communicate between banks, card providers, POS devices, even ATMs. These programs usually has to support tons of weird binary protocols (among other things), designed in 70-ties and 80-ties. To make matter worse, bigger banks adds own "juice" to those protocols, making hybrid monstrosities. And usually, you can't find documentation about those protocols, unless you are deeply in banking business.
>The AIMA/PAIP code in Common Lisp, for instance, are ugly as hell
perhaps it just means you are familiar with python, not lisp.
I have 3 years of experience with both and let me tell you, there is nothing elegant in Python: there's nothing elegant in having to deal with one-line lambdas, global interpreter lock, 30x-50x longer execution times than Lisp, distinction between statements vs expressions, mutability everywhere, a flaccid OOP system, no interactive development features, and horribly written libraries.
Lisp isn't my favorite syntax, but a piece of Lisp code is much less likely to have hidden gotchas.
Actual production code may look different, sometimes very different.