Eu sei que Lisp e Haskell são linguagens de programação lógica e funcional, respectivamente, mas o que exatamente isso significa? Como eles diferem de outros idiomas? Ouvi dizer que aprender isso fará de você um programador melhor e melhorará sua lógica. Isso é verdade, e se eu for aprendendo Lisp ou Haskell a um nível competente, minha programação melhorará e serei melhor em lidar com qualquer problema em qualquer idioma? Eu só queria saber se vale a pena o esforço de aprender. Essas linguagens também são úteis em áreas como GUI e gráficos ou são úteis apenas para aplicativos de console?
41
Respostas:
É muito parecido com o fato de aprender matemática melhorar suas habilidades analíticas e aprender literatura latina / clássica melhorará suas habilidades de escrita.
As pessoas que criaram esses idiomas pensaram muito sobre o que significa escrever um programa. E essas línguas são os resultados dessas pesquisas.
Dito isto, aprender Java também o tornará um programador melhor. E aprendendo C. Os benefícios reais vêm do aprendizado de idiomas com uma filosofia diferente. Então você pode ter sua própria opinião sobre a forma como um programa deve ser escrito.
Editar
Sei que essa resposta não é tão útil para pessoas que ainda não aprenderam haskell e / ou cece. Aqui estão alguns exemplos para explicar melhor o que quero dizer
LISP
O Lisp acredita que a sintaxe deve ser mínima e que tudo deve ser uma lista ou uma primitiva (Lisp significa Processamento de lista). Mesmo os programas são principalmente lista contendo outras listas e símbolos. Lisp permite manipular programas como lista e gerar novos programas em tempo real. Daí o
code is data and data is code
lema inteiro .A conseqüência direta é que as linguagens Lisp permitem definir qualquer interface desejada. Um bom exemplo é o compojure, que é uma estrutura da web clojure. Aqui está a aparência de uma função de roteamento
Outro bom exemplo é a estrutura de modelos de soluços:
Como você pode ver, o resultado é tão conciso quanto no DSL, como o bigode, mas permite que você use os recursos de linguagem como
(for [x (range 1 4)] block)
. Ainda melhor, você tem todas as ferramentas para abstrair e estruturar seu código.Em outros idiomas, a sintaxe é mais complexa. Você não pode ler um programa Java como um monte de listas. Mas, usando o Lisp, você tem uma idéia melhor sobre como deve ser a interface ideal e o que pode ser abstraído em seu código como dados. Também ajuda a ver seu idioma favorito como uma estrutura de big data e a entender melhor sua semântica.
Haskell
Haskell acredita em forte digitação estática e pureza. Funções puras são como funções matemáticas: elas são definidas em um conjunto de valores e as mapeiam em outro conjunto. A função não tem efeitos colaterais e os valores são imutáveis. A pureza é interessante porque não é algo que uma linguagem multiparadigma possa ter. Uma linguagem é pura ou não.
Uma conseqüência é que você não pode executar ações de IO quando quiser (os haskellers acreditam que isso é uma coisa boa). As ações de IO são definidas como transações, que são valores puros. O
main
valor de um programa haskell é uma transação de E / S executada quando você executa o programa.Você precisa lidar explicitamente com o fluxo de dados no seu programa. Você não pode fazer a comunicação de dois componentes escrevendo e lendo coisas em uma variável global. Você tem que construir e passar valores.
Outro recurso mencionado por Jimmy Hoffa é o sistema de tipos ricos. Enquanto outros idiomas têm digitação estática, no haskell você pode ter coisas como:
length :: [a] -> Int
(função de uma lista de a para int)map :: (a -> b) -> [a] -> [b]
(função que recebe umaa to b
transformação e uma lista de a e retorna uma lista de b)O bom é que não preciso explicar o que essas funções realmente fazem: você já entende o comportamento delas. Além do mais, as funções com essas assinaturas não podem nada além de calcular o comprimento de uma lista e mapear uma transformação sobre uma lista.
Em outras linguagens digitadas, as hierarquias de classe combinadas com a mutabilidade tornam o tratamento desses tipos um pesadelo. Você precisa entender coisas como covariância e contravariância, que são impossíveis de corrigir da perspectiva da linguagem (ou seja, simples, poderosas e seguras).
Você segue o caminho seguro (como o scala) e acaba com uma linguagem realmente complexa, ou segue o caminho simples e obtém algo que é limitado (genéricos do google go limitados à lista e mapas) ou inseguro (genéricos de dardo que são sempre covariante).
Usando o haskell, você aprende principalmente sobre os benefícios da pureza e como escrever código puro.
fonte
tl; dr Aprender coisas novas só pode fazer de você um programador melhor, mas ser um programador melhor não é sobre as línguas que você pode escrever código.
Quais são as vantagens de usar LISP e Haskell?
LISP:
De: Por que o Lisp é útil?
Haskell:
Você pode ler lá uma descrição de Funcional vs imperativo
De: http://www.haskell.org/haskellwiki/Introduction
Eles vão me tornar um programador melhor?
Sim, é claro, conhecer mais linguagens e paradigmas só pode torná-lo um programador melhor, mas entenda isso:
Não existe uma única ferramenta, um único livro, um único paradigma de programação que o tornará um programador melhor.
Aprender diferentes linguagens de programação com diferentes paradigmas definitivamente ajuda você a ser um programador melhor, aprender a resolver problemas com diferentes abordagens também beneficia muito seu pensamento lógico.
Ser um bom programador não tem muito a ver com o idioma, mas com a capacidade de resolver qualquer problema em qualquer idioma. E quando você não conhece o idioma, a capacidade de aprender esse idioma rapidamente e usá-lo efetivamente.
Divulgação: essa é a publicidade descarada do pior tipo, porque é do meu blog.
fonte
Quando você aprende idiomas que estão fora do paradigma em que você costuma operar, ele abre sua mente para soluções alternativas no seu dia a dia e pode até ajudá-lo a entender melhor alguns recursos do seu idioma de escolha. Só o conhecimento dessas línguas não o tornará um programador melhor, a menos que você possa tirar as lições aprendidas dessas línguas e aplicá-las a situações que você vê todos os dias.
Dito isto, não se limita a idiomas. Quando você lê várias estruturas de dados que nunca viu ou usou antes, isso pode ajudar a ampliar o escopo de seu conhecimento e, na próxima vez em que encontrar um problema, você terá mais uma solução possível.
fonte