Borba on Software Desenvolvendo Software com Qualidade.

27Apr/106

Porque linguagens funcionais são importantes

Dos 3 principais paradigmas de programação (funcional, imperativo e orientado a objetos),  o funcional é o mais antigo. A primeira linguagem de programação funcional foi criada em 1955 (IPL) e a mais popular LISP foi criada em 1958. Apesar de surgirem um pouco depois (Fortran e COBOL foram criadas respectivamentes em 1956 e 1959), as linguagens imperativas tiveram maior popularidade. Mesmo sem ter alcançado o mainstream, o paradigma funcional continou recebendo investimentos ano após ano até meados dos anos 90, quando a turma das linguagens imperativas se fundiu definitivamente com o pessoal de orientação a objetos (C++ e principalmente Java são exemplos) enterrando as linguagens funcionais no lixo da história. Acabaram as esperanças desse paradigma se tornar parte do mainstream. Será?

O tempo passou e nos últimos anos alguns sinais começaram a aparecer. Erlang (linguagem funcional proprietária criada pela Ericsson) que foi banida e distribuida de forma open-source em 98, volta a ser utilizada pela Ericsson (e por muitos outros) em 2004. A Microsoft lança o F# (linguagem funcional para a plataforma .NET). O pessoal do Twitter reescreve seu back-end em Scala (linguagem funcional e OO para a plataforma Java). C# incorpora conceitos funcionais na sua linguagem para dar suporte ao LINQ. A Google publica artigos mostrando como utiliza o paradigma funcional para armazenar e recuperar dados. Porque esse interesse no paradigma funcional foi renovado? Qual o pulo do gato?

Devido a proximidade de limites técnicos e preocupação com consumo de energia, o pessoal de hardware está focando no desenvolvimento de novos processadores em soluções de múltiplos cores. Em breve teremos processadores com centenas de cores. Para se beneficiar deste panorama, temos que escrever softwares que executem de forma paralela. A boa notícia é que é muito mais fácil escrever código concorrente em liguagens funcionais do que em linguagens imperativas.

Não existe um único paradigma que seja indicado para resolver todos os tipos de problemas. Precisamos aprender (ou reaprender) o paradigma funcional, que foi abandonado por muito tempo. Precisamos de linguagens que incluam de forma coerente vários paradigmas, para que a gente possa escolher a melhor forma de resolver um determinado problema. Por fim, precisamos aprender Scala, que me parece a mais promissora nas novas linguagens multi-paradigma.

Comments (6) Trackbacks (1)
  1. Muito bom o post. Eu particularmente prefiro as funcionais e com C# já deu pra matar a vontade. Concordo que o caminho é misturar mesmo. No final, a capacidade de entender o que cada paradigma tem a oferecer sabendo utilizá-lo, é o que vai diferenciar os desenvolvedores. Isso trará produtividade no desenvolvimento e performance e qualidade ao software.

  2. Estamos no fim da era dos programas sequenciais, tudo que existe hoje vai precisar reescrito para aproveitar ao máximo os recursos dos processadores multi-core. O paradigma funcional vai ter um importante papel nesta evolução, mesmo que seja através da incorporação de conceitos funcionais a linguagens imperativas/oo (como no caso do C#).

  3. Bom post, mas ficou parecendo que escreveu só a introdução. Ou será que fui com sede ao pote? :-)

  4. Hahaha… é uma introdução mesmo… estou preparando um material mais detalhado.. :)

  5. Fala Borba!

    Nunca fui de pesquisar muito linguagens funcionais fora o que tive que pesquisar por conta de PLP (na graduação e no MSc) mas elas realmente apresentam uns conceitos interessantes – o de tratar tudo (atributo, método, … ) sem distinção talvez seja o que amplie mais os horizontes de quem está habituado com as imperativas. Mas me diga uma coisa, na sua opinião qual o motivo pra elas não terem emplacado antes? Muita gente argumenta que a falta de implementações eficientes atrapalhou bastante… já vi outras pessoas argumentarem que havia um problema de impedância com I/O nas linguagens funcionais (ainda há ou já tá bem resolvido?)…
    Agora é fato que volta e meia no Java a gente faz algo como o “fold, filter, map, …” e pensa “isso estaria tão mais elegante no Haskell”…

    abs!

  6. O que aconteceu para não ter emplacado eu não sei, não vou nem me arriscar a dizer. De qualquer forma, agora a situação é diferente. Estamos começando a usar linguagens que possuam um mix de paradigmas. Linguagens que incorporem conceitos funcionais da mesma forma que incorporaram conceitos de orientação a objetos e imperativos. Com todas essas opções temos mais chances de usar a ferramenta certa para o problema certo.


Leave a comment