Je vois de plus en plus de développeurs brillants qui font l'apologie de la programmation fonctionnelle.

J'ai voulu m'y mettre dernièrement, et je trouve que c'est un exercice intellectuel très intéressant. J'y vois également une certaine élégance.

Par contre de manière plus pragmatique, j'aimerais avoir des avis sur ce que ça apporte, en terme de productivité. 

javascript programmation programmation fonctionnelle programmation orienté objet
2
4

4 réponses

il y a 7 ans par ChristopheFantoni

Le problème, c'est que les programmeurs d'aujourd'hui s'éloignent de plus en plus de la programmation procédurale ce qui fait que l'on a de moins en moins de développeurs francophones capables de concevoir des firmwares, des bios, voire même des drivers. En fait, la POO/programmation fonctionnelle n'existe pas dès que vous touchez à l'assembleur (ex: Z80, 6802, 68000, et bien évidemment x86 en 32/64 bit). 

D'ailleurs, en s'éloignant le plus possible de la machine via ces fameux frameworks, nous sommes arrivés à une génération de programmeurs dont la tâche s'apparente plus à du scripting qu'à de la véritable programmation (c'est très vrai dans le monde vidéoludique -- d'ailleurs, pourquoi croyez-vous que les jeux vidéo se ressemblent autant ?). 

5
il y a 7 ans par Julien_

À mon avis c'est aussi une question de demande non ?

La plupart des entreprises n'ont pas besoin de programmer des bios ou des drivers. Et pour ce qu'elles font, ça serait souvent contre-productif. Un jeu vidéo en assembleur ?

Si les jeux vidéos se ressemblent autant, c'est aussi parce que les joueurs aiment globalement les mêmes choses. Les outils ont été créés pour répondre à un besoin, et pas l'inverse. Et souvent c'est beaucoup plus pertinent d'utiliser ces outils.

Il y a aussi une question d'efficacité. 

  • Si je veux faire un programme de machine learning, c'est essentiel de comprendre comment ça fonctionne, mais je pense qu'avec un outil comme TensorFlow ou Torch, on va gagner beaucoup de temps, et les calculs vont être effectués avec des optimisations de vitesse et de précision auxquelles on n'aurait peut-être pas pensé.
  • Pour faire un jeu en 3D, beaucoup de jeux très populaires ont été faits avec Unity 3D. Ces jeux se ressemblent souvent, mais pour d'autres types de jeux, il y a d'autres frameworks.
  • Pour le web, utiliser un Framework comme React, ça permet d'imposer une structure, d'éviter des manipulations de DOM, et d'avoir à disposition une collection d'éléments pré-conçus.

D'un autre côté, je suis d'accord qu'il y a un manque de compréhension du fonctionnement bas niveau. Et que ça réduit la valeur ajoutée que pourrait avoir un développeur sur des projets complexes.

Sinon ma question n'était pas Framework vs Pas Framework c'était Programmation Fonctionnelle vs POO.

Quel est l'avantage d'utiliser des fonctions pures, d'avoir des états imutables, de composer ses objets plutôt que d'hériter de classes,...

1
il y a 7 ans par ChristopheFantoni

Dans le monde du jeu vidéo (dans lequel j'ai travaillé durant quelques années), l'utilisation du moteur X ou du moteur Y n'est pas une demande de la part du public, mais des professionnels qui souhaitent essentiellement amortir le coût de leur licence. Ce n'est pas exactement la même chose. Donc, on développe du jeu "à l'identique" essentiellement pour des raisons économiques, et non pas artistiques ou techniques. Il suffit d'ailleurs de voir ce qu'on donne à faire à un jeune programmeur sorti d'une école, à savoir du jeu casual, fait à la va-vite, pour comprendre que nous sommes bien dans une logique de scripting, et non pas de programmation réelle.

Vous l'aurez sans doute compris, je suis un programmeur de la vieille école, travaillant encore en assembleur, et en programmation procédurale. Cette particularité me permet aujourd'hui de décrocher des contrats, non pas dans le développement de jeux vidéo, ni dans celui d'applicatifs professionnels, mais bien dans celui de développement de firmwares, bios et autres drivers. Mes employeurs, lorsqu'ils veulent un produit plus européanisé, sont donc le plus souvent étrangers (asiatiques ou américains).

2
il y a 7 ans par JulienPradet

Je trouve dommage cette mystification de la programmation fonctionnelle. Souvent, on a tendance à dire que pour faire du fonctionnel, il faut un langage inaccessible qui fait que ça et qui va nous imposer les limites nécessaires.

Pour moi, c'est avant tout un ensemble de bonnes pratiques à appliquer pour nous simplifier la vie au cours du développement en améliorant la maintenabilité de l'application. Les deux principes majeurs que j'en retire étant :

  • L'immutabilité : L'objet ne va pas changer par effet de bord. On est sûr des données en entrée et en sorties. C'est pour moi le plus gros point positif qui peut être appliqué partout. S'il n'y a plus d'effet de bord, cela veut dire que l'on peut véritablement tester tous les cas sans bootstraper une application entière derrière. 
  • La composition : Plutôt que des objets hierarchisés qui entraînent beaucoup de modifications en cascade, on va chaîner les fonctions pour en décrire une nouvelle. On ne décrit donc que des bouts de fonction. C'est souvent plus facile à nommer, plus facile à comprendre. Le résultat, c'est qu'on n'hésite plus à séparer les fonctions plutôt que de faire une classe de base qui fait un peu tout à la fois et qui va servir de base d'héritage pour trop d'objets à la fois.

Mais ces principes n'ont pas besoin d'être appliqués de manière dogmatique pour qu'ils soient efficace. Si par exemple dans notre fonction on mute une variable interne mais que les entrées et les sorties ne bougent pas, cela convient déjà très bien.

C'est d'ailleurs un très bon moyen de s'y attaquer que de ne pas s'embêter à comprendre en profondeur les bons vieux map/reduce/compose/flow/... On commence par faire des boucles à l'ancienne que l'on arrive, au fur et à mesure que notre compréhension se précise, à orienter vers une écriture plus fonctionnelle.

C'est pour cette raison que Scala fonctionne bien à mon sens. Parce que les développeurs retrouvent leurs petits s'ils viennent du monde Java, mais qu'en rédigeant leur code il se rendent compte que ça irait mieux en l'orientant vers du fonctionnel. Idem pour le Javascript qui a une spec qui s'oriente de plus en plus vers ce monde là.

5
il y a 7 ans par FredericLibaud

Bonjour,

Et il peuvent s'appliquer à la POO, car comme vous l'avez si bien dit ce n'est pas une question de dogme.

2
il y a 7 ans par JulienPradet

Bonjour Frédéric,

Tout à fait. C'est pour ça que j'ai cité Scala comme un bon exemple et que c'est ainsi que je développe en PHP.

2
il y a 7 ans par Julien_

Merci pour cette belle réponse :)

1
il y a 7 ans par LudovicTant

L'un des intérêt et des engouements de la programmation fonctionnelle est qu'elle facilite la programmation asynchrone. Or, sur les serveurs actuels, il y a beaucoup d'attentes au niveau des entrées/sorties. Des langages/plateforme comme Erlang (utilisé par Ericsson pour certains de ses autocommutateurs téléphonique) ou des langages tout court comme Scala permettent ainsi de développer des services permettant de s'adresser à des millions d'utilisateurs, ou manipulant des millions de données sur une poignée de serveurs. Ce qui est essentiel si on veut faire des choses à très grande échelle (internet of things sur des capteurs d'une flotte de camion au niveau européen par exemple).

4
il y a 7 ans par FredericLibaud

La programmation, autrement dit le codage tout un sujet... que je connais bien trop bien même puisque que j'en fait depuis plus de 30 ans !

La POO (Programmation Orienté Objet) est un paradigme permettent de représenter sous forme d'objet plus ou moins complexe et hiérarchisé les fonctionnalités d'un logiciel.

La programmation fonctionnelle est un paradigme mettent en avant la programmation par des évaluations de fonctions.

Programmation fonctionnelle et POO ne sont pas forcément opposée au moins pour l'implémentation du second dans un langage (F#, Ocaml, Scala, ...).

Toutefois, les langages implémentent la programmation fonctionnelle n'ont pas forcément l'intérêt des développeurs, ni d'ailleurs dans les équipes projets. On est plutôt sur du HTML/JavaScript, PHP, C++, Java, C#...

Pour ma part un bon développeur est capable de coder dans n'importe qu'elle langage à mon avis. La ou ça se corse c'est qu'aujourd'hui on ne peu plus développer d'applicatifs sans utiliser différents frameworks et librairies, dont il faut faire l'intégration.

Il est donc nécessaire d'utiliser un environnement de développement de haut niveau, intégré dans une chaîne logiciel industrielle (analyse, conception, réalisation, tests, mise en production/commercialisation, etc.).

Tout un programme...

Frédéric Libaud - Expert en Numérique | Administrateur, référent pour la région ouest et responsable SI de CINOV - IT
www.libaudfrederic.fr | blog.libaudfrederic.fr | www.cinov-it.fr

2

Vous aimez Skiller?

Rejoignez la communauté.