As Andrew Hunt and David Thomas say in the [Pragmatic Programmer](https://amzn.to/2WKkxuZ), there's no such thing as the best programming language, just the best programming language for the job in hand. However, if I _had_ to choose the best language it would be Lisp. Here's why: The following code is written in Emacs Lisp. It prints out all the elements of a list `(cl-loop for element in mylist do (print element))` In the code below I've set _mylist_ to equal the numbers one to five. Evaluating the loop will, unsurprisingly, print the numbers one to five. ```lisp (setq mylist '(1 2 3 4 5)) (cl-loop for element in mylist do (print element)) => 1 2 3 4 5 ``` You're probably thinking you can do the same in Python or Java or whatever your preferred language is, and you'd be right. But can your preferred language do this? ```lisp (setq mylist '(cl-loop for element in mylist do (print element))) mylist => (cl-loop for element in mylist do (print element)) ``` In the above code I've set _mylist_ to be the loop itself. That means I can set the loop code to loop across itself and print itself out one word at a time. ```lisp (cl-loop for element in mylist do (print element)) => cl-loop for element in ... etc ``` In Lisp, code is data. So _mylist_ is data; it's a list of symbols: cl-loop for element etc. But I can also evaluate _mylist_ in which case mylist will be a set of instructions to loop across itself and print itself out. ```lisp (eval mylist) => cl-oop for element in ... etc ``` Or to put it another way, I've just written a list that can read itself! The thing that makes this possible is the fact that Lisp is a [homoiconic language](https://en.wikipedia.org/wiki/Homoiconicity): programs written in such a language can be manipulated as data using the language. Things like this give me a warm glow inside. They remind me why I love coding so much.