Back-End

19 abr, 2011

Um olhar sobre o Haskell

Publicidade

Texto original disponível em http://programmingzen.com/2007/03/13/haskell-eye-for-the-ruby-guy/

?

Eu
adoro antecipar tendências na indústria, porque isso pode dar aquele
sentimento gostoso de que você apostou no cavalo certo. Particularmente, eu
sinto grande satisfação em ver uma pequena e acolhedora comunidade crescer, e
lentamente observar colegas programadores adotarem a linguagem, o framework ou
a tecnologia com que eu me importo tanto. Esse é um tipo de evangelismo que eu
gosto: levar inovações que encontro à atenção de outros programadores, o que
pode contribuir para uma maior produtividade ou para uma produção melhor de
software. É uma questão de sensibilização, não existe intenção de forçar nada a
ninguém.

Quando
uma massa crítica é atingida, você está na crista da onda, pronto para ajudar e
expert o suficiente no assunto. Esse foi o meu caso com os primeiros
lançamentos beta do C#, em uma época em que a maioria dos desenvolvedores não
tinha a menor idéia do que era essa nova plataforma de programação (.NET).
Alguns anos depois, me encontrei em uma situação semelhante quando conheci o
Ruby, antes que o Ruby on Rails o tivesse popularizado.

Não
é um jogo fácil, porque existem muitas opções, um monte de linguagens e
frameworks interessantes. O tempo é limitado e é muito fácil apostar no cavalo
errado. Mesmo estudando uma linguagem com bastante potencial, descobrir qual
será a próxima sensação do momento não é algo imediato. Na verdade, tanto o C#,
antes de ter sucesso comercial, e o Ruby antes do Rails não me ajudavam a
conseguir emprego. Mas, eventualmente, os dois ajudaram.

As
razões por trás do desejo de gastar tempo e recursos em aprender algo novo não
deveriam girar unicamente na perspectiva de conseguir um bom emprego. É mais
pela alegria de aprender novos conceitos, permitir que sua mente se curve a uma
imensidade de paradigmas, dentro de diferentes ambientes e comunidades. Ter a
movimentação certa é o ponto chave. O ganho monetário é mais um subproduto.
Para citar o The Pragmatic
Programmer
:

Aprenda pelo menos uma nova linguagem (de programação) a
cada ano. Linguagens diferentes resolvem os mesmos problemas de maneiras
diferentes. Ao aprender várias abordagens, você pode ajudar a expandir seu
pensamento e a evitar ficar preso em um caminho.

 

Então, alguns meses atrás, eu me perguntei, o que vem
agora?

O
futuro é funcional e concomitante

Antes
de eu decidir qual linguagem valia a pena estudar em profundidade, e antes
mesmo de tentar sugerir para os leitores aqui, é importante dizer
quais são as principais características que eu considero ao fazer minha escolha. Eu
mencionei um diferente paradigma como primeiro requisito. Como colocou o
ganhador Alan Perlis do prêmio Turing:

Uma
linguagem que não afeta a maneira que você pensa sobre programação, não vale a
pena conhecer.

Para mim, isso excluiu linguagens que eram muito parecidas
com aquelas que eu já conhecia bem (p.e. Perl ou Smalltalk).

Nós
também estamos em um momento de viradas no setor de desenvolvimento, porque os
produtores de CPU estão focados na produção de múltiplos cores/processadores, em vez de meramente tentar aumentar a velocidade de uma única CPU. Isso, mais do
que velocidade crua, introduz uma mudança radical de requisitos para programadores.
Se nós temos 2, 4 ou 16 cores, é melhor começarmos a pensar em como desenvolver
aplicativos que tiram total vantagem deles. Programações concomitantes e
paralelas podem ser bastante tediosas e propensas a erro ao adaptar linguagens
que não são designadas para esses requisitos. A atual falta de linhas nativas
do Ruby é particularmente infeliz nesses cenários, e isso significa que o Ruby
vai tirar vantagem de um único processador.

Meu
terceiro requisito, que adicionalmente especifica o primeiro deles, era que a
linguagem de programação precisava ser funcional. A sempre crescente
complexidade dos softwares requer o poder de abstrações de alto nível e do
paradigma funcional, o qual nos ajuda a adaptar um estilo de programação mais
declarativo em que os efeitos colaterais são marginalizados.

Existem
duas linguagens de programação que eu mencionei alguns meses atrás que
correspondem a esses requisitos muito bem: Haskell e Erlang. Há um ano, eu comecei a demonstrar interesse em
direção a ambos, mas favorecendo o Haskell, apesar da excelência em cenários
concomitantes do Erlang. Em 2006, no entanto, eu praticamente coloquei de lado
todo meu interesse por eles, tentando focar em aprimorar minhas habilidades já
adquiridas. Por já ter cobrido o básico do Haskell e do Erlang algum tempo
atrás, já era hora de eu tomar uma decisão e escolher um novo desafio.

Muitos
colegas blogaram sobre o anúncio dos Pragmatic
Programmers
a respeito do livro sobre Erlang, escrito pelo autor da linguagem, Joe Armstrong. Essa é uma
boa notícia, porque existe grande necessidade por um livro autoritário e
acessível sobre o assunto. Tanto que eu informalmente propus à comunidade
deHaskell
para entrar em contato com Dave Thomas se interessados em produzir um livro desse calibre para o
Haskell.

Erlang
é muito tentador, e eu compraria aquele livro só para promover a escrita de
excelentes livros sobre assuntos menos comuns. Nós não precisamos do milésimo
livro sobe Java, nós desesperadamente precisamos de ótimos livros em tópicos
não tão populares, como Haskell, Erlang, Clean, OCaml, D etc.

Os
Pragmatic Programmers têm sido bastante influentes na comunidade Open Source e
têm, com certeza, contribuído para o sucesso do Ruby. Não existe dúvida de que eles
serão cruciais para o Erlang também. Seu
livro sobre o Erlang não será a única razão para me fazer pensar que o Erlang
será mais popular que o Haskell no futuro. Apesar disso, minha escolha é o
Haskell, e eu tenho concentrado meus esforços em ganhar conhecimento profundo
nele.

O
Haskell é uma linguagem de programação extremamente fácil de aprender. Desculpe, eu não poderia dizer isso com a
cara lavada. Deixe-me colocar de outra maneira: Haskell é uma linguagem fácil
de aprender se você é um matemático. Mas não é, definitivamente, a mais fácil
para programadores comuns. Isso vai custar muito ao Haskell em termos de
popularidade. O Erlang é mais fácil de aprender se você tem experiência focada
em uma perspectiva orientada para o objeto, imperativa, porque, diferentemente
do Haskell, ele não é puramente funcional. No entanto, eu absolutamente amo a
mudança radical de paradigma do Haskell, os Monads, referenciais de
transparência e falta de efeitos colaterais. Além disso, eu acredito que é a
ferramenta correta para desenvolver sistemas de software sólidos e confiáveis
no futuro. É uma linguagem de programação extremamente avançada, que faz você
reconsiderar a maneira que você pensa sobre programação. Possivelmente, uma das
poucas linguagens de programação que são capazes de expor os limites do…
Ruby. Ele pode ser bastante complexo para muitos, mas eu adoraria contribuir
para fazer com que o Haskell ficasse mais fácil de aprender, mas não podemos
esquecer que não se pode esperar que ele seja muito fácil, nem que se torne tão
popular como o Ruby. Em vez disso, é de se esperar que seja poderoso e capaz
de produzir programas menos propensos a bugs. Citando E. W. Dijkstra:

A técnica correta é claramente adiar suas preocupações em
termos de aceitabilidade geral até que você tenha alcançado um resultado de tamanha
qualidade que ele mereça ser aceito. É a significância da sua mensagem que deve
justificar a importância que você dá para a sua apresentação, pode ser que sua
“inusitabilidade” seja o que torne a importância necessária. E, em segundo
lugar, o que é “geral”? Albert Einstein falhou porque a Teoria da Relatividade
é muito difícil para o estudante comum do Ensino Médio?

 

É
bem possível que outras linguagens continuem integrando recursos,
particularmente o Haskell pelo lado funtional e o Erlang pelo modelo
concomitante, mas eu escolhi dar uma chance para a “coisa real”. Eu adoro as
vantagens tecnológicas que o Haskell me proporciona e ele tem sido meu
interesse pessoal por algum tempo. É uma linguagem muito bonita, que eu
recomendo com toda convicção para os programadores mais aventureiros do Ruby e
do Phyton.

Como
começar a usar o Haskell

Se
você está interessado em explorer o Haskell, sua
wiki oficial

tem muitas informações. Para dar os primeiros passos, sugiro o seguinte:

  1. Pegue o Glasgow Haskell
    Compiler
    , que é o compilador mais
    popular do Haskell. Ele navega com o GHCi, que é um console interativo
    similar ao irb para Ruby e Idle para Python;
  2. Se você é mais inclinado ao lado matemático, leia A gentle introduction to Haskell. É pequeno e tem uma ótima introdução, mas se você o
    considerar gentil como um raivoso Rottweiler, você provavelmente vai
    preferir começar com o  Haskell Wikibook ;
  3. Como referência, use Hoogle – The
    Haskell API Search Engine
    ;
  4. Se cadastre no Haskell-Cafe newsletter e no
    irc.freenode.net channel #haskell;
  5. Se você tiver tempo, assista às Aulas em vídeo em inglês de uma
    Universidade Alemã (2005-SS-FP.V01 to 2005-SS-FP.V26). Eles introduzem o Haskell
    passo a passo, então você pode achar a ajuda deles um pouco devagar.