Eu me ofereci para fazer um pouco de treinamento em F # na minha empresa e eles pareciam mostrar algum interesse. Eles geralmente são programadores de VB6 e C # que não seguem a programação com muita paixão. Dito isto, sinto que é mais fácil escrever o código correto quando você pensa em uma questão funcional, para que eles definitivamente obtenham algum benefício.
Alguém pode oferecer alguns conselhos sobre como devo abordar isso?
Ideias
- Não se concentre na sintaxe, mas em como essa linguagem e os idiomas que ela promove podem ser usados.
- Tente pensar em exemplos difíceis de escrever de maneira imperativa, mas que se traduzem em código elegante quando escritos de maneira declarativa.
c#
f#
training
declarative-programming
ChaosPandion
fonte
fonte
make
é mais uma linguagem declarativa do que F # ou Caml! (Ironicamente, isso torna seu trabalho mais fácil.)Respostas:
A programação funcional é uma besta estranha para mim. Eu aprendi F # e Haskell, escrevi alguns programas simples e adoro usá-los, mas nunca tive o "flash de revelação" de que algumas pessoas falam. Mas, lentamente, notei que cada vez mais eu escrevia um código que deveria ser imutável, dividindo tarefas em mais funções menores e tentando usar muito mais os delegados. É algo que, se você gosta, entra no seu trabalho porque o valor dessas técnicas é evidente.
Agora, mais praticamente para treinamento: acho que dois conceitos realmente clicam em Programação Funcional como um estilo para mim.
Primeiro, o estilo FP é baseado na estrutura dos dados, não na composição como no OOP. Eu olhei para algo como List em C # como sendo um truque inteligente para gerar listas seguras para tipos, algo que compôs o tipo (string) no outro tipo (lista). Depois de aprender FP, olho para os genéricos mais como as Mônadas agora. List é uma forma estruturada que o código pode assumir e decora as strings.
Segundo, e talvez mais útil para programadores de C # / ASP, é a idéia de que o FP trabalha com recursão e repetição, enquanto o OOP trabalha com mutabilidade e loop. Eu costumo pensar no ciclo de vida da página ASP como um tipo de FP agora: cada solicitação é processada do zero durante todo o ciclo de vida; portanto, a página inteira é, na verdade, um grande programa que se repete lentamente. Se você pode restringir essa noção, terá uma idéia melhor de como um programa imperativo pode ser estruturado em torno de loops de funções que capturam dados, operam sobre eles e retornam novos dados em vez de modificar os antigos.
O obstáculo mais difícil, pelo menos para mim, a superar com essa abordagem é a sensação de que você está desperdiçando toneladas de recursos ao usar objetos mutáveis, economizando uma tonelada de memória. No GC, confiamos, e eu apenas tive que aprender a deixar de lado as preocupações com desempenho até que eu realmente vi o programa ser executado e verificado se havia algum, e se sim, usar um criador de perfil para ver exatamente onde estavam os problemas.
fonte
Eu recomendaria:
fonte
Muitas linguagens de programação imperativas (Ada, C / C ++, Turbo Pascal, FoxPro) têm a capacidade de definir ponteiros para funções ou literais de nomes de procedimentos que podem ser avaliados (e os procedimentos nomeados após o literal invocado) em tempo de execução.
O exemplo tradicional é qsort em C. Desenvolva a noção de que você pode definir algoritmos que executam outros algoritmos nas estruturas de dados. Obviamente, isso é apenas uma fração do que é programação funcional. Mas eu descobri que esse é um bom ponto de partida para que a idéia se encaixe.
Uma vez que isso afunda, você pode começar a se aprofundar em outras coisas (imutabilidade, compartilhamento de nada etc.)
fonte
Certo:
Escolha seus exemplos com cuidado para que seu código F # não apenas resolva um problema com elegância, mas também com muito mais elegância do que é possível com o C # / VB . A correspondência de padrões e a inferência de tipos são seus amigos aqui.
Use um exemplo para destacar os benefícios do novo recurso encontrado em F #, por exemplo, fluxos de trabalho assíncronos, padrões ativos.
Não tenha medo de dar exemplos impuros usando estruturas de dados mutáveis, quando apropriado. F # é impuro por uma razão.
Não apresente F # como uma panacéia. Descreva os aplicativos para os quais o F # não é adequado e aqueles para os quais é muito mais adequado do que outras linguagens .NET.
Aponte para amostras de brinquedos que eles podem estudar, bem como projetos bem-sucedidos do mundo real que usavam F # (Bing AdCenter, Halo 3 etc.).
Explique tudo em termos de como o F # pode ajudá-los a resolver problemas mais facilmente. Evite debates religiosos. Mantenha-se positivo sobre o F #, não negativo sobre outros idiomas. Arme-os com fatos e evidências, mas deixe-os tirar suas próprias conclusões.
fonte