Sussurros num café: uma conversa sobre LISP

DESENVOLVIMENTO DE SOFTWARE | 23-05-2024
Sussurros num café: uma conversa sobre LISP
Sussurros num café: uma conversa sobre LISP
É uma tarde quente de primavera em Lisboa. João, cansado de horas de videoconferências na SISCOG, precisa de uma pausa e dirige-se a um café nas proximidades. Lá dentro, ouve inesperadamente uma discussão intrigante entre colegas, Zé e Maria, sobre uma linguagem de programação. Zé elogia apaixonadamente a sua elegância e poder, enquanto Maria permanece cética. O debate revela a beleza e o potencial ocultos da linguagem.
Sussurros num café: uma conversa sobre LISP

 

João Pavão Martins, CEO,  @SISCOG  |  12 min leitura

___________

 

Estava uma daquelas tardes quentes de Primavera.

Apesar de eu estar na SISCOG Lisboa tinha passado as duas últimas horas em vídeo conferência. O meu gabinete estava bastante quente pois o condomínio ainda não tinha ligado o “chiller”. Eu estava cansado e cheio de sede. Olhei para as opções em cima da minha secretária: duas garrafas de água, provavelmente quente. Depois de uma tarde intensa, que incluiu duas horas contínuas de reuniões, pensei que merecia algo melhor neste fim de dia e decidi ir beber uma cerveja aos “Manos”, como chamamos carinhosamente ao café ao lado da SISCOG. Disse à Lídia que voltava já e meti-me no elevador que desta vez me levou sem percalços ao R/C.

No Campo Grande estava uma daquelas tardes lindas com o céu de um azul intenso que só vimos em Portugal. O trânsito para sair da cidade começava a adensar-se.

Entrei no café e reparei em duas pessoas da SISCOG, o Zé e a Maria, sentadas a uma mesa numa discussão animada. Eles nem me viram. O Zé, com óculos de armação grossa e uma barba bem aparada, entusiasta da tecnologia usada na SISCOG, gesticulava animadamente enquanto falava. Do outro lado, a Maria, recém-contratada para o Departamento de Produtos, de cabelo curto e expressão tranquila, ouvia atentamente, ocasionalmente assentindo com a cabeça.

Dirigi-me ao balcão e pedi ao Fábio uma imperial.  Enquanto esperava, ouvi a Maria mencionar a palavra LISP, o que despertou a minha atenção. Concentrei-me a seguir discretamente a conversa.

Dizia o Zé — mas como é que tu podes dizer que a sintaxe do LISP é estranha e confusa, que parece mais uma sequência aleatória de parênteses do que um código organizado, que frustra os programadores modernos. A sintaxe do LISP é linda! É baseada num único conceito, as expressões-S, permitindo que os programadores escrevam código conciso e legível que é fácil de entender e modificar. A sua notação prefixa corresponde a um modo uniforme para representar aplicações de funções. Eu concordo que a sintaxe do LISP pode parecer intimidadora no início, mas uma vez que te habituas a ela, a clareza e a expressividade do código são incomparáveis. A sua curva de aprendizagem pode também ser um pouco desafiadora, principalmente para ti que adoras o C++, mas a recompensa em termos de produtividade e flexibilidade valem a pena o esforço para aprender a linguagem.

— A minha curva da aprendizagem está-me a desanimar.

— Não desanimes, Maria, a curva de aprendizagem íngreme é precisamente o que separa os amadores dos verdadeiros mestres. Aqueles que se dedicam a conhecer o LISP são recompensados com uma compreensão mais profunda dos fundamentos da programação e uma capacidade de resolver problemas de maneiras que nunca imaginaram ser possível.

— Mas eu nunca sei qual é o tipo de uma variável e perturba-me não saber que operações posso efetuar com ela, responde timidamente a Maria.

— Maria, ouve-me bem, essa é outra vantagem do LISP em relação ao teu adorado C++ em que quando tu defines uma variável és obrigada a comprometer-te com o seu tipo. No LISP as variáveis não são tipificadas, permitindo que os valores sejam polimórficos e possibilitando a prototipagem rápida sem a necessidade de indicações explícitas do tipo. A ligação tardia significa que as definições de funções podem evoluir independentemente das suas invocações, promovendo um processo de desenvolvimento altamente adaptável e iterativo.

— Os meus amigos dizem-me que o LISP é um dinossauro da programação, uma relíquia do passado.

O Zé dá uma gargalhada face a este comentário e eu aproveito para pedir um pastel de nata.

— Nessa linha de raciocínio, argumenta o Zé, também podemos dizer que a Pietà de Michelangelo é um dinossauro da escultura, defendendo que o monte de pedras que existe no topo do Parque Eduardo VII, que alguns consideram uma obra-prima do João Cutileiro, é que representa a verdadeira escultura, Maria, não brinques comigo... O LISP é uma obra-prima da engenharia de software, criado por um matemático e um dos grandes cientistas do Século XX, John McCarthy.

 

John McCarthy (1927-2011). American computer scientist and cognitive scientist. Coined the term "artificial intelligence"

John McCarthy (1927-2011). Cientista da computação e cientista cognitivo americano. Inventou o termo “inteligência artificial”. Informação adicional mais a baixo..

 

E continua o Zé, na sua elencagem das características do LISP, para meu enlevo.

— É uma linguagem elegante e expressiva que permite aos programadores criar soluções inovadoras com uma facilidade sem precedentes. O código e os dados em LISP são essencialmente os mesmos, permitindo que os programas sejam facilmente manipulados e transformados usando funções. A sua sintaxe altamente flexível e uniforme, apresenta a característica da homoiconicidade, conceito introduzido por John McCarthy no início dos anos 1960, com o significado que o código do programa é representado na mesma forma que a sua estrutura de dados principal, a lista. Esta propriedade permite que os programas em LISP manipulem e transformem o seu próprio código como dados, possibilitando a auto-inspecção e a meta-programação. Uma vez que os programas podem inspeccionar, modificar e gerar novo código durante a execução, o LISP permite que a própria linguagem seja estendida e customizada pelo programador. A homoiconicidade também simplifica as tarefas de geração e manipulação de código, facilitando a construção de ferramentas para tarefas como refatoração, análise de código e testes automáticos. A maioria das linguagens de programação a que tu chamas modernas, como o Java, o Python e o teu adorado C++, não são homoicónicas, o código é representado numa estrutura diferente dos dados que manipulam.

— Wahoo! Essa é nova para mim, estás-me a dizer que em LISP eu posso escrever um programa que escreve programas? Como é que isso é possível?

— Como te disse, em LISP o código e os dados partilham a mesma estrutura, a lista. Tu podes escrever um programa que produz uma lista que sintacticamente tem a estrutura de uma função e dizer ao LISP para avaliar essa lista, o que gera automaticamente uma nova função dentro do teu ambiente. Podes também tratar uma função existente como dados, inspeccionando essa função e modificando-a se desejares.

— Isso parece mesmo fantástico, Zé, mas mesmo que o LISP tenha os seus nichos, a sua falta de popularidade geral torna-o impraticável para a maioria dos programadores. Aprender e manter conhecimento sobre o LISP é um investimento de tempo e esforço que a maioria dos programadores não está disposto a fazer.

—Se tu procurares uma linguagem fácil e popular, o LISP pode não ser a melhor escolha. Mas se tu valorizas a expressividade, a flexibilidade e o poder de meta programação, o LISP oferece uma experiência de programação única e gratificante. É uma linguagem para aqueles que apreciam a beleza e a elegância da engenharia de software. Além disso, o C++ também pode ser complexo e difícil de dominar, especialmente para principiantes. O seu extenso conjunto de recursos, incluindo conceitos como ponteiros, gestão manual da memória e herança múltipla, pode levar a um código muito difícil de entender, depurar e manter.

— Então porque é que o LISP não é amplamente usado?

— Parafraseando o Prof. Stuart Shapiro, “eles não entendem...”. Na realidade grande parte da comunidade da programação nunca conseguiu elevar-se acima da sintaxe com parêntesis embebidos e da notação prefixa, preferindo as linguagens declarativas convencionais, e nunca atingindo o grau de abstracção que o LISP fornece. A comunidade do LISP está limitada a grupos de aficionados que conseguem ver as verdadeiras potencialidades da linguagem. Mesmo a linguagem Julia que está a ser desenvolvida no MIT, tentando capturar muitos dos pontos fortes do LISP com uma sintaxe mais convencional, esbarrou na homoiconicidade que não consegue obter.

— Mas a comunidade de desenvolvimento do LISP é menor do que a comunidade de outras linguagens, o que significa que pode haver menos bibliotecas e recursos disponíveis para resolver problemas específicos.

— É verdade que a comunidade do LISP pode ser menor do que a de outras linguagens, mas é ativa e apaixonada, responde o Zé. Contudo existem muitos recursos disponíveis, como documentação extensa, bibliotecas e fóruns online, para auxiliar os programadores. Além disso, a natureza expressiva e meta programável do LISP permite que esses programadores criem as suas próprias bibliotecas e ferramentas personalizadas.

 

Cover of the book "Structure and Interpretation of Computer Programs," written by Harold Abelson, Gerald Jay Sussman, and Julie Sussman, initially published by the MIT Press in 1985 and subject to several reeditions.

Capa do livro “Structure and Interpretation of Computer Programs”, escrito por Harold Abelson, Gerald Jay Sussman e Julie Sussman, inicialmente publicado pela MIT Press em 1985 e sujeito a várias re-edições. Detalhes sobre esta imagem mais a baixo.

 

— Existem muitos programas desenvolvidos em LISP?

— Bem, a SISCOG Suite é um exemplo notável, permitindo à SISCOG oferecer produtos totalmente adaptados à realidade dos clientes, ao contrário da nossa concorrência que exige que os clientes se adaptem aos produtos. Para além disso, inúmeras instituições continuam a usar o LISP. A sua presença é forte em áreas especializadas como a IA, processamento de língua natural e robótica. Empresas como a NASA, a Google, a Autodesk, a Cycorp e a Diffbot usam o LISP com sucesso para resolver problemas complexos nos seus domínios. E mesmo em outros sectores, como finanças e engenharia, o LISP continua a ser uma escolha preferida para aqueles que precisam de desempenho e fiabilidade. Por exemplo o Emacs, que estás a começar a aprender, é escrito num dialeto do LISP, dando-lhe a flexibilidade que irás em breve conhecer.

— Zé, acabaste de falar em desempenho, a ideia que eu tenho é que o desempenho do LISP é bastante inferior ao de outras linguagens como o C e C++.

— Falas naquilo que se tornou um mito urbano. É verdade que o desempenho do LISP foi uma preocupação no passado, mas com os avanços tecnológicos e as otimizações existentes nas implementações modernas, essa lacuna desapareceu e a meta programação pode ser usada para otimizar ainda mais o código para tarefas específicas. Contaram-me que há vários anos existia um programador na SISCOG, penso que se chamava Filipe, que como tu, defendia o C++, usando como principal argumento o desempenho dessa linguagem face ao LISP. A Administração deu-lhe a liberdade, e o desafio, de implementar uma parte do CREWS em C++ e comparar o desempenho da sua implementação com a do LISP. Ao fim de alguns meses o Filipe estava totalmente frustrado, por mais que tentasse, o desempenho da sua aplicação em C++ não conseguia bater o LISP.

—  Mas quanto à disponibilidade de recursos e suporte em diferentes plataformas? Isso ainda pode ser uma barreira para muitos projetos.

—  É uma preocupação válida, especialmente em nichos específicos de desenvolvimento. No entanto, o LISP tem uma comunidade dedicada que continua a criar bibliotecas e ferramentas para uma variedade de aplicações. Além disso, em campos como a inteligência artificial e o processamento simbólico, o LISP continua a ser a escolha preferida devido às suas capacidades únicas. Pode ser verdade que o LISP não é para todos, mas para aqueles que estão dispostos a mergulhar no LISP, as recompensas são incomparáveis. À medida que mais pessoas reconhecem o valor único do LISP e as suas capacidades de meta programação, estou confiante de que veremos um ressurgimento do interesse e uma maior adoção na indústria. Por enquanto, vamos concordar em discordar, mas não te surpreendas se o LISP acabar superando todas as tuas expectativas no futuro.

— Bem Zé, a conversa já está longa e agradável, mas tenho de me ir embora.

 

Ao pagarem as suas contas. o Zé e a Maria aperceberam-se da minha presença e cumprimentaram-me jovialmente. Ao saírem, já não me sentia cansado, continuei a saborear a minha imperial, sentindo um orgulho imenso na qualidade das pessoas que temos na SISCOG.

 

 

Vantagens do LISP

 

______________________

Informação Adicional

 

John McCarthy

John McCarthy (1927-2011) foi um dos pioneiros da inteligência artificial (IA), deixando um legado duradouro no campo da computação. A sua carreira foi marcada por inovações e contribuições fundamentais que moldaram a IA moderna. Entre as suas realizações mais notáveis, McCarthy cunhou o termo “Inteligência Artificial” em 1956, delineando uma nova área de investigação que visava criar máquinas capazes de realizar tarefas que, se realizadas por humanos, seriam consideradas inteligentes.

McCarthy foi o criador do LISP, uma das linguagens de programação mais influentes e duradouras, especialmente concebida para facilitar o desenvolvimento de IA. A sua abordagem visionária permitiu avanços significativos na manipulação simbólica e no desenvolvimento de sistemas de raciocínio lógico.

Além das suas contribuições técnicas, McCarthy teve um papel fundamental na criação do laboratório de IA da Universidade de Stanford, que se tornou um centro de excelência e inovação. Foi também um defensor incansável da investigação em IA, promovendo colaborações entre cientistas e incentivando o debate sobre as implicações éticas e sociais da IA.

A carreira de John McCarthy é um testemunho da sua genialidade e dedicação. As suas ideias e invenções inauguraram não só uma nova era na ciência da computação, mas também inspiraram gerações de investigadores a explorar os limites do que as máquinas podem fazer. A sua visão continua a influenciar e guiar o desenvolvimento da IA, consolidando o seu lugar como uma figura central na história da tecnologia.

 

Image of the cover of the book "Structure and Interpretation of Computer Programs"

A imagem corresponde à capa do livro “Structure and Interpretation of Computer Programs”, escrito por Harold Abelson, Gerald Jay Sussman e Julie Sussman, inicialmente publicado pela MIT Press em 1985 e sujeito a várias reedições. Por vezes conhecido por “livro do Feiticeiro”, é considerado um dos melhores livros já publicados sobre a programação. Para transmitir os conceitos, usa a linguagem Scheme, um dialeto do LISP.

A imagem é, simultaneamente, icónica e simbólica dentro da comunidade da programação.

Retrata um mago com um chapéu pontiagudo e um manto, realizando um feitiço com uma bola de cristal, na qual aparecem as palavras místicas do LISP, “Eval” e “Apply”. A assistente simboliza o programador.

No livro, a programação é vista como uma espécie de magia (um programa é o “feiticeiro” dentro da máquina) através da qual o programador exerce o poder de criar sistemas complexos e poderosos pela aplicação de conhecimento e competências.

O lambda (a representação de uma função em LISP) e a luz simbolizam a transformação mágica que ocorre quando o programador aplica o seu conhecimento para criar programas. Esta transformação é semelhante à magia, onde ideias abstratas são convertidas em sistemas tangíveis e funcionais.

O ato do mago de lançar um feitiço, significa o processo de programação – escrever código que instrui o computador a executar tarefas específicas, enfatizando o esforço criativo e intelectual envolvido na programação.

O livro tem como objetivo ensinar os leitores a pensar como cientistas da computação, cultivando a capacidade de abstrair e resolver problemas de maneira elegante e poderosa. Esta é a ideia principal subjacente à imagem, que a programação é um processo profundamente intelectual e criativo.