Como apresentar à sua equipe o estilo funcional de codificação?

10

Eu tenho uma situação em que a maioria das pessoas do meu grupo vem de um plano de programação orientada a objetos com pouca ou nenhuma compreensão da programação funcional. Nem mesmo o básico, como fechamentos.

Alguma sugestão sobre o que pode ser uma boa maneira de apresentá-las ao estilo de codificação funcional? Muita codificação que fazemos pode ser reduzida se fizermos a maneira funcional para nossos casos específicos.

Eu já fiz algumas apresentações sobre paradigmas funcionais e de codificação. Infelizmente, não usamos uma linguagem de programação funcional adequada como Haskell (basicamente, o código legado está em C, C ++, Java), portanto, temos que fazer o que houver com eles.

Fanatic23
fonte
11
Antes de perguntar como, pergunte o porquê . Você está trabalhando em problemas que podem ser resolvidos mais facilmente em um estilo funcional do que em um estilo orientado a objetos? OO funciona muito bem para muitas coisas (é por isso que tem sido tão bem-sucedido) e não tão bem para outras pessoas. Com a sua pergunta, parece um pouco como "Quero fazer nosso código em estilo funcional só porque acho que a programação funcional é legal, mesmo que não tenhamos uma linguagem que a suporte e a equipe não saiba como para fazer isso! " Essa é uma péssima ideia. Lembre-se, a ferramenta certa para o trabalho certo.
Mason Wheeler
2
@MasonWheeler: Eu sei por que precisamos funcionais. Não na linguagem legal da coisa do mês. Velho demais para isso.
precisa saber é o seguinte
11
Vamos supor que alguém conhece Haskell, você poderia fazê-lo funcionar no seu sistema?
Jeffo
4
Parece que a programação funcional está resolvendo um problema que sua equipe não tem. Eles sabem como codificar Java C, C ++ que não são candidatos naturais à programação funcional (a implementação de fechamentos é horrível nessas linguagens).
James Anderson

Respostas:

8

Luca Bolognese fez esta apresentação fantástica, onde ele introduz a programação funcional (para apresentar o F #) usando um exemplo de café que é realmente ótimo e me ajudou muito a apresentar a Programação Funcional a amigos e colegas.

Você também pode procurar uma Programação Funcional do Mundo Real da Petricek, que é uma excelente maneira de começar a pensar funcionalmente na minha opinião.

SRKX
fonte
essa apresentação é fantástica .. especialmente porque é feita por um vampiro !! RI MUITO!! j / k .. os caras tem carisma ..
hanzolo
7

Seus colegas codificam fora do trabalho?

Considerando que você não faz nenhum FP na sua empresa, conseguir que alguém aprenda um novo idioma / paradigma quando não fizer nada fora de suas tarefas diretas de trabalho será quase impossível.

Se o fizerem, encontre projetos interessantes que eles gostem relacionados à programação funcional e mostre-os. Você não está em posição de exigir uma mudança, portanto terá que plantar as sementes se tiver interesse em um nível pessoal. Foi assim que fui apresentado a ele - concedido pelo meu melhor amigo que trabalha comigo.

Fora isso, a maioria das pessoas escreve ferramentas internas para facilitar pequenas tarefas. Tente escrever alguns deles em uma linguagem funcional. Quem quiser ver o código será exposto à (esperançosamente / possivelmente) beleza do código e provavelmente perguntará sobre isso quando o fizerem. Essa é uma oportunidade para vender a ideia.

Lembre-se de que existem linguagens funcionais que funcionarão em sua pilha (scala / encerramento são executados na JVM). Não é "puramente funcional" como Haskell, mas é um bom começo em uma longa jornada.

Se você tiver controle sobre a contratação, contrate pessoas que tenham alguma experiência funcional (ou que estejam pelo menos interessadas em programação funcional).

E finalmente ... você pode estar na empresa errada, se é apaixonado por escrever código funcional. Você não vai mudar a maneira como sua empresa inteira escreve software - especialmente se eles estão ganhando dinheiro e, mais ainda, especialmente em um período de tempo razoavelmente curto.

É tudo sobre vendê-lo para os desenvolvedores ... a gerência é uma fera totalmente diferente.

Steven Evers
fonte
2

Mudar de imperativo para programação funcional pura é uma grande mudança com uma curva de aprendizado acentuada. Sugiro tentar uma transição menos rápida e, nesse caso, você tem muitas opções. Por exemplo Python suporta compreensões de lista e gerador de expressões , Ruby suporta funções de ordem superior através de blocos de código, etc. Uma vez que você mencionou Java, se tudo que você tem um fundo de Java e você quer suporte de programação funcional cheio, você pode tentar Scala .

sakisk
fonte
2

Contrate (ou peça ao chefe que contrate) um programador funcional

Eventualmente, isso não vai passar para o resto da sua equipe.

Além disso, como afirmado anteriormente, incentivá-los a escrever código em uma linguagem funcional durante o tempo de folga também não faria mal.

Dinâmico
fonte
2

Se a programação funcional realmente facilitará muito a vida dos seus casos, sugiro isolar um desses casos e demonstrar implementações equivalentes nas linguagens OO e funcionais para seus colegas.

Se a diferença de complexidade é tão ampla quanto você diz, isso deve falar por si.

funkybro
fonte
2

+1 a faif por mencionar Scala: isso começou como um comentário sobre essa resposta, mas ficou muito grande ...

Eu queria aprender algo sobre programação funcional (vindo de C / C ++, alguns Python e Java enferrujado); Tentei mergulhar no fundo com Ocaml e depois Haskell e Just Didn't Get It. Depois, tentei o Scala e descobri que me permitia começar a usar coisas funcionais em um ambiente confortável OOP / Java-ey, onde eu poderia facilmente voltar ao estilo imperativo familiar quando uma abordagem funcional me escapasse. Alguns podem reclamar da natureza "multiparadigm", "híbrida" da linguagem, significa que você nunca é forçado a se esforçar para ficar "totalmente funcional", mas eu diria que isso significa que você pode ser pragmático sobre as coisas e saber que seja capaz de fazer coisas reais facilmente, de alguma forma, quando você precisar.

Alguns anos depois (e mais de 200 soluções do Project Euler Scala no Scala posteriormente), o encontro com o funcional influenciou definitivamente meu Python (muito mais uso de mapa, filtro, redução, lambdas, iterols, compreensão de lista e funções de passagem do que eu '' já havia contemplado antes) e, em menor grau, C ++: talvez um pouco mais de tentativa de usar os recursos funcionais da STL, mas o principal impacto é que estou muito mais confortável usando o mapa da TBB / reduzindo construções e realmente gosto de como explorar a imutabilidade pode domar a complexidade no código multithread.

Então, pessoalmente, se eu fosse você, eu estaria defendendo a introdução do Scala em parte do seu desenvolvimento no mundo Java, de preferência mostrando alguns exemplos disso simplificando enormemente algo e produzindo os benefícios que você reivindica. O que acontece depois se resume a todo o negócio de "defender" novas idéias e promover mudanças ... o que parece ser um problema muito maior.

timday
fonte
11
Muito bem dito. Eu sou um pessoal de Java / OO. Peguei o Scala há um ano. E tem sido bastante desafiador para mim aprender FP. Estou fazendo um pouco de cada vez e sentado com ele. Não estou tentando entender tudo de uma vez.
chaotic3quilibrium
1

Eu gostaria de recomendar uma abordagem gradual usando o Scala. E eu recomendaria começar com o livro do criador do Scala, "Programming in Scala, 2nd Edition" . Este livro é FANTÁSTICO ao introduzir lentamente uma (FP) Programação Funcional usando Scala. E ao mostrar o movimento em direção ao FP, ele não rejeita o OO. De fato, ele a alavanca. Estou fazendo minha segunda passagem por isso agora.

Basicamente, o Scala permite executar Java / OO "sem ponto e vírgula". E então pode-se experimentar um pouco de FP sem ter que ficar louco. Por exemplo, ao treinar-me para fazer FP, normalmente focarei na transparência referencial no nível do método da classe, mas deixarei que meus métodos possuam muitas variações, mutabilidade e imperatividade, conforme necessário para que eu faça uma primeira passagem em uma implementação. Então, concentro-me em refazer lentamente cada método para movê-lo para o FP puro. E também uso o site irmão do StackOverflow, CodeReview, para obter ajuda com minha transição mental / de pensamento. Aqui está um exemplo de um post recente que fiz fazendo exatamente isso.

De qualquer forma, boa sorte em sua jornada de FP. :)

chaotic3quilibrium
fonte