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

10 réponses

Avatar
Wykaaa
Sylvain SF a écrit :
Wykaaa a écrit :

Veuillez m'excuser mais il y a longtemps que j'ai constaté que les
"hot-lines" du libre, que sont les forums, sont bien plus réactives
que celles de Microsoft !



dont acte, ton expérience (à toi) d'un libre (ne surtout
pas dire lequel ni pour quel service) fut efficace.



Je parlais DU libre en général. Si tu veux des noms : FF et Eclipse,
entre autres... pour des corrections de bugs.

cela conforte hélas mon point précédent.



???


(btw, je note avoir posté - une fois de plus - après Fabien,
il n'y avait rien de tourner contre son propos seul dans ma
réaction).

Sylvain.


Avatar
Sylvain SF
Wykaaa a écrit :

Veuillez m'excuser mais il y a longtemps que j'ai constaté que les
"hot-lines" du libre, que sont les forums, sont bien plus réactives
que celles de Microsoft !



dont acte, ton expérience (à toi) d'un libre (ne surtout
pas dire lequel ni pour quel service) fut efficace.



Je parlais DU libre en général. Si tu veux des noms : FF et Eclipse,
entre autres... pour des corrections de bugs.



où je ne peux que répéter qu'une entreprise rechignera souvent
à troquer des garanties contractuelles pour des généralités.

"«entre autres» ces softs là marchent mieux" n'est pas suffisant.

la "réactivité" de certains NG (parfois inexistante, parfois
sur-réactive) est (par définition) un pari qu'elles ne peuvent
pas (toutes) faire.

cela conforte hélas mon point précédent.


???



transposer le fait qu'un individuel (un petit groupe) puisse
s'en remettre aux NG pour sa source première de support est
un a priori sur le fonctionnement de services informatique
en entreprise.

Sylvain.
Avatar
Merwin
Gilles a écrit :
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





Bonjour,

Je vais donner mon avis d'étudiant, justement en DUT Informatique (1ère
année). Chez nous on commence par le C++ et on fait du Java en fin de
second semestre début de seconde année.

Je pense, de mon point de vue personnel, que la transition C++->Java est
plus simple que l'inverse. Même si C++ est peu être un peu moins évident
à appréhender en début d'année. Un de nos premiers cours de
programmation a été C++, et ce dès le premier semestre.

En parallèle on avait les cours d'architecture (Assembleur), ce qui nous
permettait de concilier un peu les deux et de comprendre ce que l'on
faisait, notamment au niveau de la gestion de la mémoire.

Après, je fais partit de ces "autodidactes têtus" qui ont un PC entre
les mains depuis 13 ans, et je vois d'autres étudiants qui ont beaucoup
plus de mal à assimiler les principes de nases.

Cependant, au premier semestre, l'apprentissage de l'UML/C++/Assembleur
en parallèle est réellement une vrai aide selon moi pour bien comprendre
le C++.

Ceci dit je n'ai certainement pas assez d'expérience pour juger !
Avatar
Fabien LE LEZ
On Sat, 07 Feb 2009 22:18:24 +0100, Merwin :

Cependant, au premier semestre, l'apprentissage de l'UML/C++/Assembleur
en parallèle est réellement une vrai aide selon moi pour bien comprendre
le C++.



J'ai bien du mal à voir ce que l'assembleur peut faire pour aider à
comprendre le C++.
(En revanche, je comprends parfaitement que l'apprentissage de
l'assembleur puisse aider à comprendre le C.)
Avatar
Wykaaa
Merwin a écrit :
Gilles a écrit :
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




Bonjour,

Je vais donner mon avis d'étudiant, justement en DUT Informatique (1ère
année). Chez nous on commence par le C++ et on fait du Java en fin de
second semestre début de seconde année.



Combien d'heures de cours de C++ ? avec et sans TP. Y a-t-il un projet
ou mini projet en C++ à faire ?
La surcharge des opérateurs est-elle détaillée ?
La dérivation virtuelle et les problèmes liés à l'héritage multiple
sont-ils expliqués ?
La gestion mémoire (new, delete et leur surcharge) est-elle expliquée en
détail ?
Enfin, lorsque le constructeur, dans une classe, fait de l'allocation
dynamique (new) est-il expliqué pourquoi il faut un constructeur de
copie et la surcharge de l'affectation ?

Je pense, de mon point de vue personnel, que la transition C++->Java est
plus simple que l'inverse. Même si C++ est peu être un peu moins évident
à appréhender en début d'année. Un de nos premiers cours de
programmation a été C++, et ce dès le premier semestre.



Il est clair que c'est plus simple d'aller de C++ vers Java que
l'inverse car, en Java, toutes mes questions ci-dessus sur C++ ne se
posent pas en Java.
Ceci dit, est-ce bien nécessaire d'apprendre tout ceci, d'emblée, à des
débutants en programmation ?

En parallèle on avait les cours d'architecture (Assembleur), ce qui nous
permettait de concilier un peu les deux et de comprendre ce que l'on
faisait, notamment au niveau de la gestion de la mémoire.



Il est sûr qu'un cours d'architecture "machine" reste indispensable pour
bien comprendre certains concepts de programmation même dans des
langages de "haut niveau", mais il n'y en a pas forcément dans tous les
cursus informatique :-(

Après, je fais partit de ces "autodidactes têtus" qui ont un PC entre
les mains depuis 13 ans, et je vois d'autres étudiants qui ont beaucoup
plus de mal à assimiler les principes de nases.



Tu voulais dire les bases :-)

Cependant, au premier semestre, l'apprentissage de l'UML/C++/Assembleur
en parallèle est réellement une vrai aide selon moi pour bien comprendre
le C++.



Oui tu as raison. Ma préoccupation est plutôt dans "le bon
apprentissage" de la programmation en général. Là je pense que C++ n'est
pas forcément le meilleur langage pour débuter malgré tes arguments.


Ceci dit je n'ai certainement pas assez d'expérience pour juger !



Et bien justement, c'est justement à des personnes comme toi que j'ai
envie de poser la question :
Ca veut dire quoi bien programmer ? (ou programmer proprement)
Avatar
Fabien LE LEZ
On Sat, 07 Feb 2009 22:41:04 +0100, Wykaaa :

Ceci dit, est-ce bien nécessaire d'apprendre tout ceci, d'emblée, à des
débutants en programmation ?



Tout ce que tu cites plus haut ? Probablement pas.
D'autant qu'on peut déjà faire pas mal de choses sans maîtriser ces
notions. À part peut-être la surcharge de l'opérateur (), c'est-à-dire
la notion de foncteur.
Avatar
Wykaaa
Yann K. a écrit :
Gilles a écrit :
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



Hello !

Je suis étudiant en DUT AS Informatique et auparavant j'ai fait un Bsc
en Physique où j'ai appris le C++.
Cette année j'ai commencé par le Java, et franchement, je ne sais que te
dire.
Je dirais presque que il faut apprendre les deux en mêmes temps ;) ( et
virer les cours de gestion & cie qui n'ont rien à foutre en info :P).



Avez-vous au moins des cours de gestion de projet (car ça, c'est
nécessaire !). Vous parle-t-on des facteurs qualité en logiciel :
fiabilité, évolutivité, interopérabilité, maintenabilité,
réutilisabilité, etc. ?
Si oui, de quelle façon ? En tient-on compte lors des TP et des projets ?


Plus sérieusement, je trouve les étudiants de moins en moins apte à
apprendre facilement de nouveaux languages, et ils ont toujours plus
envie de voir qqch de pro arrivé très rapidement.
Aussi, je pencherais pour le Java. Il gagne de plus en plus en
popularité, il permet aisément de faire la transition vers les serveurs
d'applications avec Java EE, et il permet selon moi d'intégrer plus
rapidement les concepts de POO et de motiver les étudiants à vouloir en
apprendre plus.

Cependant, repousser le C++ en deuxieme année ... Ca me briserait le
coeur ! Mais par ex, apprendre le C++ en deuxieme semestre, c'est tout
de suite plus acceptable, et ca permet en ayant bosser sur du Java de
directement passer aux trucs intéressants en C++ : SDL, OpenGL & cie.

Je ne suis pas tout à fait d'accord avec ceux qui disent que le C++ par
son coté plus exigeant procure un meilleur apprentissage.
Au contraire, devoir être vite amené à gérer la mémoire, les exceptions
tout ca, lui fera faire des erreurs desquels il n'apprendra pas grand
chose, tout ce que ca produira, ce sera de la démotivation.



Je suis assez d'accord avec toi. C++ ne me paraît pas un bon langage
pour apprendre la programmation (d'un point de vue pédagogique, je veux
dire).

Python, je trouve que ca serait bien que ce soit plus enseigné, mais
comme une cerise sur le gateau : on étudie le CSH cette année, je trouve
que c'est une honte à l'époque du bash, python et ruby ... Après avoir
étudié Java et C++, apprendre Python comme un language de "shell
amélioré" puis montrer qu'on peut faire bcp plus de choses ca serait
parfait.

On étudie le COBOL cette année et je trouve que c'est ridicule. Je
préférerais largement apprendre une "technologie d'avenir" comme Python
qui me permettrait par ex de faire joujou sur Google Engine ( - et de
présenter ca comme projet dans sa future entreprise (cf.avenir
professionnel - ) que un language uniquement plébiscité par qqs vieilles
entreprises.



Le problème c'est que COBOL représente encore 45% des lignes de code
dans le monde et, avant l'an 2000, c'était 52% !
Attention, je ne dis pas qu'il faut encore apprendre COBOL "à l'école"
mais il faut connaître la réalité.

A ce propos, en 1999 (juste avant l'an 2000 donc) je recyclais des
chômeurs informaticiens aux nouvelles technologie (cursus de 4 mois dont
Java). A l'étage au-dessus, il y avais une formation COBOL destinée à
des nouveaux embauchés par des entreprises pour modifier les "vieux"
programmes à propos du passage de l'an 2000 ! (car COBOL n'était plus
enseigné dans les cursus informatique)
C'était un peu le monde à l'envers !!

Alors, quid de l'avenir professionnel suivant la technologie enseignée ?
Je trouve l'adage qu'on se forme sur le terrain de moins en moins vrai
vu qu'on demande de maitriser plus en plus de choses en de moins en
moins de temps. Aussi, utiliser Java pour former à la programmation, un
language facile me semble une bonne idée. Puis faire les choses poussées
en C++ puisque ce language authorise beaucoup plus de choses. Enfin,
orienter le futur travailleur vers des nouvelles technologies en le
poussant à maitriser de par lui meme de nouveaux languages en lui
inculcant des préceptes de nouveaux trucs bien puissants comme le Python.



Je suis assez d'accord avec ce que tu dis là.

Yann

PS : Si je peux suggérer aussi qqch, ca serait tellement cool de mettre
un peu plus les mains dans le cambouis en voyant tout ce qui est
programmation machine. Je demande pas de l'assembleur, mais savoir faire
un peu de microproc x86 ou du microproc genre ATMEL, ça je trouve ca
serait un vrai plus ! Et ca se fait en C en plus ;).



Pour faire un bon informaticien, il me semble indispensable d'avoir vu
une architecture de processeur et un peu d'assembleur (mais pas trop...)
pour bien comprendre certains concepts de programmation, même si ensuite
on ne programme que dans des langages de haut niveau.

PS2: Ah au fait : Pas de technologies Microsoft, please ! Le C# si il en
a besoin et qu'il a vu Java+C++ il s'y formera facilement ... Mais Java
et C++ il poourra faire tourner ca partout ... C'est pas le cas du C# !



Je suis tout à fait d'accord avec le PS2 en tant que formateur.
Avatar
Wykaaa
Fabien LE LEZ a écrit :
On Sat, 07 Feb 2009 22:41:04 +0100, Wykaaa :

Ceci dit, est-ce bien nécessaire d'apprendre tout ceci, d'emblée, à des
débutants en programmation ?



Tout ce que tu cites plus haut ? Probablement pas.
D'autant qu'on peut déjà faire pas mal de choses sans maîtriser ces
notions. À part peut-être la surcharge de l'opérateur (), c'est-à-dire
la notion de foncteur.




Oui mais c'est pas le plus facile car il est d'arité variable...
Avatar
Fabien LE LEZ
On Sat, 07 Feb 2009 20:08:29 +0100, "Yann K." :

Mais Java
et C++ il poourra faire tourner ca partout ... C'est pas le cas du C# !



Mono est quand même compatible avec pas mal d'OS (Linux, BSD, UNIX,
MacOS X, Solaris et Windows si j'en crois Wikipedia).
Et C# est une norme ISO.

Cela dit, quand Microsoft décidera que C# c'est du passé (J'ai bien
dit "quand", pas "si"), je ne suis pas sûr qu'il restera beaucoup
d'opportunités d'emploi pour les programmeurs C#. Alors que Java sera
probablement encore utilisé dans 30 ans, tout comme COBOL l'est
aujourd'hui.
Avatar
Fabien LE LEZ
J'avais écrit :
À part peut-être la surcharge de l'opérateur (), c'est-à-dire
la notion de foncteur.





En fait j'ai dit une connerie. Il n'y a pas là de surcharge
d'opérateur, juste de la définition d'un opérateur ().



Wykaaa :

Oui mais c'est pas le plus facile car il est d'arité variable...



En pratique, pas de grosse difficulté : un foncteur dont
l'opérateur () prend N arguments est équivalent à une fonction qui
prend N arguments.