JavaRush /Blog Java /Random-FR /Pause café #131. Le rôle de Java dans le développement d'...

Pause café #131. Le rôle de Java dans le développement d'applications Web et mobiles. Programmation fonctionnelle - avantages et inconvénients

Publié dans le groupe Random-FR

Le rôle de Java dans le développement d'applications Web et mobiles

Source : DZone Java est l'un des langages de programmation les plus utilisés. Il est activement utilisé dans le développement d’applications d’entreprise, Web et mobiles. Java a des applications dans les principales industries technologiques, de la science des données à l'AR/VR. Bien que le développement d'entreprise en Java soit le cas d'utilisation le plus populaire de ce langage, les applications Web et mobiles sont également considérées comme l'un des domaines dans lesquels Java est utilisé. Pause café #131.  Le rôle de Java dans le développement d'applications Web et mobiles.  Programmation fonctionnelle - avantages et inconvénients - 1Voyons pourquoi le développement Java est devenu si populaire sur le Web et les appareils mobiles au cours des deux dernières décennies. L’une des principales raisons d’utiliser Java pour le Web et les mobiles est qu’il s’agit d’un langage de programmation hautes performances. Il garantit que vos applications peuvent s'exécuter rapidement et sans aucune erreur de traitement. Il y a aussi d'autres raisons :

1. Ouvrir la source

Étant un langage de programmation open source, Java présente de nombreux avantages. Premièrement, cela réduit le coût du processus de développement d’applications. Deuxièmement, les développeurs changent facilement de langue et la mettent à jour fréquemment car elle est open source. De plus, Java possède une syntaxe facile à lire qui facilite le développement d'applications pour le Web et les appareils mobiles. Enfin, les développeurs peuvent utiliser la base de code du langage existant et l'améliorer.

2. Multiplateforme

Un autre avantage de la programmation en Java est qu’il s’agit d’un langage multiplateforme. Les développeurs peuvent écrire du code sous Windows et l'exécuter sur macOS et Linux. Le principe « écrire une fois, courir partout » s’applique ici. Cela facilite la tâche des développeurs travaillant sur différents systèmes et simplifie le processus de test sur différentes machines. Par exemple, les développeurs peuvent tester si un programme fonctionnera correctement sur différentes tailles d'écran et systèmes d'exploitation.

3. Adapté aux mobiles

Java est une technologie populaire pour les applications mobiles. Les développeurs d'applications Android utilisent principalement le langage Java car il est facile à mettre en œuvre, possède des fonctionnalités de sécurité et des capacités multiplateformes. Android nécessite un langage puissant pour faire évoluer une application, mais Java offre des capacités de mise à l'échelle étonnantes. Cela simplifie également le processus de test des applications Android. Tout cela suggère qu'il s'agit d'un langage de programmation fiable et dynamique pour créer des applications mobiles.

4. Outils et bibliothèques

L’un des avantages les plus significatifs de Java est sa compatibilité avec divers outils. Des frameworks tels que Spring, Hibernate, Struts, Spark et autres simplifient considérablement le processus de développement. Tous ces outils offrent diverses fonctionnalités pour créer des applications interactives et dynamiques. Des bibliothèques comme Apache Commons, Java Standard Libraries, Maven, Jackson, etc. permettent aux développeurs d'ajouter des fonctionnalités sans écrire de code à partir de zéro.

5. Communauté active

Il existe plus de 7,6 millions de développeurs Java dans le monde. Ils mettent constamment à jour le langage de programmation et y ajoutent de nouvelles fonctionnalités. Puisque Java est mis à jour tous les 6 mois, les développeurs ont la possibilité d’apprendre rapidement et de créer de meilleurs produits. Vous pouvez également utiliser la communauté Java pour trouver des réponses à diverses questions.

L'essor de Java dans le développement d'applications Web

Depuis sa création en 1995 par Sun Microsystems, le langage Java est devenu l'une des priorités de l'industrie de la programmation. Aujourd'hui, des entreprises du monde entier utilisent ce langage de programmation pour créer des applications Web. Google, Netflix, Spotify et Pinterest ne sont que quelques entreprises qui utilisent Java dans leur pile technologique. Les experts estiment que plus de 60 % des entreprises travaillant dans le secteur informatique utilisent Java sous une forme ou une autre. De plus, il reste un langage de programmation populaire en raison de son adoption dans d'autres domaines du développement Web, à savoir le cloud computing, les médias sociaux, le développement d'entreprise, la réalité augmentée, la réalité virtuelle, etc. Il s'agit d'un langage de programmation excellent et puissant destiné aux entreprises qui ont désormais besoin d'une architecture basée sur le cloud. Lorsqu'il est combiné avec JavaScript, Java vous permet de créer des applications Web hautes performances pouvant s'exécuter sur n'importe quelle plateforme.

L'essor de Java dans les cas d'utilisation modernes

Outre le développement Web et le développement mobile, Java a fait sa marque dans le monde technologique moderne. Aujourd’hui, Java est un langage de programmation extrêmement utile pour les applications scientifiques. Il offre un environnement sécurisé, rapide et portable pour le calcul scientifique. MATLAB est l'une des bibliothèques les plus populaires pour les applications scientifiques basées sur Java.
  • Java est également utile dans le développement front-end et back-end d’applications scientifiques. Vous pouvez utiliser Struts et Java Server Pages pour le développement front-end et Java Core pour le développement back-end d'applications scientifiques.

  • Java est également utile pour l'analyse des données. Il permet aux développeurs de créer des solutions d'analyse de données à l'aide de diverses bibliothèques et outils. Aujourd'hui, Java a trouvé une application dans le segment de l'Internet des objets. Il s'agit d'une technologie clé dans les systèmes embarqués tels que les cartes à puce et les capteurs. Par conséquent, les entreprises utilisent ce langage de programmation dans le secteur de la domotique. De plus, il est activement utilisé dans le développement des technologies d’appareils de streaming et de Smart TV.

  • La plateforme Big Data Hadoop est écrite en Java. Parce qu'il s'agit d'un langage open source et orienté objet, il constitue la pierre angulaire des applications Big Data. Les langages de programmation comme Scala peuvent facilement s'exécuter sur la machine virtuelle Java et faciliter l'analyse du Big Data.

  • Le jeu vidéo est une industrie émergente et en croissance rapide dans laquelle Java est largement utilisé pour diverses applications de jeux. Par exemple, il prend en charge jMonkeyEngine, le plus grand moteur de développement de jeux 3D open source. De plus, Dalvik Virtual Machine (DVM) est principalement prise en charge par Java et est utilisée pour créer des jeux interactifs pour Android.

Programmation fonctionnelle - avantages et inconvénients

Source : Dev.to Malgré mon scepticisme traditionnel à l'égard des technologies inconnues, je reconnais les avantages de la programmation fonctionnelle. Vous trouverez ci-dessous une liste approximative des avantages qui décrivent ce paradigme de programmation. Pause café #131.  Le rôle de Java dans le développement d'applications Web et mobiles.  Programmation fonctionnelle - avantages et inconvénients - 2

Concurrence sécurisée

L'approche fonctionnelle encourage une concurrence sécurisée, c'est-à-dire la possibilité d'exécuter des tâches dans des threads séparés sans provoquer de conflits de threads ou de collisions de modifications. La raison en est que contrairement à l’approche objet, vous ne partagez pas un objet dont l’état peut être modifié au cours du traitement. Il y a des entrées et des sorties, et l’entrée ne change pas à cause de vous. En Java, même si vous utilisez des objets « thread-safe », vous ne pouvez pas garantir qu’ils auront les mêmes valeurs lors de l’appel de votre méthode. Dans l'exemple ci-dessous, nous pouvons voir qu'une boucle qui traite les éléments un par un peut être facilement traitée en parallèle à l'aide d'une fonction lambda à l'intérieur d'un thread.
for( String item : items ) {
   process(item);
}
Et maintenant cela devient :
items.parallelStream().forEach( item -> process(item) );

E/S rapides

La programmation fonctionnelle prend en charge une approche différente du multithreading. Cela signifie que nous n'avons plus de threads séparés attendant des réponses d'E/S telles que des appels de base de données. Autrement dit, nous maximisons l'utilisation du processeur et de la bande passante. Pour les applications hautes performances, cela constitue un avantage évident. Ceci est implémenté avec l'idée qu'un appel de fonction peut renvoyer un Future, qui n'est pas le résultat réel de l'appel, mais plutôt une promesse de renvoyer le résultat à un moment donné dans le futur. À un moment donné dans le futur, une valeur de retour est obtenue qui exécute la fonction. Cela signifie que les threads du processeur n'attendent pas la fin des appels à la base de données ou REST et peuvent faire autre chose.

Brièveté de l'expression

Les développeurs de logiciels veulent pouvoir exprimer des idées complexes avec élégance. La programmation fonctionnelle vous permet de le faire de manière concise. Par exemple, les constructions courantes telles que les boucles for peuvent être remplacées par des threads, qui résument les opérations communes pour lesquelles les boucles sont utilisées. Il ne fait aucun doute que l’ajout de fonctions et de threads Lambda à Java a élargi la capacité d’exprimer des idées qui étaient auparavant impossibles.

Pourquoi ne pas devenir fonctionnel ?

Juste pour réitérer ce qui précède : le codage fonctionnel présente de nombreux avantages, donc cet article n'essaie pas de tout généraliser dans un seul cas et de dire que vous devez absolument faire de la programmation fonctionnelle ou vice versa. Cette décision doit être prise avec une compréhension claire des raisons de la transition et des problèmes potentiels.

Il est toujours difficile de comprendre intuitivement

Lorsque vous écrivez du code, essayez-vous de communiquer avec l’ordinateur ? Si la communication avec un ordinateur est si importante pour vous, pourquoi ne pas écrire en code machine ? Bien sûr, c'est très difficile, c'est pourquoi des langages informatiques ont été inventés pour faciliter les choses. Ils permettent également aux programmeurs de créer des expressions que d’autres programmeurs peuvent comprendre. À mesure que les logiciels deviennent plus volumineux et plus complexes, nous avons besoin de stratégies pour gérer la complexité. Nous y parvenons grâce aux abstractions et à la dissimulation d’informations. La classe que vous utilisez en Java pour envoyer des e-mails est assez complexe, mais l'interface de cette classe est simple. Il cache la mise en œuvre détaillée, ne nous révélant que le côté externe du contrôle. Les fonctionnalités du langage telles que les accolades et les crochets nous indiquent la structure telle que les instructions conditionnelles et les boucles. Ce n'est que maintenant que nous déplaçons les boucles, ou plutôt la récursivité, et les conditions en fonctions :
for( String item : items ) {
    System.out.println(item);
}
Il s'avère:
items.foreach( item -> System.out.println(item) );
Les approches streaming et lambda sont nettement plus courtes. Vous pouvez exprimer la même fonctionnalité avec moins de code. Le problème est que nous cachons désormais le comportement réel dans les méthodes que nous devons connaître. Les boucles en Java utilisent des mots-clés. D'un autre côté, les fonctions lambda peuvent implémenter diverses formes de récursion, et seul le nom ici indique ce qu'elles font. Par exemple:
boo.fooble( item -> System.out.println(item) );
Vous ne pouvez plus simplement lire le code pour comprendre la structure. Cela rend difficile le suivi du flux d’exécution. Une autre fonctionnalité est le chaînage de fonctions, où le résultat d'une fonction est l'entrée de la suivante sans attribuer de variable intermédiaire.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Cela pourrait avoir du sens pour l'auteur de ce code car il semble avoir écrit chaque fonction et sait ce qu'elle fait. Cependant, pour ceux qui découvrent le code, cela ne vous dit pas grand-chose sur les paramètres, les processus ou les valeurs de retour de chaque fonction. Mais si vous écrivez la même chose dans quelque chose qui attribue des types, vous obtiendrez :
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Ce n’est peut-être pas une analogie parfaite, puisque les paramètres et les fonctions anonymes ne sont pas la même chose, mais le fait est qu’une longue phrase avec des résultats et des paramètres inconnus est difficile à lire sans une compréhension plus approfondie de ce que font les fonctions décrites ci-dessous. Il est donc possible que la programmation fonctionnelle soit à la fois très expressive dans des segments de code étonnamment courts, mais incompréhensible pour les nouveaux utilisateurs du logiciel. Le but des classes et des interfaces est de masquer les données, de créer des morceaux de code réutilisables qui ne nécessitent pas que le développeur comprenne ou peut-être même examine l'implémentation. Ils existent pour que les développeurs puissent travailler sur des systèmes vastes et complexes sans soucis. Il s'agit d'un moyen pratique d'organiser le code associé à des entités spécifiques. Cependant, je comprends mal comment la programmation fonctionnelle aide à structurer de grands projets complexes. Il y a probablement des raisons subjectives à cela.

Pour impressionner les autres avec vos compétences

Certains développeurs de logiciels manquent tellement de confiance dans leurs compétences qu'ils tentent d'impressionner en écrivant du code inutilement complexe. En tant que développeur senior, je n'admire pas particulièrement les autres développeurs de logiciels qui tentent d'écrire du code intelligent. Bien entendu, cela ne s’applique pas uniquement à la programmation fonctionnelle ; la même chose peut se produire dans n’importe quel style de codage. Mais j’ai remarqué une certaine vanité intellectuelle chez les partisans de la programmation fonctionnelle. Le fait est que les développeurs de logiciels ne travaillent pas en vase clos. Ce code « intelligent » devra être maintenu, et s’il est difficile à comprendre, il sera alors difficile à lire et à modifier, et difficile à déboguer. Lorsque nous gérons des équipes, nous avons des personnes à tous les niveaux, donc la chose la plus intelligente à faire est d'écrire du code d'une manière que toutes les personnes impliquées peuvent comprendre. C'est pourquoi nous avons des noms de variables longs et clairs, nous limitons donc la longueur des méthodes. Le code « intelligent » prendra plus de temps, il n’est donc pas très intelligent de l’écrire. Je crois que la programmation fonctionnelle utilise les mêmes arguments sur les expressions concises et puissantes que Perl a fait il y a de nombreuses années. Les partisans de Perl étaient fiers de son expressivité, de sa capacité à écrire des programmes très puissants en quelques lignes de code seulement. C'était vrai. Le problème était qu’ils étaient difficiles à comprendre. Peut-être que la programmation fonctionnelle est tombée dans le même piège.

Parce que c'est une nouvelle mode

Il y a toujours une nouvelle technologie ou un nouveau paradigme « en vogue ». De nouvelles technologies, langages et approches émergent constamment. Nous devons constamment nous remettre en question et apprendre de nouvelles choses. Être développeur de logiciels signifie faire progresser la technologie. Mais en tant que développeurs de logiciels, nous devons évaluer nous-mêmes les technologies dont nous avons besoin pour créer un produit. Apprendre une nouvelle technologie populaire simplement parce qu’elle est populaire n’est pas une utilisation judicieuse du temps. Cela ne signifie pas que vous ne devez pas apprendre la programmation fonctionnelle, mais plutôt que vous devez évaluer les avantages et les inconvénients de ce paradigme pour l'application que vous écrivez.

Parce que c'est la seule vraie façon

Plusieurs fois auparavant, j'ai vu des développeurs promouvoir telle ou telle approche comme la seule correcte. Mais comme me l’a dit un ami, différents emplois nécessitent différents outils. Par exemple, j'utilise personnellement Python et PyTorch pour l'intelligence artificielle, bien qu'il existe de nombreux autres outils et technologies, chacun avec ses propres avantages et inconvénients. Il existe de bonnes raisons d’envisager la programmation fonctionnelle comme une option pour les services nécessitant une évolutivité importante. Cela est dû à la sécurité de la concurrence offerte par cette approche. Mais vous devez également être conscient des coûts et des risques potentiels. Il y a quelques années, j'ai eu une expérience similaire avec l'injection de dépendances et Spring étant considéré comme le meilleur pour ce travail. Lorsque j'ai demandé aux supporters du Printemps quels avantages cela apportait, ils ne m'ont pas donné de réponses claires. Je constate maintenant quelque chose de similaire chez certains puristes de la programmation fonctionnelle qui semblent s'engager dans une sorte de campagne religieuse plutôt que dans une évaluation impartiale de la technologie. D’ailleurs, l’injection de dépendances était une excellente idée et je peux désormais clairement identifier ses avantages. De même, je pense que mes préoccupations concernant la programmation fonctionnelle concernent la manière dont elle est utilisée, plutôt que son utilité et sa validité.

Conclusion

Le but de cet article n’est pas de fournir une réponse claire à la question de savoir si vous devez faire de la programmation fonctionnelle. Le point est de savoir comment vous évaluez toute nouvelle technologie ou approche. L'essentiel : ne laissez pas votre ego bloquer une évaluation objective de votre part. Le développement de logiciels ne constitue pas une preuve de vos capacités intellectuelles ou de vos qualités personnelles. Il s'agit de créer de la valeur dans le monde réel. Si la programmation fonctionnelle vous aide, utilisez-la.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION