Dois-je choisir un langage de programmation fonctionnel?

10

J'ai récemment été plus préoccupé par la façon dont j'écris mon code. Après avoir lu quelques livres sur les modèles de conception (et leur mise en œuvre trop zélée, j'en suis sûr), j'ai beaucoup changé ma façon de penser ce qui change. J'ai tendance à remarquer que j'écris moins d'interfaces et plus de code orienté méthode, où j'aime donner vie aux anciennes classes avec des prédicats, des actions et d'autres tâches de délégué. J'ai tendance à penser que ce sont souvent les actions qui changent, alors je les résume. Même souvent, mais pas toujours, je décompose les interfaces en une seule méthode, puis je préfère utiliser un délégué pour la tâche au lieu de forcer le code client à créer une nouvelle classe.

Alors je suppose que ça m'a frappé. Dois-je plutôt faire de la programmation fonctionnelle?
Edit: J'ai peut-être une idée fausse sur la programmation fonctionnelle.

Actuellement, mon langage de prédilection est C #, et je viens d'un milieu C ++. Je travaille en tant que développeur de jeux mais je suis actuellement au chômage.

J'ai une grande passion pour l'architecture. Mes vertus sont un code propre, flexible, réutilisable et maintenable. Je ne sais pas si j'ai été empoisonné par ces voies ou si c'est pour le mieux. Ai-je une fièvre de refactoring ou dois-je continuer? Je comprends que cela pourrait être une question sur «utiliser le bon outil pour le travail» , mais j'aimerais entendre vos pensées.

Dois-je choisir un langage fonctionnel? Un de mes facteurs de peur est de quitter le confort de Visual Studio.

Déclaration
la source
Vous pouvez essayer F # si quitter Visual Studio est un facteur déterminant.
Adam Lear
Ce n'est pas une rupture. Je n'ai simplement pas essayé beaucoup d'autres alternatives. Je suppose que j'ai eu peur de travailler sans intellisense, refactoring ou outils similaires et j'ai cette conception que vous finissez par écrire de nouveau du code dans un éditeur de texte brut.
Déclaration du
Je suis actuellement au chômage ... cela ne devrait-il pas être la première chose à corriger?
Job
J'essaierais de travailler sans VS pendant un petit moment. Vous pourriez trouver que travailler de manière très minimaliste peut être amusant.
Zachary K
@Job, oui, mais j'ai été frappé récemment par une série d'événements assez mauvais :) J'ai endommagé mon pied (enfin je ne code pas avec mon pied, mais, quand même ...) tout récemment après avoir quitté mon ancien emploi à rechercher un nouveau.
Déclaration du

Réponses:

5

OUI

Apprendre de nouvelles choses devrait être amusant. Et apprendre une nouvelle façon de programmer devrait faire de vous un meilleur programmeur. Vérifiez l'un de Haskell ou Erlang, les deux sont fonctionnels mais ils sont très différents. Si vous choisissez Haskell, allez trouver quelques conférences de "Simon Payton Jones" sur youtube ou podcasts. Le gars est un grand orateur.

Zachary K
la source
1
J'ai choisi cette réponse pour de nombreuses raisons. @Zachary K dit qu'il pourrait être amusant de sortir de la boîte d'un endroit bien connu et d'avoir une autre perspective. Je ne devrais pas avoir peur d'essayer quelque chose de nouveau. Ce n'est pas la fin des jours. Haskell est un langage qui a attiré mon attention lors de diverses discussions à quelques reprises auparavant. Je ne sais pas si j'ai besoin d'un langage fonctionnel mais comme le dit @Toby Allen, c'est un excellent moyen de voir comment les autres méthodes fonctionnent et je suis d'accord sur cela après avoir essayé un UnrealScript. @ammoQ a raté un peu le sujet mais je n'avais pas une très bonne définition de ma question. J'ai toujours ses préoccupations.
Déclaration du
Heureux de vous aider. Amusez-vous
Zachary K
14

Saint * * * *. Il n'y a pas de solution miracle. Démissionner. Détendez-vous, respirez profondément.

Ce n'est pas parce que vous avez un outil dans votre boîte à outils que vous êtes obligé de l'utiliser. Concentrez-vous sur la tâche à accomplir, c'est-à-dire écrire un programme qui fonctionne et refactorisez lorsque le code sent mauvais. N'encapsulez pas et n'abstenez pas chaque petit détail juste parce qu'il pourrait changer un jour dans le futur. OMI, il est vraiment préférable de commencer directement, KISS & YAGNI, et de réagir aux exigences changeantes quand elles changent réellement .

Je ne pense pas que quiconque ici puisse vous dire si un langage fonctionnel est mieux adapté à vos besoins. Parce que vous ne nous avez pas dit sur quoi vous travaillez.

user281377
la source
Eh bien, je ne travaille sur rien de particulier en ce moment. Je suis entre deux boulots. Je suis / était un développeur de jeux.
Déclaration du
3
Il s'agit d'une situation dangereuse concernant la suringénierie. Pas de délai, pas de retard, juste trop de temps pour être obsédé par les détails.
user281377
(Beaucoup de conjectures à venir car je n'ai pas d'image claire dans mon esprit) Je suppose que mes "besoins" se reflétaient davantage dans la façon dont je préfère écrire du code. Je ne connais pas grand-chose à la programmation fonctionnelle, et je suppose que le nom pourrait me tromper un peu. J'ai juste l'impression que ma préférence n'est pas autant orientée objet que je le pensais. Alors peut-être que je devrais aimer travailler dans un autre paradigme?
Déclaration du
Oui, je suppose que c'est le cas. Je suis actuellement dans une phase d'apprentissage, c'est pourquoi j'explore les possibilités d'écrire de manière particulière. Au travail, on n'a souvent pas eu le temps d'écrire un tel code, et il faut respecter le code de conduite et maintenir un style cohérent entre développeurs.
Déclaration du
2
C'est absolument correct lorsque vous essayez tous les outils à portée de main maintenant que vous êtes entre deux emplois, mais je crains que nous ne puissions pas vous dire si la chaussure convient ou non.
user281377
12

Vous pouvez prendre F # . Il s'agit d'un langage fonctionnel .NET, qui vous permettra d'utiliser Visual Studio et de réutiliser une grande partie de vos connaissances .NET. Ses assemblages s'intègrent bien sûr aux assemblages C # de manière transparente (vous permettant de combiner facilement C #, C ++ / CLI et F # en un seul projet). Le support F # est fourni avec VS Pro ou mieux, je ne sais pas s'il est activé par défaut.

Matěj Zábský
la source
Je pense qu'il y a un addon pour F # dans VS2008, mais c'est par défaut dans VS2010.
apoorv020
F # fonctionne même avec un VS Shell gratuit.
SK-logic
6

OMI, ça vaut la peine d'essayer un langage fonctionnel. Même si vous ne l'utilisez jamais directement dans un produit commercialisé, son apprentissage contribuera presque certainement à donner une perspective / un point de vue quelque peu différent sur la programmation. Même si vous finissez par continuer à faire tout votre "vrai" codage en C #, il est assez juste que cela vous aide à améliorer le code que vous écrivez en C #.

Comme d'autres l'ont mentionné, le choix évident pour quelqu'un habitué à Visual Studio est F #, qui est essentiellement un dérivé d'Ocaml / Caml / ML. IMO, qui était un bon choix de la part de Microsoft pour initier les gens à la programmation fonctionnelle - c'est un langage fonctionnel à part entière, mais n'a pas une syntaxe presque aussi étrangère que certains le font (par exemple, alors que les langages basés sur Lisp le font ont de réels avantages, les débutants ont presque toujours du mal à lire).

Jerry Coffin
la source
2

Oui tu devrais.

Si vous choisissez une langue pure, comme Haskell, vous apprendrez non seulement une nouvelle langue, mais une nouvelle façon de penser. Cela peut également vous aider plus tard dans votre travail proceural / OO.

F #, d'autre part, n'est pas pur, et vous pouvez donc facilement manquer ce qui est important dans la programmation fonctionnelle. Vous pouvez, pour ainsi dire, continuer à écrire des programmes procéduraux qui mutent une variable ici, y effectuer des effets secondaires, juste en syntaxe F #.

Ingo
la source
En fait, j'ai commencé sur tryhaskell.org :) C'est excitant d'apprendre de nouvelles choses.
Déclaration du
1

Si vous utilisez déjà c #, vous n'avez pas besoin d'un nouveau langage - avec la combinaison de méthodes d'extension, lambdas et les types génériques Func / Action, il est assez facile d'écrire du code fonctionnel en C # - de cette façon, vous pouvez utiliser un style fonctionnel dans les algorithmes où cela a le plus de sens sans avoir besoin de changer toute l'application.

Tom Clarkson
la source
1
Vous avez toujours besoin d'une autre langue. Même si vous ne l'utilisez jamais, c'est une excellente expérience d'apprentissage pour apprendre une nouvelle langue. Aucune langue n'a tout.
Toby Allen
Vous devez toujours apprendre, mais vous n'avez pas toujours besoin d'apprendre une autre langue. L'avantage vient de l'apprentissage des concepts de la programmation fonctionnelle plutôt que du langage lui-même, et vous pouvez le faire sans quitter l'environnement familier et changer le projet dans son intégralité. C # est assez bon, et en termes pratiques, il y a un énorme avantage à ne disposer que du code fonctionnel dans les algorithmes qui en bénéficient réellement.
Tom Clarkson
Oui, je suppose que ma préoccupation était plus biaisée s'il y avait des langages mieux adaptés (syntaxiquement) pour travailler avec des méthodes / fonctions de la manière dont je me retrouve souvent à travailler tout en jouant. C # offre des expressions lambda et c'est bien en soi mais par exemple, avoir une fonction retourne une valeur sans aucun paramètre donne du code tel que () => x, et peut-être qu'il existe des moyens plus propres de s'y prendre.
Déclaration du
+1 @Toby. J'ai récemment parcouru la référence UnrealScript et vu des solutions de langage intéressantes pour travailler avec les états et.c. Cela se répercute sur C # en termes de réflexion sur le problème et ils ont une assez bonne solution. Alors oui, je crois que vous apprenez beaucoup lorsque vous sortez de votre bac à sable et pillez vos voisins pour tout le sable et les jouets que vous trouvez :)
Déclaration du