Pergunta

Esses dias eu estou ficando seriamente em programação funcional.

Enquanto eu estou realmente animado sobre Haskell e as possibilidades que parece oferecer, posso também ver agora que ele vai me levar um tempo para aprender. Em uma pergunta SO on Como aprender Haskell uma resposta afirma que vai demorar meses, se não anos para realmente "mestre"-lo.

Agora, eu sei C, PHP, algumas coisas orientada a objetos, etc. E, tendo sido informados de que Haskell não é muito usado lá fora, no "mundo real", eu vou ser melhor fora melhorar minhas habilidades nas linguagens regulares Eu sei? pena Haskell é a luta?

Nesta pergunta sobre Por que as pessoas pensam de programação funcional vai pegar em a conclusão parece ser que a programação funcional "pegará on". Mas, certamente, programação procedural vai ficar em cima, certo?

EDIT: keparo bem esclarece a minha pergunta para:? Ao contrário de linguagens procedurais, será valiosa para mim estudar Haskell e paradigmas de programação funcionais

Foi útil?

Solução

Haskell não é tão difícil quanto as pessoas gostam de fazer para aprender. Haskell abre um novo mundo que você nunca soube que existia para você. É tão valioso para aprender como qualquer outra língua. Você pode não encontrar um trabalho que você precise fazer programação Haskell, mas que isso realmente significa uma língua não é valioso?

Haskell vai te ensinar um monte de coisas novas, e ele irá mostrar-lhe como programar ainda melhor nas línguas você / fazer / trabalhar. Você pode fazer seus próprios projetos pessoais em seu tempo livre com ele.

Haskell não é realmente muito usado no "mundo real" se definir "mundo real" como "gerador de caixa". Portanto, se esse é o seu objetivo, então você pode ter que repensar objetivos: p

não Além disso, eu gosto muito que parte da resposta escolhida "como aprender Haskell". Demora meses a anos de dominar qualquer idioma, não apenas Haskell. Dependendo de como você define "mestre". Eu posso usar Haskell para um bom grau muito da eficiência e tenho aprendido que só por um mês, e eu fui levá-lo lento mesmo.

Outras dicas

Se nada mais, a mudança de mentalidade que aprender Haskell fornece irá ajudá-lo quando você tem que voltar a usar essas linguagens procedurais que ainda são utilizados no local de trabalho.

O paradigma funcional está começando a fazê-lo da maneira em diversas aplicações e linguagens mainstream - Mesmo C ++ vai ser a adição de um lambda (aleijado) em C ++ 0x.

Você também pode querer olhar em algumas das linguagens híbridas como Scala ou OCaml. Scala está sendo usado no Twitter e OCaml está sendo utilizado no Street de Jane em uma plataforma de negociação financeira.

Você provavelmente não deve esperar para usar Haskell em qualquer lugar quase tão frequentemente como uma linguagem C família em ambientes profissionais. Se a questão é se ele vai ser valiosa para você estudar Haskell e paradigmas de programação funcional, a resposta é sim. Você pode aplicar sua compreensão enriquecida de programação para todo o seu trabalho.

Eu aprendi Haskell porque era, de longe, a melhor linguagem funcional que eu tentei fora do Scala, Clojure, OCaml e Scheme, mas eu não esperava seriamente usá-lo para o trabalho.

Como se vê, é perfeito para esses tipos de biscates que são demasiado pequenos para uma equipe e seria apenas muito demorado em Java. Até agora, eu usei-o para migrações de dados ad-hoc, ou seja, mangling exportações CSV em outro formato, conversões em lote de XML (HXT é mais concisa e mais poderoso do que XSLT), fora do projeto de internet e software estimar screen-scraping incluindo modelagem risco usando a mônada probabilidade e produzir gráficos de Gantt ideal utilizando retrocesso. Isso tudo é verdadeiro trabalho que precisava ser feito, que eu não teria sequer se preocupou em tentar fazer em Java, uma vez que seria uma tarefa multi-dia.

Agora eu usá-lo em vez de Excel para qualquer coisa vagamente matemática, pois é pouco mais de esforço para criar uma lista de valores na origem de Haskell em um editor de texto que é para digitá-los para o Excel. Uma vez em Haskell, então eu posso fazer todos os tipos de magia como retrocesso, distribuições de probabilidades, etc., que Excel não pode fazer. Se eu precisar de um gráfico, então eu cuspir os valores como CSV (2 linhas de código) e carregá-los para o Excel.

A única desvantagem é que ele leva vários meses para obter proficiente, mas vale o esforço IMHO.

Ao contrário de linguagens procedurais, será valiosa para mim estudar Haskell e paradigmas de programação funcional?

Se ter um conjunto de habilidades expandida é valioso, então: Sim.

Uma das vantagens que você pode pegar: programação paralela e concorrente. linguagens procedurais do passado tendem a ter nenhuma noção clara de efeitos colaterais, como um programas paralelos resultado da escrita em si é difícil de fazer corretamente. linguagens funcionais (em particular, os que efeitos colaterais limite como Haskell) têm muito mais a dizer sobre programação paralela produtivo.

Depois que a habilidade na manga não pode machucar.

Eu posso ver que a programação funcional pode ser uma vantagem em um ambiente de produção se é muito fácil uso pelo código não funcional. MS podia ver que também quando eles vieram com F # eu acho.

Uma vez que ambos compilação para IL, você pode lidar com problemas que pedem uma abordagem funcional funcional e usar essas soluções muito facilmente em seu código processual.

Nesse sentido código funcional pode facilmente encontrar o seu caminho em um ambiente de produção um pouco de cada vez

Por isso, e uma vez que a base de usuários de MS é tão grande, o meu palpite é que se F # não vai pegar em um futuro muito próximo, que Haskell não quer.

Eu acho que vale a pena o esforço. Ele vai ajudar você a entender como os problemas são resolvidos e não só como funciona um computador.

Talvez um problema particular é o próprio Haskell -. Como uma linguagem puramente funcional, que é meio "incondicional", que pode, por outro lado, mesmo coisas complicar

A programação funcional em vez pode ser extremamente útil de uma forma muito pragmática - Muitas linguagens OO / imperativo já incluiu elementos funcionais para esta razão (Linq, funções anônimas, valores somente leitura, ponteiros de função / delegados, tipo de inferência): Você pode concentrado sobre o que deve ser feito, que lhe permite expressar mais em menos código (que é ainda menos propenso a erros).

Não-puramente linguagens funcionais (línguas funcionais standard) como Scala ou F # pode ser integrado facilmente em Java existente ou NET-projetos, de modo que você pode combinar os benefícios de ambos os paradigmas onde eles são necessários. Para vantagens típicas de linguagens funcionais, consulte este fio. Basta pensar extremamente poderoso de análise (monádicas combinadores analisador / Parsec) ou programação concorrente que é possível com linguagens funcionais e você verá como eles são úteis.

Ao contrário de linguagens procedurais, será valiosa para mim estudar Haskell e paradigmas de programação funcional?

A não ser que você quer ser miserável. Luke Planta diz, em Por que aprender Haskell / Python faz de você um programador pior :

Assim, aprendendo Python e Haskell me desmoralizado e encorajou me para escrever código que é bizarro e difícil de entender ...

(Isso não é inteiramente uma piada.)

Ampliando seus horizontes ajuda você a ser um programador melhor, não importa o idioma que você acontecer a ser usando no momento. Você nunca vai olhar para a programação da mesma maneira depois que você escreveu macros Lisp, por exemplo. Depois de começar a pensar em termos de Haskell, você vai encontrar-se compondo funções e que desejam para fechamentos em linguagens menos avançadas.

A julgar guloseimas em C #, como lambdas, inferência de tipos, fechos, e assim por diante , aprendendo Haskell lhe dará uma vantagem sobre vanguarda de amanhã em linguagens tradicionais.

Algumas pessoas gostam de programação em Haskell. Se você pode escolher seu ambiente, e diversão é uma consideração, então talvez você deve hop.

Muitos programadores não estão em posição de escolher suas ferramentas e prazer não é um fator para as suas escolhas. Muitos deles começa a usar C / Java / etc no local de trabalho para a "fonte do projeto core", mas depois também escolher ou necessidade de usar Python para "scripts" como formação de scripts com SCons, outros scripts que geram Java / etc código, sistemas de teste, provas de conceito, etc .. E em outros lugares Python é também utilizado no projeto "core".

Em 8 anos, será Haskell, não Python, que será "vindo para você". Mas você pode vir a ele mais cedo.

Você pode combinar o uso de programação funcional e ser pragmático sobre a língua.

Todas as modernas linguagens de script S.A JavaScript ou Lua permitir o uso do paradigma funcional.

O conceito funcional está chegando forte. Observe a onda de atividade e interesse em torno Ruby. Eu também notei um pouco mais interesse em JavaScript além de uma mera linguagem de script navegador recentemente. Você pode chegar à frente do jogo por mergulho em agora, embora o tempo investido pode não pagar este ano ou no próximo.

Depende do seu plano de jogo geral. Você está em programação como um fim em si mesmo ou como um meio para um fim? Se for o primeiro, ir nozes com Haskell. Neste último caso, vara com mainstream, "empregáveis" línguas. Espere por Haskell para decolar e, em seguida, atacar.

Por processual e não Orientado a Objetos, estar processual não visto usado por muitos anos para além de C.

Comercialmente falando. Eu iria com Java ou C #. Realmente não importa que ambos pagam bem e as habilidades são intercambiáveis ??com outros como línguas de espírito, como Python, Ruby e JavaScript.

Haskell vale a pena o tempo e esforço, embora seja muito acadêmica, alguns bancos usá-lo, apesar de muitos na Europa e no Reino Unido estão se movendo a base de código sobre a F #.

Eu não acho que FOP estará se movendo em grandes velocidades comercialmente falando. Mas as técnicas são definitivamente fazer uma aparição nas principais línguas estadia. Especialmente com designs de chips multi-core e fazer executar código paralelo sobre eles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top