Há muito ouço que aprender Lisp e ler Structure and Interpretation of Computer Programs te transforma em um melhor programador. Ainda não cheguei ao nível de ler e, principalmente, conseguir entender o grande SICP, mas comecei a brincar com Lisp há alguns meses.
Meu primeiro encontro com Lisp foi com Common Lisp. Comecei a ler o livro Land of Lisp, de Conrad Barski, que, por sinal, é ótimo e divertido, mas não consegui ir longe. Para mim o livro tem o passo meio lento, e eu não me entusiasmei com Common Lisp.
Após cansar de CL, parti para Scheme - mais especificamente Racket. Comecei a ler o livro Realm of Racket, inspirado em Land of Lisp. O livro segue o mesmo estilo, com muitas ilustrações legais e texto claro e conciso, porém sofre do mesmo problema de lentidão. Já Scheme não pareceu ser lá muito diferente de CL, e acabei de saco cheio novamente.
Ao não me entusiasmar com nenhum desses dois dialetos de Lisp, pensei em desistir e estudar outra coisa (provavelmente aprofundar-me em Haskell), até que encontrei Clojure. Já conhecia Clojure de nome, sabia que era uma linguagem meio hipster e volta e meia via um tópico sobre ela no Hacker News. Em suma, Clojure é um dialeto moderno de Lisp que roda na JVM, portanto é muito rápido e mantém a compatibilidade com Java - apesar de ser uma linguagem nojenta, por vezes é muito útil ;) – e tem uma boa dose de syntactic sugar na forma de macros.
Comecei a ler o livro Clojure in Action, de Amit Rathore, e até agora está muito produtivo. O passo é mais rápido que nos outros livros (ao custo das piadas ;), mas sem deixar brechas nas explicações. A base que adquiri nos outros Lisps e seguindo tutoriais na web permitem que eu aprenda mais rápido, o que deixa tudo ainda mais legal.
Gosto muito de desenvolvimento web, e acabei testando dois frameworks/bibliotecas para este fim: Compojure e Luminus. Ambos são leves e fáceis de aprender, e há grandes chances de que eu os use num futuro próximo.
Outra coisa interessante do ambiente Clojure é a ferramenta Leiningen, que permite gerenciar projetos, dependências, REPL e tudo mais de forma extremamente simples e “suave”. Comparado às ferramentas mais comuns do Ruby, é como se fosse um combo de RVM + RubyGems + Rake.
Ainda não sei se utilizarei Clojure no futuro, mas estou gostando demais da linguagem, e ainda pretendo estudá-la por algum tempo.