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.