Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Honestly, "just because I want to" sounds like a more compelling argument than talking about enlightenment. Mainly because the latter implies that people who don't know lisp are somehow unenlightened or lacking in some way - that comes across as really arrogant and it's clearly false since there are many successful and highly skilled programmers who don't know or care about lisp.

I kind of agree with the GP comment - nobody needs to learn lisp. The main reason to learn it is some personal interest or curiosity.



There is some enlightenment experience, when you get it. This it is when one figures out why Lisp is how it is: a language programmed in a data structure, programmable in itself. One can live without that enlightenment. One can also live without understanding recursion, but it was a small enlightenment for me when I understood recursion and how to use that in programming. There are a bunch of enlightenment experiences one can have. I had another one when I first read the Smalltalk books and later saw a Smalltalk system - I thought that was the end of programming, everything was done.

Alan Kay (the 'Alan Kay' of OOP and Smalltalk ) had an enlightenment experience with Lisp:

https://queue.acm.org/detail.cfm?id=1039523

"AK Yes, that was the big revelation to me when I was in graduate school—when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself. These were “Maxwell’s Equations of Software!” This is the whole world of programming in a few lines that I can put my hand over."

For background on this:

https://michaelnielsen.org/ddi/lisp-as-the-maxwells-equation...

> false since there are many successful and highly skilled programmers who don't know or care about lisp

Still they unknowingly may use a lot of things that were once pioneered in Lisp, like these: conditionals, functional programming, managed memory and garbage collection, evaluator/interpreters, read-eval-print-loops, image-based programming, ...


> when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself

Even histories of Lisp often don't emphasize this: Lisp was not, originally, invented as a programming language. It was a notation for describing the mathematics of computation. A variant of lambda calculus that could describe itself compactly.

The fact that eval could actually be implemented, was an accidental discovery. To quote McCarthy:

> Steve Russell said, look, why don't I program this eval ... and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bugs, and then advertised this as a Lisp interpreter, which it certainly was.

https://web.archive.org/web/20050405213907/http://www8.infor...


it was developed as a programming language from day one. It just had no such evaluator, until they came up with the idea and implemented it. There were Lisp programs already before that.


> Mainly because the latter implies that people who don't know lisp are somehow unenlightened or lacking in some way

But if you haven't learned Lisp you are absolutely lacking in some way as far as understanding programming languages. One obvious example is don't really understand what the url of this website is referring to (though I do suspect a huge number of today's HNers have never implemented the y-combinator).

To be clear, you can be an excellent software engineer and never touch or understand lisp, but if you are seriously interested in programming languages you really are missing a major part of picture if you don't know a lisp.

Anyone who is seriously interested in programming, beyond just creating software, absolutely must have experience in a lisp. It's completely fine if you aren't interested in programming other than solving a specific problem, but the idea that "nobody needs to learn lisp" is false.


What is it about lisp that's so important? Is it just the functional programming side? Metaprogramming?


The several important things about lisp that you won't find in other languages without learning lisp include (I'm considering all lisps here, including schemes):

- it's essentially a working implementation of the untyped lambda calculus, an essential model for thinking about computing outside of the Von Neumann architecture.

- It is a symbolic programming language which allows for unique ways of manipulating code as data. The only other programming language that I know of that offers symbolic programming to the same degree is Prolog (outside of computer algebra systems).

- The parens and prefix notation really are a powerful feature, despite being off putting to beginners. You are essentially programming an Abstract syntax tree. All programming language spend some of their time in this form, you just don't usually get to play with the code this way. This makes it incredibly easy to prototype ideas for languages and compilers in Lisps

The functional programming and meta-programming benefits naturally fall out of all of these. The reason metaprogramming is so powerful in Lisp is because of a combination of writing code in a tree structures and being a symbolic programming language.

The big picture reason that lisp is so great for people interested in better understanding programming is that it is a language that encourages you to write domain specific languages to solve your problems.

I'll be the first to admit that this is not great for real world software engineering, but if you want to understand programming better, it is essential.


Fantastic response, highly appreciated.

I've found more recently I want to solve problems with domain specific languages, so I'm totally on board with that. I would say that making dsls to solve problems is a great way to engineer software, as the code is usually testable and you don't need to modify it. Sort of where functional programming meets solid. Maybe not the best approach if you're in a startup though.


Sounds like you understand the pros and cons of DSLs: If you have a high functioning, disciplined software engineering team, a good DSL can smoke your competitors. If you don't have such a team, a DSL can smoke you.


> outside of the Von Neumann architecture

Lambda calculus is agnostic about stored program architectures. What it contrasts with is the Turing Machine model of universal computation.


This is a very common argument. It's true that Lispers sometimes come across as arrogant but that's because of the asymmetry inherent in evaluating programming language power. Paul Graham calls it the Blub Paradox.

http://www.paulgraham.com/avg.html




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: