IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

L'OpenJDK formule une proposition visant à rendre Java plus facile à apprendre pour les débutants
à travers une fonctionnalité du JDK 21 qui est actuellement désactivée par défaut

Le , par Anthony

24PARTAGES

7  0 
Le langage Java pourrait être plus facile à apprendre pour les étudiants grâce à une proposition visant à introduire des méthodes main flexibles et des classes principales anonymes dans le langage.


Les détails du plan comprennent l'amélioration du protocole par lequel les programmes Java sont lancés pour être flexibles, en particulier pour permettre l'omission du paramètre String[] des méthodes principales et pour permettre à ces dernières de n'être ni publiques ni statiques ; le programme "Hello World" serait simplifié. Des classes principales anonymes pourraient être introduites pour rendre la déclaration de classe implicite.

Il s'agit actuellement d'une fonctionnalité du langage désactivée par défaut dans le JDK 21 (dont la disponibilité générale est prévue pour septembre), incluse pour provoquer un retour d'information de la part des développeurs sur la base d'une utilisation réelle (ce qui pourrait conduire à la rendre permanente à l'avenir). Il ne s'agit pas d'introduire un dialecte ou une chaîne d'outils Java distincts pour les débutants, souligne la proposition d'amélioration de Java (JEP) 445. "Les programmes des étudiants devraient être compilés et exécutés avec les mêmes outils que ceux qui compilent et exécutent n'importe quel programme Java."

Mais elle affirme qu'un simple programme "Hello World" a aujourd'hui "trop d'encombrement... trop de code, trop de concepts, trop de constructions - pour ce que fait le programme".

Code : Sélectionner tout
1
2
3
4
5
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World !") ;
}
}

Les classes main anonymes rendraient la déclaration de la classe publique implicite (tout en épargnant aux néophytes le "mystérieux" modificateur static et le paramètre args String[] ). Le programme est simplifié comme suit :

Code : Sélectionner tout
1
2
3
void main() {
System.out.println("Hello, World !") ;
}

La proposition soutient que ce changement réduit "la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande". Et puisque Java est destiné à être un premier langage de programmation, ce changement signifierait que les étudiants "peuvent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les grands programmes", en utilisant à la place "des déclarations simplifiées pour les programmes à classe unique". (Cela permet aux étudiants et aux éducateurs d'explorer plus progressivement les fonctionnalités du langage).

Un programme Hello, World ! écrit sous la forme d'une classe principale anonyme se concentre beaucoup plus sur ce que le programme fait réellement, en omettant les concepts et les constructions dont il n'a pas besoin. Malgré cela, tous les membres sont interprétés de la même manière que dans une classe ordinaire. Pour transformer une classe principale anonyme en classe ordinaire, il suffit d'envelopper sa déclaration, à l'exclusion des déclarations d'importation, dans une déclaration de classe explicite.

JEP 445 : Des méthodes main flexibles et des classes principales anonymes

Résumé

Faire évoluer le langage Java pour que les étudiants puissent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les gros programmes. Loin d'utiliser un dialecte Java distinct, les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique, puis étendre leurs programmes de manière transparente pour utiliser des fonctionnalités plus avancées au fur et à mesure que leurs compétences augmentent. Il s'agit d'une fonctionnalité preview du langage.

Objectifs

  • Offrir une rampe d'accès en douceur à Java afin que les enseignants puissent introduire les concepts de programmation de manière graduelle.
  • Aider les étudiants à écrire des programmes de base de manière concise et à faire évoluer leur code au fur et à mesure que leurs compétences se développent.
  • Réduire la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande.
  • Ne pas introduire de dialecte Java distinct pour les débutants.
  • Ne pas introduire de chaîne d'outils distincte pour les débutants ; les programmes des étudiants devraient être compilés et exécutés avec les mêmes outils que ceux qui compilent et exécutent tout programme Java.

Motivation

Java est un langage multi-paradigme qui excelle dans les applications complexes et de grande envergure développées et maintenues pendant de nombreuses années par de grandes équipes. Il possède de riches caractéristiques pour le masquage des données, la réutilisation, le contrôle d'accès, la gestion des espaces de noms et la modularité qui permettent de composer proprement des composants tout en les développant et en les maintenant de manière indépendante. Grâce à ces caractéristiques, les composants peuvent exposer des interfaces bien définies pour leur interaction avec d'autres composants et masquer les détails de leur mise en œuvre interne afin de permettre l'évolution indépendante de chacun d'entre eux.

En effet, le paradigme orienté objet lui-même est conçu pour assembler des éléments qui interagissent par le biais de protocoles bien définis et qui font abstraction des détails de mise en œuvre. Cette composition de grands composants s'appelle la programmation en grand. Java offre également de nombreuses constructions utiles pour la programmation en petit, c'est-à-dire tout ce qui est interne à un composant. Ces dernières années, Java a amélioré à la fois ses capacités de programmation en grand avec les modules et ses capacités de programmation en petit avec la programmation orientée données.

Cependant, Java est également conçu pour être un premier langage de programmation. Lorsque les programmeurs débutent, ils n'écrivent pas de grands programmes, en équipe - ils écrivent de petits programmes, seuls. Ils n'ont pas besoin d'encapsulation et d'espaces de noms, utiles pour faire évoluer séparément des composants écrits par des personnes différentes. Lorsqu'ils enseignent la programmation, les instructeurs commencent par les concepts de base de la programmation en petit, à savoir les variables, le flux de contrôle et les sous-programmes. À ce stade, il n'est pas nécessaire d'utiliser les concepts de programmation en grand que sont les classes, les paquets et les modules. Rendre le langage plus accueillant pour les nouveaux venus est dans l'intérêt des vétérans de Java, mais eux aussi peuvent trouver agréable d'écrire des programmes simples de manière plus concise, sans aucun échafaudage de programmation dans les grandes dimensions.

Prenons le programme classique Hello, World ! qui est souvent utilisé comme premier programme pour les étudiants de Java :

Code : Sélectionner tout
1
2
3
4
5
public class HelloWorld { 
    public static void main(String[] args) { 
        System.out.println("Hello, World!");
    }
}

Il y a trop d'encombrement ici - trop de code, trop de concepts, trop de constructions - pour ce que fait le programme.

La déclaration de classe et le modificateur d'accès public obligatoire sont des constructions de programmation à grande échelle. Ils sont utiles pour encapsuler une unité de code avec une interface bien définie vers des composants externes, mais plutôt inutiles dans ce petit exemple.

Le paramètre String[] args existe également pour interfacer le code avec un composant externe, dans ce cas le shell du système d'exploitation. Il est mystérieux et inutile ici, d'autant plus qu'il n'est jamais utilisé.

Le modificateur static fait partie du modèle classe-objet de Java. Pour le novice, static n'est pas seulement mystérieux, il est aussi nuisible : Pour ajouter des méthodes ou des champs que main peut appeler et utiliser, l'étudiant doit soit les déclarer tous comme statiques - propageant ainsi un idiome qui n'est ni commun ni une bonne habitude - soit affronter la différence entre les membres statiques et les membres d'instance et apprendre à instancier un objet.

Le nouveau programmeur rencontre ces concepts au pire moment possible, avant d'avoir appris les variables et le flux de contrôle, et alors qu'il ne peut pas apprécier l'utilité des constructions de programmation en grand pour maintenir un programme de grande taille bien organisé. Les éducateurs leur disent souvent : "Ne t'inquiète pas pour ça, tu comprendras plus tard". Cela n'est satisfaisant ni pour eux, ni pour leurs étudiants, et laisse à ces derniers l'impression durable que Java est compliqué.

La motivation de ce JEP n'est pas seulement de réduire la cérémonie, mais d'aider les programmeurs qui sont nouveaux à Java, ou à la programmation en général, à apprendre Java d'une manière qui introduit les concepts dans le bon ordre : Commencer par les concepts fondamentaux de la programmation en petit, puis passer aux concepts avancés de la programmation en grand lorsqu'ils sont réellement bénéfiques et peuvent être plus facilement appréhendés.

Nous proposons de le faire non pas en changeant la structure du langage Java - le code est toujours enfermé dans des méthodes, qui sont enfermées dans des classes, qui sont enfermées dans des paquets, qui sont enfermés dans des modules - mais en cachant ces détails jusqu'à ce qu'ils soient utiles dans des programmes plus importants. Nous offrons une rampe d'accès, une pente graduelle qui s'insère gracieusement dans l'autoroute. Lorsque les étudiants passent à des programmes plus importants, ils n'ont pas besoin d'abandonner ce qu'ils ont appris au cours des premières étapes, mais ils voient plutôt comment tout cela s'inscrit dans un cadre plus large.

Les changements que nous proposons ici ne sont qu'une étape pour rendre Java plus facile à apprendre. Ils n'abordent même pas tous les problèmes de vitesse du programme Hello, World ! ci-dessus : Le débutant peut encore être déconcerté par la mystérieuse incantation System.out.println, et il a encore besoin d'importer des classes et des méthodes utilitaires de base pour des fonctionnalités essentielles, même dans les programmes des premières semaines. Nous nous pencherons peut-être sur ces problèmes dans un prochain JEP.
Source : OpenJDK

Et vous ?

Quel est votre avis sur le sujet ?

Pensez-vous que cette approche permettra aux néophytes de mieux maîtriser les particularités du langage Java ?

Voir aussi

Java 21 devrait inclure des collections séquencées et des modèles de chaînes de caractères, le framework des collections de Java manque d'un type de collection qui représente une séquence

JDK 20 : la prochaine version de Java embarque six fonctionnalités phares parmi lesquelles Scoped Values, une API qui permet de partager des données immuables au sein d'un même thread

Oracle publie Java 20 avec des fonctionnalités en incubation et en prévisualisation, dont les threads virtuels et la concurrence structurée, ainsi que des améliorations en matière de performances

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 18/04/2023 à 7:11
Je suis pas sur que la désertification du forum Java soit due à une baisse de l'importance du Langage. J'ai l'impression que c'est le cas de la plupart des forums du site. J'ai plutôt l'impression que c'est plus lié a la montée en puissance d'alternatives qui offrent un format taillé sur mesure à la réponse de question techniques comme Stack Overflow.

Je pense que Java en temps que langage Objet statiquement typé a un réel intérêt pédagogique.
9  0 
Avatar de walfrat
Membre émérite https://www.developpez.com
Le 18/04/2023 à 9:44

Il y a trop d'encombrement ici - trop de code, trop de concepts, trop de constructions - pour ce que fait le programme.
Sérieusement ?

Les élèves peuvent juste commencer avec un "voici un template, mettez votre code ici, pour lancer le code, faite clic droit > executer en tant que > java console".

C'est comme ça que j'ai commencer, en C, sans savoir ce que c'était que ce foutu "char**argc, char**argv" et ça ne m'a pas posé de problème.
5  0 
Avatar de OButterlin
Modérateur https://www.developpez.com
Le 19/04/2023 à 8:33
Donc si je comprends bien, le fait de devoir encadrer une méthode dans une classe rend le langage trop verbeux, trop d'encombrement, trop de concept...

Que les "nouveaux" développeurs continuent à raisonner comme des fainéants, il n'y aura rien d'étonnant ensuite qu'on les remplace tous par une IA...

S'il y a une classe c'est que java est un langage objet, si ça dérange, ils n'ont qu'à faire du RPG, du côté compact, on fait difficilement mieux... encore que... même en java on peut faire du compact, illisible, pas maintenable, dans le genre
Code : Sélectionner tout
class A{public String c(String a, String b){return (a==null?"":a)+(b==null?"":b);}}
3  0 
Avatar de plegat
Expert éminent https://www.developpez.com
Le 18/04/2023 à 11:33
Citation Envoyé par Anthony Voir le message

La proposition soutient que ce changement réduit "la cérémonie d'écriture de programmes simples tels que les scripts et les utilitaires de ligne de commande".
Ok ok... et un utilitaire en ligne de commande à qui on ne peut pas passer d'arguments, c'est tout de même vite limité en fonctionnalités...
Et normalement tous les EDI ont le template et le raccourci clavier qui va bien pour taper tout ça automatiquement (ah le "psvm" de Netbeans...)

Citation Envoyé par Anthony Voir le message

Et puisque Java est destiné à être un premier langage de programmation, ce changement signifierait que les étudiants "peuvent écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les grands programmes", en utilisant à la place "des déclarations simplifiées pour les programmes à classe unique". (Cela permet aux étudiants et aux éducateurs d'explorer plus progressivement les fonctionnalités du langage).
... ou comment dire autrement "on veut pouvoir faire en Java la même chose qu'on peut faire en python"...
Je me souviens encore de certaines discussions sur le forum Java où on retrouvait 50 classes dans un seul fichier... ça sera peut-être plus clair avec cette proposition (ou pas!)

Bref, attention à une mauvaise utilisation, ça peut être bien pour mettre le pied à l'étrier, mais il faut vite bifurquer sur les constructions habituelles pour ne pas partir dans le plat de spaghetti.

Citation Envoyé par Anthony Voir le message

Un programme Hello, World ! écrit sous la forme d'une classe principale anonyme se concentre beaucoup plus sur ce que le programme fait réellement, en omettant les concepts et les constructions dont il n'a pas besoin.
Oui, enfin bon, à part afficher "Hello, World !" à l'écran, ça ne fait pas grand chose à la base comme programme... on repassera pour le côté éducatif, surtout si on simplifie en virant tous les éléments éducatifs... un quart d'heure de cours et c'est bon, on passe au niveau suivant!

Faudrait surtout travailler à virer le "System.out." pour faire un "println"... c'est franchement super trop verbeux pour les débutants...
2  0 
Avatar de marc.collin
Membre émérite https://www.developpez.com
Le 18/04/2023 à 19:14
Citation Envoyé par bouye Voir le message
le monde de l'enseignement et universitaire semble avoir entièrement basculé sur Python et JavaScript, non ?
si je me fie au cv de stagiaire qu'on recoit non... et il y a en de plus en plus qui sont francais... le java semble encore bien appris
1  0 
Avatar de walfrat
Membre émérite https://www.developpez.com
Le 19/04/2023 à 9:19
Citation Envoyé par smarties Voir le message
J'ai fait du JAVA il y a des années et j'ai basculé sur Python pour les raisons suivantes :
- trop verbeux (System.out.println, le respect des "bonne pratique" créait du code inutile à mon gout pour respecter les design patterns)
- trop de mémoire utilisée et ça explose quand on a fait de la sérialisation dé-sérialisation à mon goût... ou quand il fallait un serveur web --> ça utilisait trop de RAM sur mon NAS ARM à mon goût
- le marché de l'emploi était saturé ou j'étais et las salaires plutôt bas
1- Tu peux faire un import static System.out et tu pourras juste faire "println".
2- Tu ne fais pas des bonnes pratiques pour faire des bonnes pratiques, tu les utilises quand elle réponde à un problème que tu dois résoudre, autrement dit quand tu en as besoin.
3- Avec la completion des IDE, ecrire du code un peu plus long ne me coute rien personnellement, ce qui compte pour moi c'est plutôt a quelle vitesse je le relis, et ça ça dépend surtout du dev qui a écris le code que du language.
4- J'ai pas fait de comparaison, mais oui avec la couche habituelle de framework (quand tu vise pas spécialement du cloud), il y a une empreinte RAM de base.
1  0 
Avatar de marc.collin
Membre émérite https://www.developpez.com
Le 19/04/2023 à 14:26
java est déjà simple à apprendre.... il y a même pas 30 ans... les gens apprennaient l'asm, le c... autrement plus complexe que java

java est encore enseigné dans bonne nombre d'école

verbeux mais très très lisible
1  0 
Avatar de sylsau
Membre confirmé https://www.developpez.com
Le 26/04/2023 à 11:08
Il y a trop d'encombrement ici - trop de code, trop de concepts, trop de constructions - pour ce que fait le programme.
S'ils trouvent ça trop verbeux, autant arrêter le Java avant même d'avoir commencé.

C'est un classique de base de tout programme, je doute qu'enlever cela change grand chose ...
1  0 
Avatar de OButterlin
Modérateur https://www.developpez.com
Le 29/04/2023 à 17:02
Citation Envoyé par Uther Voir le message
...quelqu'un qui découvre la programmation est censé apprendre bien plus tard, une fois qu'il a intégré l’algorithmie.
Commencer un langage avant l'algorithmique est un non sens à mon avis... pourquoi ne pas changer un moteur avant de faire des cours de mécanique

Le problème est plutôt que les nouveaux développeurs veulent en faire toujours moins, ne pas réfléchir, tout doit venir tout cuit, sans effort.
Pour illustrer mon propos, je vois de plus en plus de discussion sur des forums dédiés au développement où à un problème la réponse est : demande à ChatGPT...
(et en l'occurrence, la réponse se trouvait sur la 10ème ligne de la stacktrace... )
1  0 
Avatar de bouye
Rédacteur/Modérateur https://www.developpez.com
Le 18/04/2023 à 0:57
Ok, pourquoi pas. D'autres langages ne le font-ils pas depuis quelques temps il me semble ? L’usage de jshell aussi a peut-être inspiré la chose.
Comme beaucoup de changements de syntaxe récents, si cela est validé, ça révolutionnera pas grand chose, puisqu’il juste une légère simplification de l’écriture du code ; le bytecode restant quand a lui inchangé.

Sauf grosse erreur d’interprétation de ma part, le mode ultra-précautionneux / arcbouté sur une syntaxe rigide du langage que les gens chargés de développer le JDK chez Sun / Oracle d'il y a 10+ ans exhibaient montrait bien que leur soucis semblait être qu'ils n'arrivaient pas a envisager des changements drastique de syntaxe sans avoir forcément avoir des modifications incompatibles du bytecode derrière. Or, visiblement, désormais, et avec tout ce qui a été introduit ou incubé depuis, ils ont un peu changé leur vision ; oui on peut vraiment faire évoluer et changer la syntaxe de Java mais derrière ça compile toujours dans la même chose.

Et puisque Java est destiné à être un premier langage de programmation
Compte tenu de la désertification du forum Java, je m'interroge sur la pertinence de cette remarque. Est-ce encore le cas aux US ? Car ça ne semble plus trop être le cas en France.
Certes on a encore parfois de temps a autres une question d'un gamin qui cherche a faire du dével sur Minecraft (et pas grand monde pour lui répondre).
Même si le faux jumeau C# a fait de beau effort de portabilité (je dois reconnaître que c'est du beau boulot de la part de Microsoft et aussi d'autres grand acteurs attractifs comme Unity), le monde de l'enseignement et universitaire semble avoir entièrement basculé sur Python et JavaScript, non ? Étant bien loin de la fac (a la fois physiquement et en nombre d’années) qu'en est-il de nos jours ?
2  2