Devo escolher uma linguagem de programação funcional?

10

Recentemente, tenho me preocupado mais com a maneira como escrevo meu código. Depois de ler alguns livros sobre padrões de design (e a implementação excessivamente zelosa deles, tenho certeza), mudei muito meu pensamento para encapsular aquilo que muda. Costumo notar que escrevo menos interfaces e mais código orientado a métodos, onde adoro transformar a vida em classes antigas com predicados, ações e outras tarefas delegadas. Costumo pensar que muitas vezes são as ações que mudam, então as encapsulo. Mesmo que muitas vezes, embora nem sempre, quebre as interfaces para um único método, prefiro usar um delegado para a tarefa em vez de forçar o código do cliente a criar uma nova classe.

Então eu acho que isso me atingiu. Eu deveria estar fazendo programação funcional?
Edit: Eu posso ter um equívoco sobre programação funcional.

Atualmente, minha linguagem de escolha é C #, e eu venho de um background em C ++. Eu trabalho como desenvolvedor de jogos, mas atualmente estou desempregado.

Eu tenho uma grande paixão pela arquitetura. Minhas virtudes são códigos limpos, flexíveis, reutilizáveis ​​e de manutenção. Não sei se fui envenenado por esses caminhos ou se é para melhor. Estou com febre de refatoração ou devo seguir em frente? Entendo que isso possa ser uma pergunta sobre "use a ferramenta certa para o trabalho" , mas gostaria de ouvir seus pensamentos.

Devo escolher uma linguagem funcional? Um dos meus fatores de medo é deixar o conforto do Visual Studio.

Declaração
fonte
Você pode tentar o F # se sair do Visual Studio for um negócio.
Adam Lear
Não é uma quebra de negócio. Só não tentei muitas outras alternativas. Acho que fiquei com medo de trabalhar sem o intellisense, a refatoração ou ferramentas semelhantes e tenho a ideia de que você acaba escrevendo código em um editor de texto simples novamente.
Declaração
Atualmente, estou desempregado ... essa não deveria ser a primeira coisa a corrigir?
Job
Eu tentaria trabalhar sem o VS por um tempo. Você pode achar que trabalhar de uma maneira muito minimalista pode ser divertido.
Zachary K
@Job, sim, mas fui surpreendido por uma série de eventos muito ruins recentemente :) Eu machuquei meu pé (bem, eu não codigo com meu pé, mas ainda assim ...) apenas recentemente depois de deixar meu antigo emprego em procure um novo.
Declaração

Respostas:

5

SIM

Aprender coisas novas deve ser divertido. E aprender uma nova maneira de programar deve torná-lo um programador melhor. Verifique um dos Haskell ou Erlang, ambos são funcionais, mas são muito diferentes. Se você escolher Haskell, encontre algumas palestras de "Simon Payton Jones" no youtube ou podcasts. O cara é um ótimo orador.

Zachary K
fonte
11
Eu escolhi esta resposta por vários motivos. @Zachary K diz que pode ser divertido sair da caixa de um lugar conhecido e ter outra perspectiva. Eu não deveria ter medo de tentar algo novo. Não é o fim dos dias. Haskell é uma linguagem que chamou minha atenção em várias discussões algumas vezes antes. Eu não sei se preciso de uma linguagem funcional, mas como @Toby Allen diz que é uma ótima maneira de ver como as outras maneiras funcionam, e eu concordo com isso depois de experimentar o UnrealScript. O @ammoQ perdeu um pouco o assunto, mas eu não tinha uma definição muito boa da minha pergunta. Eu ainda entendo as preocupações dele.
Declaração
Feliz em ajudar. Divirta-se
Zachary K
14

Piedosos * * * *. Não há bala de prata. Se afasta. Relaxe, respire fundo.

Só porque você tem uma ferramenta na sua caixa de ferramentas, isso não significa que você é obrigado a usá-la. Concentre-se na tarefa em questão, ou seja, escrever um programa que funcione e refatorar quando o código cheirar mal. Não encapsule e abstraia todos os pequenos detalhes, apenas porque podem mudar em algum dia no futuro. Na IMO, é realmente muito melhor começar direto, KISS & YAGNI, e reagir às mudanças nos requisitos quando elas realmente mudam .

Não acho que alguém aqui possa lhe dizer se uma linguagem funcional é ou não mais adequada às suas necessidades. Porque você não nos disse no que está trabalhando.

user281377
fonte
Bem, eu não estou trabalhando em nada em particular agora. Estou entre empregos. Eu sou / fui desenvolvedor de jogos.
Declaração
3
Esta é uma situação perigosa em relação à superengenharia. Sem prazo, sem atraso, apenas tempo demais para ficar obcecado com detalhes.
user281377
(Muita adivinhação pela frente, já que não tenho uma imagem clara em minha mente) Acho que minhas "necessidades" foram mais refletidas na maneira como prefiro escrever código. Não sei muito sobre programação funcional e acho que o nome pode me enganar um pouco. Estou apenas sentindo que minha preferência não é tão orientada a objetos quanto eu pensava. Então, talvez eu deva gostar de trabalhar em outro paradigma?
Declaração
Sim, acho que é o caso. Estou em uma fase de aprendizado agora, e é por isso que exploro as possibilidades de escrever de maneiras particulares. No trabalho, muitas vezes não havia tempo para escrever esse código, e você deve respeitar o código de conduta e manter um estilo consistente entre os desenvolvedores.
Declaração
2
Tudo bem quando você tenta todas as ferramentas disponíveis agora que está entre os trabalhos, mas receio que não possamos dizer se o sapato se encaixa ou não.
user281377
12

Você pode pegar F # . É a linguagem funcional do .NET, que permitirá que você use o Visual Studio e reutilize grande parte do seu conhecimento do .NET. É claro que seus assemblies integram-se aos assemblies de C # sem problemas (permitindo combinar facilmente C #, C ++ / CLI e F # em um projeto). O suporte ao F # vem com o VS Pro ou melhor, mas não tenho certeza se ele está ativado por padrão.

Matěj Zábský
fonte
Eu acho que há um complemento para F # no VS2008, mas é o padrão no VS2010.
apoorv020
O F # funciona mesmo com um VS Shell gratuito.
SK-logic
6

Na OMI, vale a pena experimentar uma linguagem funcional. Mesmo que você nunca o use diretamente em um produto liberado, aprendê-lo quase certamente ajudará a fornecer uma perspectiva / ponto de vista um pouco diferente da programação. Mesmo se você continuar fazendo toda a sua codificação "real" em C #, é bem provável que isso ajude a melhorar o código que você escreve em C #.

Como outros já mencionaram, a escolha óbvia para alguém acostumado ao Visual Studio é o F #, que é basicamente um derivado do Ocaml / Caml / ML. A IMO foi uma boa escolha da Microsoft para apresentar às pessoas a programação funcional - é uma linguagem funcional completa, mas não possui uma sintaxe tão estranha quanto a de alguns (por exemplo, enquanto as linguagens baseadas em Lisp têm têm vantagens reais, os iniciantes quase sempre acham difícil ler).

Jerry Coffin
fonte
2

Sim você deveria.

Se você escolher um idioma puro, como Haskell, aprenderá não apenas um novo idioma, mas uma nova maneira de pensar. Isso também pode ajudá-lo posteriormente em seu trabalho proceural / OO.

O F #, por outro lado, não é puro e, portanto, você pode facilmente perder o que é importante na programação funcional. Você pode, por assim dizer, continuar escrevendo programas procedimentais que modificam uma variável aqui, realizam alguns efeitos colaterais, apenas na sintaxe F #.

Ingo
fonte
Na verdade, comecei no tryhaskell.org :) É emocionante aprender coisas novas.
Declaração
1

Se você já está usando c #, não precisa de um novo idioma - com a combinação de métodos de extensão, lambdas e os tipos genéricos de Func / Action, é bastante fácil escrever código funcional em C # - para que você possa usar um estilo funcional em os algoritmos nos quais faz mais sentido sem a necessidade de alterar o aplicativo inteiro.

Tom Clarkson
fonte
11
Você sempre precisa de outro idioma. Mesmo que você nunca use, é uma ótima experiência de aprendizado aprender um novo idioma. Nenhuma língua tem tudo.
Toby Allen
Você sempre precisa aprender, mas nem sempre precisa aprender outro idioma. O benefício vem do aprendizado dos conceitos de programação funcional, e não da própria linguagem, e você pode fazer isso sem sair do ambiente familiar e alterar o projeto inteiro. O C # é bom o suficiente e, em termos práticos, há uma enorme vantagem em ter apenas o código funcional nos algoritmos que realmente se beneficiam.
Tom Clarkson
Sim, acho que minha preocupação era mais tendenciosa se houvesse linguagens mais adequadas (sintaticamente) para trabalhar com métodos / funções da maneira como me encontro trabalhando frequentemente enquanto brinco com isso. O C # oferece expressões lambda e isso é bom por si só, mas, por exemplo, ter uma função retorna um valor sem nenhum parâmetro, gera código como () => x, e talvez haja maneiras mais limpas de se fazer.
Declaração
+1 em @Toby. Recentemente, examinei a referência UnrealScript e vi algumas soluções de linguagem interessantes para trabalhar com states et.c. Ele é transferido para o C # em termos de pensamento sobre o problema e eles têm uma solução bastante agradável. Então sim, eu acredito que você aprender muito quando você sair de sua caixa de areia e pilhagem seus vizinhos para toda a areia e brinquedo que você encontrar :)
Declaração