I try. I really do. I read articles, I write code, I frustrate myself and I force myself to spend countless hours making things work. Whatever I do, I keep bumping my head into yet another wall. I’m trying to grasp Lisp.
According to John McCarthy, Lisp represents a local optimum in the space of programming languages. What he and everyone else fail to tell people learning Lisp (at least me) is that is represents a global minimum in the space of programming language learnability.
There are many good resources to help understanding Lisp everywhere, ranging from almost philosophical over paedagogical introductions to more technical articles. I have also managed to do something in Lisp, like implementing FastICA for Independent Component Analysis in Clojure, a dialect of Lisp, and at the moment, I’m trying to implement FP-growth, a well-known and fairly scalable Association Rule Mining algorithm. And yes, whenever something succeeds (after many hours of pondering), it is a pleasing experiencing to notice how few lines are sometimes needed to accomplish complex tasks.
But I’m not satisfied. I’m frustrated. When I was learning Java in the early days of my academic career, I was rarely frustrated when faced with new problems to solve. But learning Lisp is like having a very unstable nuclear power plant living in the brain. Meltdowns are inevitable and occur quite often.
And the worst thing about Lisp is not Lisp itself. It is the feeling of incompetence that hits you in the face whenever you cannot figure something out. The feeling of mediocrity is not very pleasant and the meltdowns are tough on one’s self-esteem. The thought: “Maybe I am just an average programmer” pops up constantly.
“I want to believe” that Lisp is great. I hope I will see the light. I’m looking for the promised epiphany. And I most certainly will not settle with mediocrity… ever.