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.
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, ...
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...
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.
- 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.
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.
Lambda calculus is agnostic about stored program architectures. What it contrasts with is the Turing Machine model of universal computation.
The Lindy effect means that the odds are very good that if you do learn Lisp it will remain relevant for the rest of your life.
I.e., it is always weaker with the attribution than without.
Even though Common Lisp isn't used widely it never hurts to learn new things (especially when those things can be quite different than what you normally use).
What benefits would learning Lisp provide me so that I "Need" to learn it?
Sure, I can create an entirely new operator that becomes valid syntax, like `*` which creates an exponential operator. But why is this more productive than simply defining a "exponent()" function or something similar?
It seems also that tech debt would accrue incredibly fast as joining a lisp codebase would require learning almost an entirely new set of syntax. I'm sure I 'm missing something, but I can't see at all why I need to learn LISP. It's cool, neat, and wonderful... but that's about it from my understanding.
> I don't see why this would be any different than defining a function like I normally do.
Because with functions you don't define any new syntax or implement a DSL; you don't have access to the compiler during read, compilation, and run time. This allows you to easily extend the language: do you miss list comprehensions from Python? Add it yourself with a macro. Want to generate boilerplate code? Macro. Prolog compiler? Yes. Basically anything in this book: https://github.com/norvig/paip-lisp
> But why is this more productive than simply defining a "exponent()" function or something similar?
It's not just about defining a new operator, you can basically implement a DSL with C-like syntax if you want to: https://github.com/y2q-actionman/with-c-syntax
Though one of the core Lisp/Scheme books now has a JavaScript edition: https://mitpress.mit.edu/books/structure-and-interpretation-...
Need is always relative to a goal, so what you are saying there is there is no legitimate goal for which learning Lisp would be an appropriate step.
Also, I've been told I "can't avoid" some branch of algebra (I've never touched it since).