CodeGym /Blog Java /Random-FR /Est resté coincé? Les parties les plus difficiles de l'ap...
John Squirrels
Niveau 41
San Francisco

Est resté coincé? Les parties les plus difficiles de l'apprentissage de Java et comment les surmonter

Publié dans le groupe Random-FR
Comme vous le savez, nous recommandons aux débutants en codage de commencer à apprendre les langages de programmation avec Java, et CodeGym a tout pour rendre le processus d'apprentissage de Java digeste même pour les étudiants les moins préparés. Mais autant que les éléments de gamification, l'histoire facile à vivre et les personnages amusants aident à faciliter ce processus, l'apprentissage des principes fondamentaux de Java dans son intégralité va rarement sans défis pour la majorité des nouveaux apprenants. Est resté coincé?  Parties les plus difficiles de l'apprentissage de Java et comment les surmonter - 1Aujourd'hui, nous allons examiner certains des domaines les plus difficiles des principes fondamentaux de la programmation Java, en essayant de comprendre pourquoi de nombreuses personnes les trouvent difficiles et si vous pouvez faire quelque chose à ce sujet.

1. Génériques

Les génériques en Java sont des types qui ont un paramètre. Lors de la création d'un type générique, vous spécifiez non seulement un type, mais également le type de données avec lequel il fonctionnera. Les génériques sont souvent mentionnés par les apprenants Java comme l'une des parties les plus difficiles à comprendre de Java. "Mon principal problème concerne toujours les génériques. C'est beaucoup plus facile lorsque vous avez des méthodes avec des paramètres à suivre, mais cela devient déroutant lorsque vous devez écrire les vôtres », a déclaré un apprenant anonyme de Java.

Conseils et recommandations

Voici un avis sur les génériques en Java de Ravi Reddy, programmeur expérimenté et professeur d'université : « Les génériques Java font une chose que les modèles C++ ne font pas : implémenter la sécurité des types. L'implémentation de modèles C++ est une simple astuce de pré-processeur et ne garantit pas la sécurité des types. Les génériques en Java sont comme les modèles C++ mais avec une sécurité de type supplémentaire. Et à mon humble avis, la sécurité de type est une caractéristique essentielle de tout bon environnement de développement. Et oui! Ils peuvent prêter à confusion en raison de nos déplacements mentaux entre les paramètres et les types. Mais je crois que passer du temps à les maîtriser en vaut la peine. Parce que je me suis retrouvé à "penser" beaucoup mieux en Java une fois que j'ai compris les interfaces et les génériques."

2. Multithreading

Le multithreading en Java est un processus d'exécution simultanée de deux ou plusieurs threads pour obtenir une utilisation maximale du processeur par l'application. Le multithreading résout des tâches très importantes et peut rendre nos programmes plus rapides. Souvent plusieurs fois plus rapide. Mais il est considéré comme l'un des sujets sur lesquels de nombreux nouveaux apprenants Java ont tendance à rester bloqués. Tout cela parce que le multithreading peut également créer des problèmes au lieu de les résoudre. Le multithreading peut créer deux problèmes spécifiques : les blocages et les conditions de concurrence. Le blocage est une situation où plusieurs threads attendent des ressources détenues les unes par les autres, et aucun d'entre eux ne peut continuer à s'exécuter. Une condition de concurrence est une erreur de conception dans un système ou une application multithread, où le fonctionnement du système ou de l'application dépend de l'ordre dans lequel les parties du code sont exécutées.

Conseils et recommandations

Voici une bonne recommandationsur la façon de gérer le multithreading de S.Lott, architecte logiciel et utilisateur actif de StackExchange, un site Web de questions-réponses populaire : "Le multithreading est simple. Coder une application pour le multi-threading est très, très facile. Il existe une astuce simple, qui consiste à utiliser une file d'attente de messages bien conçue (ne lancez pas la vôtre) pour transmettre des données entre les threads. La partie la plus difficile consiste à essayer de faire en sorte que plusieurs threads mettent à jour comme par magie un objet partagé d'une manière ou d'une autre. C'est à ce moment-là que cela devient sujet aux erreurs parce que les gens ne font pas attention aux conditions de course qui sont présentes. Beaucoup de gens n'utilisent pas les files d'attente de messages et essaient de mettre à jour les objets partagés et de se créer des problèmes. Ce qui devient difficile, c'est de concevoir un algorithme qui fonctionne bien lors de la transmission de données entre plusieurs files d'attente. C'est difficile.

3. Problèmes de chemin de classe

Les erreurs de chemin de classe sont également considérées comme l'un des problèmes les plus fréquemment rencontrés par les développeurs Java dans leur travail quotidien. "Les problèmes de classpath peuvent prendre du temps à déboguer et ont tendance à se produire aux pires moments et endroits possibles : avant les versions, et souvent dans des environnements où l'équipe de développement n'a que peu ou pas accès. Ils peuvent également se produire au niveau de l'IDE et devenir une source de productivité réduite », explique Vasco Ferreira, développeur Java/Javascript expérimenté et auteur de didacticiels liés à la programmation.

Conseils et recommandations

« Les problèmes de chemin de classe ne sont pas aussi bas ou inaccessibles qu'ils pourraient le sembler au premier abord. Il s'agit de fichiers zip (jars) présents / non présents dans certains répertoires, comment trouver ces répertoires et comment déboguer le classpath dans des environnements à accès limité. En connaissant un ensemble limité de concepts tels que les chargeurs de classe, la chaîne de chargeur de classe et les modes Parent First / Parent Last, ces problèmes peuvent être résolus efficacement », explique l'expert.

4. Polymorphisme et son utilisation correcte

En ce qui concerne les principes de la programmation orientée objet, de nombreuses personnes disent avoir eu du mal à comprendre le polymorphisme. Le polymorphisme est la capacité d'un programme à traiter des objets avec la même interface de la même manière, sans information sur le type spécifique de l'objet. Bien que le polymorphisme soit un sujet assez basique, il est plutôt étendu et forme une bonne partie de la base de Java. Pour de nombreux étudiants, le polymorphisme est une première difficulté dans l'apprentissage de Java. Tout cela parce qu'il existe différentes formes de polymorphisme utilisées dans différents contextes, ce qui peut prêter à confusion.

Conseils et recommandations

Il n'y a pas d'autre moyen de traiter le polymorphisme que de l'apprendre. Voici comment Torben Mogensen, qui enseigne la programmation à l'Université de Copenhague, expliquece concept : "Simple surcharge : + peut signifier à la fois l'addition d'entiers, l'addition de virgule flottante et (dans certains langages) la concaténation de chaînes. Polymorphisme de sous-type : si B est un sous-type de (hérite de) A, toute valeur de type B peut être utilisée dans un contexte qui attend une valeur de type A. Polymorphisme paramétrique : un type peut être paramétré avec des paramètres de type, de sorte que vous dans différents contextes peuvent fournir différents arguments de type, vous instanciez donc le type paramétré à différents types concrets. Ceci est également appelé "modèles" ou "génériques" et est généralement spécifié dans les langages OO à l'aide de crochets angulaires (tels que T<A>). Polymorphisme d'interface. Il s'agit essentiellement d'un mécanisme dans lequel vous limitez le polymorphisme de sous-type aux sous-types qui implémentent une certaine interface ou le polymorphisme paramétrique aux paramètres de type qui implémentent une certaine interface.

5. Réflexion

La réflexion est un mécanisme permettant d'explorer les données d'un programme pendant son exécution. La réflexion vous permet d'explorer des informations sur les champs, les méthodes et les constructeurs de classe. Il vous permet également de travailler avec des types qui n'étaient pas présents au moment de la compilation, mais qui sont devenus disponibles au moment de l'exécution. La réflexion et un modèle logiquement cohérent pour l'émission d'informations d'erreur permettent de créer un code dynamique correct. Mais pour beaucoup de gens, il n'est pas si facile de comprendre comment utiliser Reflection.

Conseils et recommandations

« Dans le cas de la réflexion et de Java, la réflexion permet à Java, qui est conçu pour être typé statiquement, d'être typé dynamiquement. Le typage dynamique n'est pas intrinsèquement mauvais. Oui, cela permet au programmeur de casser certains principes de la POO, mais en même temps, cela permet de nombreuses fonctionnalités puissantes comme le proxy d'exécution et l'injection de dépendances. Oui, Java vous permet de vous tirer une balle dans le pied en utilisant la réflexion. Cependant, vous devez pointer très explicitement le pistolet sur votre pied, retirer la sécurité et appuyer sur la gâchette », explique Jayesh Lalwani, programmeur Java expérimenté et architecte d'applications.

6. Flux d'entrée/sortie

Les flux vous permettent de travailler avec n'importe quelle source de données : Internet, le système de fichiers de votre ordinateur ou autre chose. Les flux sont un outil universel. Ils permettent à un programme de recevoir des données de n'importe où (flux d'entrée) et de les envoyer n'importe où (flux de sortie). Leur tâche est la même : prendre des données d'un endroit et les envoyer à un autre. Il existe deux types de flux : les flux d'entrée (utilisés pour recevoir des données) et les flux de sortie (pour envoyer des données). Ce qui rend difficile la compréhension de l'utilisation des flux par de nombreuses personnes, c'est le fait que Java possède plusieurs classes de flux d'E/S.

Conseils et recommandations

"Java a tellement de classes de flux d'E/S principalement en raison de deux facteurs contributifs. Le premier est l'héritage. Certaines classes sont toujours là pour des raisons historiques et elles ne sont pas obsolètes car elles ne sont pas considérées comme nuisibles. Deuxièmement, la flexibilité. Différentes applications ont des exigences différentes et vous disposez donc de plusieurs options en fonction de vos besoins. Des abstractions utiles apportent de la clarté lorsque vous le lisez et avec quelques lignes de code, vous pouvez faire beaucoup », explique Jonas Mellin, un expert Java de Suède. Quels aspects de Java avez-vous trouvé les plus difficiles à comprendre ou sur lesquels vous avez été bloqué pendant un certain temps ? Partagez vos expériences dans les commentaires.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION