Se tens de perguntar o que é o jazz, nunca vais saber. — Louis Armstrong
O Elia Scotto publicou hoje um artigo no blog dele sobre Lisp. Não é um tutorial. Não é um “aprende Lisp em 10 minutos”. É uma explicação de porque é que Lisp merece o teu tempo, mesmo que nunca venhas a usá-lo profissionalmente.
E é exatamente o tipo de texto que me faz parar e pensar.
Lisp é estranha. Os parênteses, a notação prefixa, aquela sensação de que estamos a ler uma árvore sintática em vez de código. A primeira reação de qualquer programador é “o que é isto?”. A segunda é “isto não pode ser prático”. A terceira — se chegarmos lá — é “isto mudou a minha forma de pensar”.
O paradoxo Blub
O Paul Graham escreveu sobre o Blub paradox há mais de vinte anos. A ideia é simples: um programador que só conhece linguagens medianas não consegue reconhecer a superioridade de uma linguagem mais poderosa. Porque está preso dentro do seu próprio nível de abstração.
Eu já passei por isto. Durante anos vivi no ecossistema das linguagens mainstream. Achava que C, Java e JavaScript eram “suficientes”. Que tudo o resto eram variações superficiais. Que linguagens diferentes eram só ferramentas diferentes para o mesmo trabalho.
O Lisp mostra que não. Não é uma questão de sintaxe. Nem de performance. É uma questão de o que podes fazer com a linguagem. E a diferença não é quantitativa — é qualitativa.
Programas que escrevem programas
O que torna Lisp especial não é uma feature isolada. É a combinação de três coisas:
Homoiconicidade. O código é escrito na mesma estrutura de dados que o programa manipula. Listas. Tudo são listas. Código e dados partilham a mesma representação. Isto não é um truque de syntactic sugar — é uma propriedade fundamental que abre portas que outras linguagens nem sequer têm.
Macros. Não são as macros do C, que são substituições de texto pré-processadas. São funções que transformam código em tempo de compilação. Escreves código que gera código. E como o código são listas, manipular código é tão natural como manipular dados.
O sistema vivo. O REPL não é uma consola de testes. É o programa em execução. Mudas uma função e ela está imediatamente disponível no processo em execução. Sem recompilar. Sem reiniciar. Sem hot-reload feito com ferramentas externas frágeis. Está lá desde os anos 60.
O Scotto descreve isto bem no artigo: em Lisp, vais aprender a crescer a linguagem à volta do teu problema, e depois escrever o programa nessa linguagem. Não és tu que te adaptas à linguagem. É a linguagem que se adapta a ti.
Porque é que nunca houve “um tempo para Lisp”
Há décadas que se espera o momento do Lisp. O momento em que a linguagem mais poderosa do mundo se torna mainstream. Esse momento nunca chegou. E o Scotto é honesto sobre isso — provavelmente nunca vai chegar.
Lisp exige demasiado. Exige que repenses o que sabes sobre programação. Exige que trabalhes a um nível de abstração que a maioria dos programadores nunca vai precisar de alcançar.
Mas há algo de profundamente valioso em aprender uma linguagem que não vais usar no trabalho. Porque o que ela te ensina sobre programação não é transferível para mais lado nenhum. É um conhecimento que fica contigo, que informa todas as decisões que tomas noutras linguagens — mesmo que não escrito.
Quando aprendes Lisp, começas a ver padrões. Percebes que os design patterns do GoF são, muitos deles, features que faltam na linguagem. Percebes que a orientação a objetos não é o único paradigma. Percebes que a maior parte do que chamas de “limitação técnica” é só “a minha linguagem não deixa fazer isto”.
O que levo disto
Não uso Lisp no meu dia-a-dia. Provavelmente nunca vou escrever um sistema em Common Lisp ou Clojure para produção. Mas ter estudado Lisp — e continuar a ler sobre ela — mudou a forma como programo em tudo o resto.
Fez-me valorizar linguagens que me deixam expressar ideias sem lutar contra a sintaxe. Fez-me desconfiar de frameworks que prometem resolver problemas que a linguagem devia resolver sozinha. Fez-me perceber que REPL-driven development não é um luxo — é um padrão que todas as linguagens deviam ter.
O Scotto termina o artigo com uma nota que subscrevo inteiramente: não é uma única feature que faz Lisp valer a pena. É a combinação de todas elas.
Lisp é uma linguagem estranha, difícil, impopular. E é uma das experiências mais formativas que um programador pode ter. Se nunca lhe deste uma oportunidade, faz este favor a ti próprio: lê o artigo do Scotto, abre um REPL, e passa uma tarde a brincar com parênteses. Pode ser que descubras que o jazz afinal é mesmo bom.
Recursos adicionais
- Artigo original: A Road to Lisp — Why Lisp (Elia Scotto)
- Beating the Averages (Paul Graham) — o ensaio original sobre o Blub paradox
- Structure and Interpretation of Computer Programs (SICP) — o livro que ensina computação através de Lisp
- Practical Common Lisp (Peter Seibel) — introdução prática a Common Lisp
Comentários (0)
Nenhum comentário ainda. Seja o primeiro!
Deixar comentário