Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pédagogie : C++ ou Java ?

133 réponses
Avatar
Gilles
Bonjour à tous.

J'ai beaucoup apprécié le fil "Avis sur les include files" où ont été
abordées entre autres des questions sur l'enseignement du C++ et les "bonnes
habitudes" à enseigner en TP, ce qui m'incite à poster ce message.

Voici la situation : je suis enseignant en IUT - DUT informatique (Bac+2 à
vocation professionnelle). Jusqu'à maintenant la programmation était
enseignée au travers du C++. Il est fortement question de changer ce choix
dans notre IUT pour remplacer C++ par Java (actuellement un enseignement de
Java existe, mais en seconde année seulement, donc avec déjà une pratique du
C++ et les bases de la POO).

J'aimerais vos avis sur ces deux questions :
- quels sont les arguments en faveur (ou en défaveur) du C++ (par rapport à
Java) pour enseigner la POO à des débutants complets en programmation ? (et
pour qui, pour reprendre une remarque apparue dans le fil auquel je faisais
référence, il n'y a plus en majorité "de passion ou de réelle envie de faire
de l'informatique"...)
- est-il raisonnable de lâcher sur le marché du travail des informaticiens
"Bac+2" qui n'aient jamais programmé en C++ ?

Note personnelle : je ne suis pas le chargé de cours concerné, j'ai une
tendance à préférer le C++ (par mon parcours et par mon activité quotidienne
en recherche), mais je n'aurai aucune réticence à faire pratiquer Java si je
suis convaincu que c'est un meilleur choix pour mes étudiants.

Merci d'avance pour vos contributions qui nourriront sûrement le débat que
nous devrions avoir au sein de l'équipe pédagogique.

Gilles

3 réponses

Avatar
Wykaaa
Jaco a écrit :
On 6 fév, 11:48, Wykaaa wrote:

Je ne suis pas d'accord sur "plus C# que Java" car Java est maintenant
presque dans le domaine du libre alors que C# est propriétaire et que
son langage intermédiaire (MSIL, l'équivalent du bytecode) n'est pas
très "inter-langages" (.NET supporte d'autres langages mais pas
l'ensemble de leurs bibliothèques, ce qui est très piégeant).



Ce n'est pas tout à fait vrai non plus... Mono est libre (Ce n'est pas
encore le cas de Java, loin s'en faut, à moins de n'utiliser que
certaines plate-formes).



C'est vrai et c'est assez désolant.

D'ailleurs, je m'en sers pour remplacer Java dans mon cours de cette
année car, personnellement, je trouve le langage "mieux foutu" que
Java (peut-être aussi parce que ça me gave de voir du Java partout et
à toutes les sauces).



Oui, il est vrai que C# est "mieux foutu" que Java, sur certains aspects
car Microsoft a corrigé certains défauts de Java.
ceci étant, je ne suis pas certain que tu rendes service à tes étudiants
sur le long terme... (il y aura du Java dans 50 ans comme il y a encore
du Cobol, pour C#, je ne suis pas sûr...).
Avatar
Eric Jacoboni
Wykaaa writes:


Oui, il est vrai que C# est "mieux foutu" que Java, sur certains
aspects car Microsoft a corrigé certains défauts de Java.
ceci étant, je ne suis pas certain que tu rendes service à tes
étudiants sur le long terme... (il y aura du Java dans 50 ans comme il
y a encore du Cobol, pour C#, je ne suis pas sûr...).



Ce n'est pas mon point de vue :)

En fait, je me moque de savoir si l'industrie actuelle a besoin de
développeurs C#, Java, whatever... je ne suis pas là pour fournir du
"clé en mains", sinon, je leur ferai du SAP, aussi :)

Mon but est de leur apprendre à programmer correctement, à bien
conceptualiser le truc plus qu'à connaître les détails intimes d'un
langage, quel qu'il soit : ça, n'importe quel technicien de base un peu fûté est capable
de le faire moyennant les bonnes docs).

Donc, j'ai refondu la plage des langages que j'enseigne :

1 - Haskell pour la prog fonctionnelle (et, l'année prochaine, je passe
à Erlang)
2 - Ruby pour tout ce qui est "brique de base", POO, introspection,
méta-programmation
3 - C# pour remplacer Java comme langage à typage statique et pour
qu'ils puissent s'adapter aux autres modules faits par d'autres

Bref, j'ai pris les langages qui me semblaient les "plus propres" de mon
point de vue.

Ils font par ailleurs "un peu" de C et de C++, mais c'est plus pour leur
culture personnelle et C++ a quand même des spécificités qu'on ne trouve
pas dans les autres langages, qui méritent donc d'être connues.

Pour tout dire, j'ai même viré C pour les enseignements de "prog
système" et de "prog réseau" car je me suis aperçu qu'ils passaient plus
de temps à déboguer leur bus error et à se dépatouiller avec leurs
allocations mémoire qu'à vraiment s'occuper des appels
systèmes, des problèmes de synchro, etc. (Idem pour la programmation des
sockets). Je pars du principe qu'un gus à près normal sera capable, si
besoin est, de faire un appel système POSIX en C s'il sait ce qu'il
fait... donc, du coup, je fais tout ça en Ruby aussi.

Ils auront bien le temps, après, de se focaliser sur un
langage. L'essentiel est de leur donner les billes pour l'appréhender
correctement et lui faire donner ce qu'ils en ont envie... Voire de
pouvoir choisir celui qui convient le mieux à leur besoin (pour autant
qu'on leur en laisse le choix, d'ailleurs).

Cela dit, je comprend tout à fait qu'on ait envie de se plonger dans les
moindres détails d'un langage (c'est d'ailleurs ce que moi j'essaie de
faire au gré de mes envies) mais les volumes horaires étant ce qu'ils
sont, on n'a tout simplement pas le temps de le faire avec les étudiants
(dans ma formation, en tous cas).
Avatar
Marc
Jaco wrote:

Ce n'est pas tout à fait vrai non plus... Mono est libre (Ce n'est pas
encore le cas de Java, loin s'en faut, à moins de n'utiliser que
certaines plate-formes).



Hmm, openjdk n'a pas de compilateur pour toutes les plate-formes, mais
l'interpréteur ("zero") tel qu'on le trouve dans icedtea fonctionne plus
largement, et on n'est pas obligé de se restreindre à l'implémentation de
Sun (Harmony est une autre implémentation libre, il y a des dizaines de
JVM (je crois même qu'il y en a une dans mono), classpath fournit une
grande partie des bibliothèques, etc). En sens inverse, Mono n'implémente
pas toutes les bibliothèques .NET utilisées sous windows, ne supporte pas
toutes les plate-formes usuelles, et est à ma connaissance la seule
implémentation non-Microsoft. Et encore je ne parle que d'implémentation
et pas d'évolution du langage. Il faut donc être prudent sur la
formulation.

D'ailleurs, je m'en sers pour remplacer Java dans mon cours de cette
année car, personnellement, je trouve le langage "mieux foutu" que
Java (peut-être aussi parce que ça me gave de voir du Java partout et
à toutes les sauces).



Normalement (je croise les doigts) les étudiants devraient être capables
de réutiliser l'essentiel de ce qu'ils apprennent sur java en C# et
réciproquement. Pour le C++, c'est déjà un peu moins évident.