Por que a programação funcional não é mais popular no setor? Entende agora? [fechadas]

61

Durante meus quatro anos na universidade, temos usado muita programação funcional em várias linguagens de programação funcional. Mas também usei muita programação orientada a objetos e, de fato, uso mais as linguagens orientadas a objetos ao fazer meu pequeno projeto para me preparar para o meu primeiro trabalho. Mas, muitas vezes, desejo codificar uma linguagem de programação funcional ao executar esses projetos.

No entanto, ao procurar um emprego, é muito raro ver um trabalho em que o conhecimento de uma linguagem de programação funcional seja necessário.

Por que as linguagens de programação funcional não são mais usadas no setor? Atualmente, existem muitas novidades sobre linguagens de programação funcional, então me pergunto se a programação funcional está pegando no setor agora?

Jonas
fonte
3
Até certo ponto, discordo da premissa de sua pergunta. Recursos de idioma inspirados em "idiomas funcionais" estão sendo adicionados a idiomas como Java e JavaScript. De fato, o JavaScript sempre foi (de certa forma) uma linguagem funcional, embora muitas pessoas não percebessem isso até recentemente.
precisa saber é o seguinte
11
@MatrixFrog: Pode-se perguntar "Por que ir funcional apenas pela metade adicionando alguns conceitos funcionais a linguagens não funcionais, em vez de adotar uma linguagem FP completa? Afinal, o paradigma existe há muitos anos e é muito maduro".
Giorgio
O mundo não muda para alternativas superiores (e o FP puro é uma alternativa superior) por diferentes razões, incluindo compatibilidade com versões anteriores, inércia etc. Considere o layout do teclado DVORAK: é mais eficiente para digitação por toque, mas todos nós seguimos o QWERTY simplesmente porque há muito software com atalhos compatíveis com qwerty.
KolA

Respostas:

38

Eu diria que uma das razões pelas quais a programação funcional não é mais prevalente é a falta de base de conhecimento. Minha experiência é que as empresas são muito avessas ao risco em termos de implementação de tecnologias que não são o fluxo principal e preferem investir em estruturas testadas e verdadeiras (java, c ++, c #). É somente quando há uma necessidade comercial (como na Ericsson) que novos paradigmas são considerados. Mas mesmo no caso da Ericsson, ouvi dizer que a gerência exigia que o c ++ fosse usado e Joe Armstrong foi obrigado a codificar chamadas erlang em c ++ !! Isso deve mostrar como as empresas estão relutantes em implementar novas tecnologias!

ennuikiller
fonte
9
Como a programação funcional é "nova"?
Evan Plaice
7
Eu acho que ele quis dizer 'não utilizado' em vez de 'novo'.
Vinko Vrsalovic
10
Portanto, não é usado ... porque não é usado? Hum.
Alex Baranosky
21
@Alex - Exatamente. Suga, não é?
Keith
5
@ Stargazer712: Quais são essas razões? Conheço muitos desenvolvedores que não conhecem programação funcional, então a ignorância faz sentido para mim. A programação funcional teve uma falha maciça no passado que afugentou a indústria da qual eu desconhecia?
Sean McMillan
67

Eu era professor e, assim como programadores, os professores estão sempre procurando a próxima grande coisa. Quando eles acham que encontraram um, eles o transformam em uma onda e todos se empilham. Como eles estão pregando para estudantes que pensam que os professores devem ser realmente inteligentes, caso contrário, por que eles seriam professores, eles não têm resistência.

A programação funcional é um movimento. Certamente, há muitas perguntas interessantes a serem investigadas e muitos artigos de conferências interessantes para escrever. Não é uma idéia particularmente nova, e você pode fazê-lo em praticamente qualquer linguagem moderna, e as idéias não precisam ser novas para serem interessantes. Também é uma boa habilidade para ter.

Dado isso, a programação funcional é apenas uma seta para ter em sua aljava, não a única, assim como o OOP não é a única.

Minha discussão com a academia de ciência da computação é a falta de interação prática com a indústria para determinar o que realmente faz sentido no mundo real, ou seja, controle de qualidade. Se esse controle de qualidade estivesse lá, poderia haver uma ênfase diferente, na classificação de problemas e na variedade de soluções para eles, com vantagens e desvantagens, em vez de apenas as últimas bandwagons.

Mike Dunlavey
fonte
11
Este é realmente um bom comentário. +1 nas setas da sua aljava e várias soluções com vantagens e desvantagens.
usar o seguinte comando
2
+1 para QC. Que o mestrado teria sido muito mais útil com assuntos dedicados que cobrem testes, revisão de código, complexidade de código e similares. A capacidade de verificar automaticamente se um programa faz o que deveria após o último patch vale qualquer número de "ele deve funcionar agora" sem sentido.
l0b0
5
@ l0b0: Obrigado, embora na verdade eu estivesse pensando no controle de qualidade do que é ensinado e como. Os professores de CS ensinam o que eles acham pessoalmente mais interessante. Compare isso à engenharia, onde há interação com a indústria ou a medicina, onde a relevância no mundo real é muito alta. IME, os professores de CS imaginam que o mundo real ensinará o que importa no mundo real, mas os alunos não se mostram ansiosos para aprender - eles estão ansiosos para analisar com entusiasmo o que os professores estavam mais animados.
Mike Dunlavey
@ Mike: praticamente qualquer linguagem moderna? Você está incluindo C ++ e Java?
Kevin cline
+1. Não poderia ter dito melhor.
precisa saber é o seguinte
25

Porque o maior problema no desenvolvimento de software atualmente é a capacidade de gerenciar a complexidade. Este não é o foco da maioria das linguagens de programação funcionais. Como tal, as línguas que fazer fazer que uma prioridade (ou seja, as linguagens OOP mais populares) tendem a roubar algumas das características mais frias que saem das linguagens funcionais mais acadêmicos e assim permanecer no topo.

Fishtoaster
fonte
48
Discordo. As linguagens de programação funcional tentam minimizar o uso de um estado e, com isso, ficam menos complexas. Programas programados em uma linguagem funcional também são mais fáceis de testar e refatorar.
Jonas
7
@ Jonas: muitos programadores acham extremamente difícil escrever um programa usando quase nenhum estado (inclusive eu). Desse ponto de vista, é realmente mais complexo. (Por favor note que eu não estou debatendo a utilidade de programação funcional por qualquer meio!)
ShdNx
3
@ShdNx: Sim, eu sei. Até pensei que a programação funcional era difícil quando a aprendi na universidade. Mas depois de um tempo, comecei a preferir a programação imperativa e um POO mais específico. Na minha universidade, a programação funcional era ensinada antes da programação imperativa e os alunos que não haviam feito nenhuma programação antes da universidade pensavam que a programação imperativa era muito difícil no início e que a programação funcional estava mais próxima da matemática.
Jonas
16
Há uma diferença entre dificuldade e complexidade. OOP é definitivamente mais difícil que a programação estruturada, porque adiciona mais conceitos. Para quantidades grandes de código, elas reduzem a complexidade, fornecendo uma estrutura ao código. FP é a mesma coisa: se você estiver escrevendo apenas duas linhas, parecerá um exagero, mas se o seu código for grande o suficiente, a estruturação do código como subunidades sem estado melhora a escalabilidade e reduz a complexidade do código.
Muhammad Alkarouri 28/10/10
6
Uma das principais ênfases da programação funcional é a composibilidade. Se essa não é uma ferramenta para gerenciar a complexidade, não sei o que é.
dan_waterworth
23

A programação funcional está definitivamente começando a pegar - lenta mas seguramente.

Por exemplo, a inicialização que estou construindo está usando uma linguagem funcional (Clojure) como a principal linguagem de desenvolvimento pelos seguintes motivos:

  • Produtividade - aprender FP é difícil, mas quando você pega o jeito, é muito difícil vencer em termos de poder e expressividade. Provavelmente, estou escrevendo cerca de 1/10 do número de linhas para implementar qualquer parte da funcionalidade em comparação com o que eu precisaria em C # ou Java

  • Confiabilidade - funções puras são muito mais fáceis de raciocinar e testar do que objetos com estado. Portanto, você pode escrever testes melhores e validar a correção do seu código com muito mais facilidade.

  • Simultaneidade - linguagens funcionais enfatizam a imutabilidade, que traz enormes benefícios para aplicativos simultâneos do que a necessidade de executar efetivamente em vários núcleos. E goste ou não, rodar em múltiplos núcleos é o futuro. Consulte http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey para obter uma explicação brilhante de por que isso é tão importante

  • Compossibilidade / modularidade - linguagens funcionais parecem prestar-se a conectar componentes mais facilmente do que sistemas OO complexos. Ainda não descobri todas as razões para isso, mas parte disso decorre do fato de você não ter toda a "complexidade incidental" que os modelos OO arrastam com eles. A palestra sobre Radical Simplicity de Stuart Halloway explora essas idéias com muito mais profundidade.

EDIT : Em resposta ao comentário de Despertar, um exemplo da "complexidade incidental" dos sistemas OOP que limita a modularidade são os problemas de clonagem profunda vs. clonagem superficial: você não pode compor objetos juntos e passá-los como estruturas compostas sem muito análise cuidadosa da semântica de clonagem e mutação. Em casos pequenos, isso é gerenciável, mas em sistemas complexos, rapidamente se torna um problema significativo. Esse problema não existirá em primeiro lugar se você confiar em estruturas de dados funcionais puras.

Mikera
fonte
+1, eu ficaria muito interessado em ouvir seu processo de tomada de decisão sobre por que você escolheu o Clojure. (Eu não sou a favor ou anti Clojure, estou apenas interessado).
dan_waterworth
4
"aprender FP é difícil": aprender qualquer paradigma é difícil. Lembro-me de quantas horas passei com o código imperativo (Pascal) antes de ter experiência suficiente para ser razoavelmente produtivo. Acho que o FP é menos conhecido porque muitos programadores aprenderam uma linguagem imperativa primeiro e, depois que aprenderam a programar, não tiveram tempo de procurar outra coisa. Sou programador em C ++ em tempo integral e atualmente estou aprendendo Scala à noite depois do trabalho. Se eu tivesse uma família para cuidar, poderia simplesmente esquecer.
Giorgio
11
Eu acho que os três primeiros são ótimos casos, mas eu discordo do quarto. OOP é extremamente modular e composicional; para mim, este é um dos seus maiores pontos fortes. Também é ótimo em esconder a complexidade por meio de encapsulamento e abstração.
Despertar
11
@Giorgio. Exatamente. "Aprender FP é difícil, aprender POO é fácil" é tão absurdo quanto "Aprender espanhol é difícil, mas chinês é fácil". Depende de qual foi o seu primeiro idioma. E não escolhi o chinês como análogo arbitrário ao OOP - porque os idiomas OO são como hieróglifos: fácil de aprender um por um, mas difícil de lembrar de todos e impossível de compor. FP é muito mais parecido com um idioma com um alfabeto: letras separadas são inúteis isoladamente, mas permitem compor qualquer coisa com um conjunto razoavelmente pequeno de regras
KolA
11
(continuação) então por que não é popular - ainda - pelas mesmas razões. Os hieróglifos existiam muito antes do primeiro alfabeto ser inventado e amadurecido. Pode levar outra geração que tenha a escrita e a leitura alfabética. Quero dizer FP como seu primeiro paradigma
KolA
12

Falta de aplicativo matador

Ei, este aqui parece novo. (dig dig dig)

Eu acho que a maioria das linguagens de programação prosperou com um "aplicativo matador" - algo atraente que era exclusivo da linguagem (ou visto dessa maneira). Isso não quer dizer que toda a aceitação tenha sido essa aplicação, mas que levou o idioma a uma aceitação maior.

Aqui está minha visão não muito precisa de qual nicho impulsionou a adoção de alguns dos idiomas que temos hoje:

  • C: Funciona em todos os lugares (este foi o final dos anos 70 e 80)
  • C ++: estruturas de GUI (início dos anos 90)
  • Java: Applets e servlets (no final dos anos 90)
  • Objetivo-C: aplicativos iOS (antes disso, aplicativos OS X)
  • Ruby: Rails
  • C #: ASP.NET, WinForms
  • PHP: Wordpress, etc.
  • Javascript: AJAX, especialmente via frameworks
  • lua: Script de jogo, especialmente WoW

Além disso, muitas linguagens proprietárias chegaram às portas através de poderosas organizações de vendas (Oracle e, em menor grau, as linguagens da Microsoft), criando efetivamente seu próprio nicho.

Uma observação muito importante sobre essa lista: o "nicho" do idioma, conforme indicado pelo aplicativo matador, fica cada vez mais específico com o passar das décadas. Observe o último na lista: Script de jogo , especificamente. Está ficando cada vez mais difícil que os idiomas obtenham atenção por causa da lista de coisas que já são bem feitas por outro idioma.

Então, o que qualquer linguagem funcional realmente precisa decolar é um nicho. Na realidade, ainda não existem grandes linguagens funcionais, mas há muito em nichos menores:

  • Emacs Lisp: uso constante desde os anos 80 no Emacs pelos desenvolvedores. ( Quase nunca usado em outro lugar.)
  • Erlang: Em qualquer lugar que você queira muitos agentes simultâneos.
  • Esquema: Educação
  • APL / J / K: Finanças (Vamos chamá-los de funcionais, pelo bem do argumento)
  • Lisp comum: "IA" - é para isso que as pessoas costumam dizer que é usado, o que é uma bênção e uma maldição.

Agora, a única linguagem importante que sinto que deixei de fora dessa discussão é o Python. Python fez algo muito interessante; conseguiu, sem parecer ser o vencedor em qualquer nicho importante. Isso pode significar que eu estou completamente errado ao visualizar a popularidade do idioma dessa maneira. Também pode significar que um idioma bom o suficiente pode se tornar popular sem um aplicativo matador para impulsionar a adoção e a aceitação, mas é muito difícil e pode demorar muito tempo. (Perl tem uma história semelhante, mas veio alguns anos antes e agora tem menos aceitação.)

A partir disso, posso dizer quais linguagens funcionais estão em ascensão:

  • Clojure: programação na Web, esp. através do Heroku
  • Scala: Lift (ou talvez Play, hoje em dia) - JVM sem Java

Se você me perguntasse onde procurar em seguida por linguagens funcionais populares, eu diria que está procurando uma linguagem funcional com desenvolvimento de nuvem chave na mão (à la Heroku ou GAE) ou desenvolvimento de aplicativo móvel chave na mão.

Jesse Millikan
fonte
Eu consideraria o Perl um idioma importante também. É uma linguagem antiga que eu diria que é usada com mais frequência em sistemas similares ao Unix. Embora o Python pareça ser uma alternativa mais moderna. Ainda é uma linguagem popular que recebeu muita atenção e tem uma grande comunidade.
Despertar
11
@ Despertar - Eu não estava tentando ser igualitário sobre quais idiomas eu mencionei :) E concordo, a história parece muito com Python, exceto alguns anos no passado.
precisa
11
Perl tinha alguns nichos. A primeira foi refletida em versões mais antigas de sua documentação, que se referiam ao nome como sendo um acrônimo para "linguagem prática de extração e relatório". O segundo surgiu um pouco mais tarde, e foi em scripts CGI - por muitos anos, perl foi a linguagem da web. Obviamente, perdeu muito dessa popularidade agora, mas dê uma olhada nos sites antigos que ainda rodam no mesmo software com o qual foram originalmente criados e você verá muito perl (pensando em slashdot.org, agora , mas há muito mais).
Jules
9

Pela mesma razão que Lisp nunca conseguiu entender (que comecem as guerras de fogo!). A programação funcional é um paradigma muito estranho comparado à programação imperativa e orientada a objetos. Se, como a grande maioria dos estudantes de CS, você começou com C e progrediu para C ++ / Java, não deseja aprender a pensar de uma maneira que é completamente ortogonal à maneira como você normalmente pensa.

Chinmay Kanchi
fonte
2
Paradigma alienígena? É mais próximo da matemática do que a programação imperativa. Aqui na Suécia, acho que a maioria dos estudantes de ciências da computação é a programação funcional primeiro. Por exemplo, começamos com o Standard ML, antes de C, Erlang e Java.
Jonas
4
Justo. Eu sei que muitos estudantes de engenharia no Reino Unido e na Índia aprendem C primeiro, seguido por C ++ e / ou Java. Muitas vezes, eles não aprendem uma linguagem funcional.
Chinmay Kanchi
14
@Jonas Para muitas pessoas por aí, a matemática é um paradigma alienígena e tudo o que afasta a programação da matemática facilita a compreensão.
Script2011 #
5
Já ouvi falar de pessoas que nunca ouviram falar em árvores, muito menos em programação de funções, depois de se formarem.
dan_waterworth
11
@ Tux-D, na verdade não, estou falando de estudantes no Reino Unido.
dan_waterworth
6

Vamos considerar negócios e programação.

Existem empresas que usam seu software como um ativo estratégico. Isso não é típico. Para a maioria das empresas, a TI é algo que suporta os negócios reais da empresa. É uma despesa necessária. Eles são conservadores porque sabem que por US $ X podem obter a TI de que precisam, enquanto que, se mudarem para algo diferente, economizarão menos de US $ X se tudo correr bem e perderão muito se tudo correr mal.

Além disso, nas empresas, a coisa mais barata a fazer é normalmente o que fizeram ontem. Mudança, no entanto, desejável, é cara. Se uma empresa mudasse, digamos, de uma solução C # / .NET, mesmo para F #, ela teria problemas. Seus programadores (que provavelmente não são os programadores mais perspicazes por aí) teriam que aprender um novo idioma, ser proficientes em ambos e usá-los com frequência. Haveria rotinas escritas em ambos por um longo tempo. Se eles mudassem para algo como Haskell, ou se usassem C ++ / MFC, eles estariam mudando muito mais, e isso seria muito mais caro.

Além disso, haverá um suprimento de programadores em C # e o suporte contínuo da Microsoft por muito tempo. As práticas atuais de TI podem ser contadas. Não existe o mesmo nível de suporte institucional ou garantia de disponibilidade contínua de programadores.

Portanto, para a maioria das empresas, fazer uma alteração na programação funcional seria caro antecipadamente e só se pagará se a redução nos custos de TI for suficiente a longo prazo, exceto que o longo prazo é potencialmente duvidoso.

David Thornley
fonte
2

Você já escreve código em estilo funcional, mas não o conhece.

Quando você é obrigado a fazer testes de unidade para seu código, costuma escrever funções testáveis, que não criam ou dependem de efeitos colaterais, e sempre retorna o mesmo resultado nos mesmos argumentos (as chamadas funções puras). Essa é a principal vantagem dos programas funcionais.

Eu acho que linguagens funcionais são muito limitantes. Portanto, em vez de substituir linguagens imperativas por funcionais, as linguagens imperativas terão recursos funcionais. Hoje em dia quase toda linguagem de programação possui encerramentos e lambdas.

Calmarius
fonte
1

Eu acredito que há apenas uma resposta real para sua pergunta. Você pode se deparar com vários motivos relacionados a essa resposta, mas essas são perguntas diferentes.

Aqui está:

  • Os arquitetos de software fornecem soluções que estão confiantes de que funcionarão.
  • A maioria dos arquitetos não trabalha em linguagens funcionais.
  • Depois que tecnologias e idiomas são escolhidos, as empresas encontram pessoas que podem trabalhar com eles.

Está pegando? Tudo isso depende se as pessoas que confiam no uso de linguagens funcionais estão se tornando arquitetas e optando por usá-las nos projetos em que trabalham.

John Fisher
fonte
0

O verdadeiro problema é o estado.

Linguagens funcionais não têm estado global. A maioria dos problemas industriais exige estado em grande escala (como você representa um razão ou um conjunto de transações), mesmo que algumas funções em pequena escala não o exijam (processando um razão).

Mas estamos executando código em máquinas de arquitetura Von-Neuman que são inerentemente cheias de estado. Portanto, na verdade, não nos livramos do estado, as linguagens funcionais apenas escondem a complexidade do estado do desenvolvedor. Isso significa que o idioma / compilador precisa lidar com o estado nos bastidores e gerenciá-lo.

Portanto, embora as linguagens funcionais não tenham estado global, suas informações de estado são passadas como parâmetros e resultado.

Então, a questão então se torna: a linguagem pode lidar com o estado de maneira eficiente por trás do sentido? Especialmente quando o tamanho dos dados excede em muito o tamanho da arquitetura.

Olhando para ele do lado do hardware

O sistema operacional ajudou muito nos últimos anos na visualização do espaço de endereço, para que os aplicativos não precisem se preocupar oficialmente com isso. Mas os aplicativos que não se preocupam caem na armadilha de debulhar o hardware quando a pressão da memória se torna intensa (o hardware debilitante atrasará seus processos).

Como o programador não tem controle direto sobre o estado na linguagem funcional, ele deve contar com o compilador para lidar com isso, e eu não vi linguagens funcionais que lidem bem com isso.

No lado oposto da moeda, o programador de estado completo tem controle direto sobre o estado e, assim, pode compensar as condições de pouca memória. Embora eu não tenha visto muitos programadores que são realmente inteligentes o suficiente para fazê-lo.

Olhando do lado da indústria:

A indústria possui muitos programadores ineficientes em todo o estado.

Mas é fácil medir melhorias nesses programas ao longo do tempo. Você coloca uma equipe de desenvolvedores no problema de que eles podem melhorar o código, melhorando a maneira como o programa lida com o estado.

Para programas funcionais, as melhorias são mais difíceis de serem mensuradas, pois você precisa melhorar as ferramentas que os aprimorarão (estamos apenas olhando como os aplicativos lidam com o estado subjacente de forma eficiente aqui, não a melhoria geral do programa).

Então, para a indústria, acho que tudo se resume à capacidade de medir melhorias no código.

Do ponto de vista da contratação

Existem muitos programadores completos disponíveis para contratação. Programadores funcionais são difíceis de encontrar. Portanto, seu modelo básico de oferta e demanda entraria em ação se a indústria mudasse para a programação de estilo funcional e isso não é algo que eles querem que aconteça (os programadores são caros o suficiente).

Martin York
fonte
2
Linguagens funcionais, especialmente linguagens funcionais "impuras", podem lidar perfeitamente com o estado global. Acho que muitas vezes os programas se decompõem em camadas alternadas: por exemplo, estado global ... mas transições de estado funcional ... com ocasional estado local (mascarado) para implementar partes críticas de desempenho dessas transições, etc. O problema com linguagens imperativas , IMO , é que eles geralmente levam os programadores a usar o estado de maneira inadequada, quando os padrões funcionais funcionam melhor. Mas as línguas parecem estar evoluindo na direção de apoiar bem os dois estilos.
Ryan Culpepper
11
É muito fácil lidar com o estado em linguagens funcionais, mas requer uma mudança de ênfase. Enquanto nas linguagens imperativas você escreve procedimentos que modificam o estado, nas linguagens funcionais você escreve funções que retornam procedimentos que modificam o estado.
dan_waterworth
"Idiomas funcionais não têm estado global" - Você não precisa de estado global. Praticamente toda a gestão do estado pode ser feita através de mônadas.
Arunav Sanyal 25/10/19
-3

Esta questão tem premissa ligeiramente errada. Pelas seguintes razões:

  1. A programação funcional é realmente bastante comum na indústria. Mas é usado apenas onde programadores experientes estão disponíveis. Não se pode esperar que os iniciantes o conheçam. Quase todos os grandes projetos de programação o utilizam, mas eles o mantêm em áreas que são tratadas por programadores experientes. Iniciantes irão lidar com os módulos fáceis que não requerem programação funcional.
  2. Diante dessa realidade, as empresas que contratam pessoas (geralmente jovens provenientes da universidade) não podem realmente solicitar experiência de programação funcional. Qualquer pessoa em projetos que exija programação funcional já está na mesma empresa há 15 anos.
  3. As universidades estão começando a ensiná-lo, porque já sabem agora que o conhecimento da programação funcional será muito útil em 30 anos. Seu intervalo de tempo é de 30 anos, não o meio ano normal como nas empresas.
  4. Esses pontos são a razão pela qual as pessoas ficam decepcionadas quando entram na força de trabalho e veem que as coisas que aprenderam na universidade não são usadas. Mas eles foram projetados para um período de tempo de 30 anos e, eventualmente, será útil - é que as empresas estão usando coisas simples - as coisas que eles podem esperar que as pessoas saibam.
  5. Além disso, você seria arrogante se pensar que, após alguns anos de universidade, conhece bem a programação funcional o suficiente para usá-la em projetos de software reais. Comece com as coisas simples primeiro. Você realmente não precisa executar o software mais complexo como sua primeira tarefa quando começar a trabalhar. Você acabará descobrindo coisas complexas, mas isso leva tempo.
tp1
fonte
2
1) "quase todos os grandes projetos de programação estão usando". Minha experiência é que isso está longe da realidade. Pouquíssimas empresas estão usando programação funcional como eu sei. A maioria só usar Java e C # (embora C # tem construções mais funcionais dos últimos anos), C ++ e C.
Jonas
2
2) Minha experiência é o oposto. Pessoas de universidades parecem ser as únicas que conhecem programação funcional. Aqui na Suécia, a maioria das universidades ensina programação funcional desde o primeiro ano. E universidades como o MIT até recentemente usavam programação funcional em seu primeiro curso de programação (Scheme).
Jonas
@ jonas: não, a linguagem de programação não tem nada a ver com isso. É claro que C e C ++ e java etc são usados ​​por um grande número de projetos. A programação funcional também está funcionando no código c ++. A prática atual parece ser que parte do projeto está usando OO e parte dele usa programação funcional. Ambas as partes utilizam a mesma língua (geralmente c / c ++)
tp1
Sim, você também pode fazer OO em C. Mas não é recomendado. Faz C e C ++ não tem muitas construções de programação funcional por exemplo, não imutáveis por padrão, não um bom suporte para correspondência de padrão, não incluído datastructures imutáveis e assim por diante ...
Jonas
Bem, é por isso que requer programadores experientes. Como é praticamente impossível alterar a linguagem de programação das principais, a próxima melhor coisa é fazer a programação funcional em c ++. Além disso, o c ++ possui coisas como const, que ajudam bastante.
tp1 1/10/11
-10

Porque é mais difícil depurar FP.

interstar
fonte
11
Discordo. Sem efeitos colaterais, o processo de depuração é mais fácil. Talvez você pense que é mais difícil porque o paradigma funcional é diferente e precisa de experiência para se sentir confortável com a nova maneira de fazer as coisas, incluindo a depuração.
Maniero
2
As linguagens de programação funcional são realmente mais fáceis de testar, pois as funções puras são sem estado.
Jonas
4
Jonas, eu não disse "teste", eu disse "depuração", ie. encontre um erro que você cometeu. Os testes fazem parte disso, mas também o raciocínio sobre o programa, etc. Bigown - eu mantenho isso. É uma função do poder da FP. Quanto mais trabalho uma linha de código faz, mais difícil é ver qual linha de código está causando um problema. O mapeamento entre a linha de código e o efeito é mais difuso, por exemplo. uma única função de ordem superior pode tocar em dezenas de comportamentos do programa e vice-versa. Os sintomas podem variar bastante entre pontos diferentes para o mesmo erro.
interstar
Na minha experiência, não é difícil depurar. Estou usando o F # e não consigo encontrar nenhum motivo para você achar mais difícil depurar do que o C #, por exemplo. Talvez a depuração seja mais difícil em Haskell por causa da preguiça (não tenho idéia), mas a programação de FP ansiosa é mais simples devido à apatridia, como Jonas disse. Em outras palavras, o código FP é mais previsível porque você sabe que o resultado não é influenciado por variáveis ​​invisíveis.
Muhammad Alkarouri 28/10/10
2
Contanto que suas funções sejam puras, a depuração é fácil. Se você não pode depurar adicionando testes de unidade, não está fazendo um trabalho adequado ao escrever testes.
dan_waterworth