Comment initier votre équipe au style fonctionnel de codage?


10

J'ai une situation où la plupart des gens de mon groupe viennent d'un milieu de programmation orienté objet avec peu ou pas de compréhension de la programmation fonctionnelle. Pas même les bases comme les fermetures.

Avez-vous des suggestions sur ce qui pourrait être un bon moyen de leur présenter le style de codage fonctionnel? Beaucoup de codage que nous faisons peut être raccourci si nous faisons de la manière fonctionnelle pour nos cas spécifiques.

J'ai déjà fait quelques présentations sur les paradigmes fonctionnels et de codage. Malheureusement, nous n'utilisons pas un langage de programmation fonctionnel approprié comme Haskell (le code hérité est essentiellement en C, C ++, Java), nous devons donc faire tout ce qu'il y a avec ceux-ci.


11
Avant de demander comment, demandez pourquoi . Travaillez-vous sur des problèmes qui peuvent être plus facilement résolus dans un style fonctionnel qu'un style orienté objet? OO fonctionne très bien pour beaucoup de choses (c'est pourquoi cela a été un tel succès) et pas si bien pour les autres. D'après votre question, cela donne un peu l'impression "Je veux faire notre code dans un style fonctionnel juste parce que je pense que la programmation fonctionnelle est cool, même si nous n'avons pas de langage qui le supporte et que l'équipe ne sait pas comment pour le faire!" C'est une très mauvaise idée. N'oubliez pas, le bon outil pour le bon travail.
Mason Wheeler

2
@MasonWheeler: Je sais pourquoi nous avons besoin de fonctionnalités. Pas dans la langue cool du truc du mois. Trop vieux pour ça.
Fanatic23

1
Supposons que quelqu'un connaisse Haskell, pourriez-vous le faire fonctionner dans votre système?
JeffO

4
Il semble que la programmation fonctionnelle résout un problème que votre équipe n'a pas rencontré. Ils savent coder C, C ++ Java qui ne sont pas des candidats naturels pour la programmation fonctionnelle (l'implémentation de fermetures est tout simplement horrible dans ces langages).
James Anderson

Réponses:


8

Luca Bolognese a fait cette fantastique présentation où il présente la programmation fonctionnelle (pour présenter F #) en utilisant un exemple de café qui est vraiment génial et m'a beaucoup aidé à introduire la programmation fonctionnelle à des amis et collègues.

Vous pouvez également consulter une programmation fonctionnelle du monde réel de Petricek qui est un excellent moyen de commencer à penser fonctionnellement à mon avis.


cette présentation est fantastique .. d'autant plus qu'elle est donnée par un vampire !! LOL !! j / k .. les gars ont du charisme ..
hanzolo

7

Vos collègues codent-ils en dehors du travail?

Étant donné que vous ne faites pas de PF dans votre entreprise, il sera presque impossible d'amener quelqu'un à apprendre une nouvelle langue / un nouveau paradigme alors qu'il ne fait rien en dehors de ses tâches professionnelles directes.

S'ils le font, alors trouvez des projets intéressants qu'ils aimeront qui sont liés à la programmation fonctionnelle et montrez-les. Vous n'êtes pas en mesure de mandater un changement, vous devrez donc semer les graines si vous vous intéressez à un niveau personnel. C'est comme ça que j'ai été initiée - accordée par mon meilleur ami qui travaille avec moi.

En dehors de cela, la plupart des gens écrivent des outils internes pour faciliter les petites tâches. Essayez d'en écrire certains dans un langage fonctionnel. Quiconque veut voir le code sera exposé à la beauté (espérons-le / peut-être) du code et vous posera probablement des questions à ce sujet quand il le fera. C'est l'occasion de vendre l'idée.

N'oubliez pas qu'il existe des langages fonctionnels qui fonctionneront sur votre pile (scala / fermeture s'exécutent tous les deux sur la JVM). Ce n'est pas "purement fonctionnel" comme Haskell, mais c'est un bon début pour un long voyage.

Si vous avez un contrôle sur l'embauche, embauchez des personnes qui ont une certaine expérience fonctionnelle (ou qui sont au moins intéressées par la programmation fonctionnelle).

Et enfin ... vous pourriez être dans la mauvaise entreprise si vous êtes passionné par l'écriture de code fonctionnel. Vous n'allez pas changer la façon dont toute votre entreprise écrit des logiciels - surtout si elle fait de l'argent et encore plus surtout pas dans un laps de temps raisonnablement court.

Il s'agit de le vendre aux développeurs ... la gestion est une toute autre bête.


2

Le passage de la programmation impérative à la programmation fonctionnelle pure est un grand changement avec une courbe d'apprentissage abrupte. Je suggérerais d'essayer une transition moins rapide, et dans ce cas, vous avez plusieurs options. Par exemple, Python prend en charge les compréhensions de liste et les expressions de générateur , Ruby prend en charge les fonctions d'ordre supérieur via des blocs de code, etc. Puisque vous avez mentionné Java, si vous avez tous un arrière-plan Java et que vous souhaitez une prise en charge complète de la programmation fonctionnelle, vous pouvez essayer Scala .


2

Embaucher (ou faire embaucher le patron) un programmeur fonctionnel

Finalement, cela ne déteindra pas sur le reste de votre équipe.

De plus, comme indiqué précédemment, les encourager à écrire du code dans un langage fonctionnel pendant leur temps libre ne ferait pas de mal non plus.


2

Si la programmation fonctionnelle va vraiment vous faciliter la vie dans vos cas, je suggère d'isoler un tel cas et de démontrer des implémentations équivalentes en OO et en langages fonctionnels à vos collègues.

Si la différence de complexité est aussi grande que vous le dites, cela devrait parler de lui-même.


2

+1 au faif pour avoir mentionné Scala: cela a commencé comme un commentaire sur cette réponse mais est devenu trop gros ...

Je voulais apprendre quelque chose sur la programmation fonctionnelle (venant de C / C ++, de Python et de Java rouillé); J'ai essayé de plonger au fond avec Ocaml puis Haskell et Just Didnt Get It. Ensuite, j'ai essayé Scala et j'ai trouvé que cela me permettait de commencer à utiliser des choses fonctionnelles dans un environnement OOP / Java-ey confortable où je pouvais facilement retomber dans un style impératif familier lorsqu'une approche fonctionnelle m'échappait. Certains pourraient se plaindre de la nature "multiparadigm", "hybride" du langage, ce qui signifie que vous n'êtes jamais obligé de vous étirer pour devenir "purement fonctionnel", mais je dirais que cela signifie que vous pouvez être pragmatique sur les choses et savoir que vous allez être capable de faire de vraies choses facilement d'une manière ou d'une autre quand vous en avez besoin.

Quelques années plus tard (et plus de 200 solutions Project Euler Scala dans Scala plus tard), la rencontre avec la fonctionnalité a certainement influencé mon Python (beaucoup plus d'utilisation de la carte, du filtre, de la réduction, des lambdas, des outils itératifs, des listes de compréhension et des fonctions de passage autour que moi '' d jamais envisagé auparavant) et dans une moindre mesure C ++: peut-être un peu plus d'essayer d'utiliser les pièges fonctionnels de STL, mais l'impact principal est que je suis beaucoup plus à l'aise d'utiliser les constructions map / Reduce de TBB et vraiment comment l'exploitation de l'immuabilité peut apprivoiser la complexité en code multithread.

Donc, personnellement, si j'étais vous, je plaiderais en faveur de l'introduction de Scala dans certains de vos développements dans le monde Java, de préférence en en montrant quelques exemples simplifiant énormément quelque chose et en produisant les avantages que vous revendiquez. Ce qui se passera ensuite, c'est à l'ensemble de l'entreprise de «défendre» de nouvelles idées et de conduire le changement ... ce qui semble être un problème beaucoup plus important.


1
@timeday Très bien dit. Je suis un gars Java / OO. J'ai ramassé Scala il y a un an. Et ça a été assez difficile pour moi d'apprendre la PF. Je fais un peu à la fois et je m'assois avec. Je n'essaie pas de tout obtenir d'un coup.
chaotic3quilibrium

1

Je voudrais recommander une approche progressive en utilisant Scala. Et je recommanderais de commencer par le livre du créateur de Scala, "Programming in Scala, 2nd Edition" . Ce livre est fantastique pour introduire lentement une programmation fonctionnelle (FP) à l'aide de Scala. Et en montrant l'évolution vers la PF, il ne rejette pas OO. En fait, il en tire parti. Je fais mon deuxième passage maintenant.

Fondamentalement, Scala permet de faire Java / OO "sans point-virgule". Et puis, on peut essayer un peu de FP sans avoir à faire du porc entier. Par exemple, en m'entraînant à faire de la PF, je vais généralement me concentrer sur la transparence référentielle au niveau de la méthode de classe, mais laisser mes méthodes avoir cependant autant de var-s, de mutabilité et d'impératif que nécessaire pour que je puisse faire un premier passage à une implémentation. Ensuite, je me concentre sur le remaniement lent de chaque méthode pour la déplacer vers la PF pure. Et j'utilise également le site frère de StackOverflow, CodeReview, pour obtenir de l'aide avec ma transition mentale / réflexion. Voici un exemple d'un post récent que j'ai fait en faisant cela.

Quoi qu'il en soit, bonne chance dans votre parcours de PF. :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.