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

1 2 3 4 5
Avatar
Wykaaa
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




J'ai ouvert un fil de discussion dans fr.comp.lang sur la pédagogie de
l'enseignement de la programmation, justement suite à la discussion que
tu mentionnes. Je pense que c'est justement la place adéquate pour
débattre de tes interrogations.
Avatar
Wykaaa
Wykaaa 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



J'ai ouvert un fil de discussion dans fr.comp.lang sur la pédagogie de
l'enseignement de la programmation, justement suite à la discussion que
tu mentionnes. Je pense que c'est justement la place adéquate pour
débattre de tes interrogations.



Je voulais dire dans fr.comp.lang.general
Avatar
Marc Boyer
On 2009-02-06, Gilles wrote:
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"...)



Un enseignement se voit dans un cursus global.
Le C++ est AMHA plus riche que Java: certains verront cette richesse
comme une complexité inutile, d'autre comme un boite à outil plus
vaste permettant de mieux traiter certains problèmes.

D'un point de vue enseignement, cette richesse est un défi (par où
commencer, où s'arrêter ?) mais aussi l'assurance de pouvoir illustrer
toutes les notions.

Par exemple, la gestion de mémoire/gestion de ressource, le RAII,
sont difficile à illustrer en Java.
C++ offre toujours deux sémantiques: par valeur et par reference.
Java n'offre ce choix que sur les types de base.
C++ permet de faire des héritages multiples et complexes.
Par contre Java permet de faire de la réfexivité, ce que ne
permet pas C++.

Mais Java sera aussi un bon support pour tout ce qui est
programmation WEB.

- est-il raisonnable de lâcher sur le marché du travail des informaticiens
"Bac+2" qui n'aient jamais programmé en C++ ?



Ils n'auraient que HTML/Java sur leur CV qu'ils trouveraient quand même
du boulot, mais c'est un autre débat.

J'aurais tendance à dire que "ça dépend du reste". S'ils connaissent
C, Java, un peu de compil, et un langage un type python/ruby, on peut
espérer que le passage à C++ se fasse sans trop de douleur.
Mais ça, c'est une vision de technicien: un RH qui filtre par mot
clé ne vivra pas cette subtilité je pense.

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.



De toute façon, on en peut pas éviter Java. La question c'est donc
de voir comment certains principes sont présentés dans la scolarité.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
pjb
Marc Boyer writes:
Un enseignement se voit dans un cursus global.
Le C++ est AMHA plus riche que Java: certains verront cette richesse
comme une complexité inutile, d'autre comme un boite à outil plus
vaste permettant de mieux traiter certains problèmes.



Tout dépend du sens qu'on donne à "plus riche". Je considère que
c'est un langage à moitié fini. Ce qui doit se comprendre d'une
manière péjorative en dehors de C++, mais qui peut se comprendre d'une
manière positive dans le cadre de C++. En clair, avant de commencer
le développement d'une application ou un système en C++, il faut
"finir" le langage, en spécifiant les caractéristiques qui seront
utilisées, celles qui ne le seront pas, les bibliothèques de bases
utilisées, les motifs de bases, etc.

D'un point de vue enseignement, cette richesse est un défi (par où
commencer, où s'arrêter ?) mais aussi l'assurance de pouvoir illustrer
toutes les notions.

Par exemple, la gestion de mémoire/gestion de ressource, le RAII,
sont difficile à illustrer en Java.
C++ offre toujours deux sémantiques: par valeur et par reference.
Java n'offre ce choix que sur les types de base.
C++ permet de faire des héritages multiples et complexes.
Par contre Java permet de faire de la réfexivité, ce que ne
permet pas C++.

Mais Java sera aussi un bon support pour tout ce qui est
programmation WEB.



Je ne crois pas que ce soit une bonne idée d'enseigner du C++ à des
débutants. Avant d'attaquer C++, il faudrait avoir été formé à
différents langages, du C au Lisp, et différentes techniques de
programmations, du procédural au fonctionnel en passant par l'OO.
Alors on peut attaquer le C++, en montrant comment, ayant choisi un
style de travail, on peut implémenter en C++ les mécanismes de base
permettant de travailler de façon à peu près saine.

--
__Pascal Bourguignon__
Avatar
James Kanze
On Feb 6, 6:22 am, "Gilles" wrote:

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++ ?



Beaucoup dépend des visées du cours. Avec un Bac+2, les élèves
ne seront jamais des informaticiens généralistes, capables
d'intervenir dans tout domaine. (Je ne sais même pas si c'est
possible en général, quelque soit le niveau.) Avec un Bac+2, il
n'y aura pas le temps d'aborder beaucoup de théorie ; il
faudrait donc s'orienter sur le métier qu'ils pratiqueront une
fois sortie de l'école. S'ils vont développer les sites Web,
c'est Java (et HTML, et PHP, et peut-être Python et Perl) qu'il
faut aborder ; le C++ n'y a vraiment pas de rôle signifiant.
Si c'est pour les petits logiciels qui tournent sur PC (et
uniquement sur PC), on pourrait aussi considérer le Java ou
encore plus le C#. Si c'est pour prèsque n'importe quoi d'autre
(des serveurs autres que les sites Web, des applications
temps-réel, du calcul numérique...), le C++ leur serait plus
utiles à la longue.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
Marc Boyer
On 2009-02-06, Pascal J. Bourguignon wrote:
Marc Boyer writes:
Un enseignement se voit dans un cursus global.
Le C++ est AMHA plus riche que Java: certains verront cette richesse
comme une complexité inutile, d'autre comme un boite à outil plus
vaste permettant de mieux traiter certains problèmes.



Tout dépend du sens qu'on donne à "plus riche". Je considère que
c'est un langage à moitié fini. Ce qui doit se comprendre d'une
manière péjorative en dehors de C++, mais qui peut se comprendre d'une
manière positive dans le cadre de C++. En clair, avant de commencer
le développement d'une application ou un système en C++, il faut
"finir" le langage, en spécifiant les caractéristiques qui seront
utilisées, celles qui ne le seront pas, les bibliothèques de bases
utilisées, les motifs de bases, etc.



D'un point de vue industriel, je te comprends.
D'un point de vue enseignement, non, le coeur du langage (je mets
de côtes la vaste API) est plus riche en méchanisme. Je pense avoir
argumenté.

Je ne crois pas que ce soit une bonne idée d'enseigner du C++ à des
débutants. Avant d'attaquer C++, il faudrait avoir été formé à
différents langages, du C au Lisp, et différentes techniques de
programmations, du procédural au fonctionnel en passant par l'OO.



Tout ça en 18 mois (car il y a le stage...) ?
J'avoue que je ne pensais pas qu'on puisse démarrer avec C++, jusqu'à
lire "Accelerated C++". Et dans ce cadre, il se substitue élégamment
à C ou Pascal ou Ada.

Alors on peut attaquer le C++, en montrant comment, ayant choisi un
style de travail, on peut implémenter en C++ les mécanismes de base
permettant de travailler de façon à peu près saine.



Tout ça en 18 mois ? Je pense que ce serait très bien,
en rajoutant une année de formation.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
pjb
Marc Boyer writes:

On 2009-02-06, Pascal J. Bourguignon wrote:
Marc Boyer writes:
Un enseignement se voit dans un cursus global.
Le C++ est AMHA plus riche que Java: certains verront cette richesse
comme une complexité inutile, d'autre comme un boite à outil plus
vaste permettant de mieux traiter certains problèmes.



Tout dépend du sens qu'on donne à "plus riche". Je considère que
c'est un langage à moitié fini. Ce qui doit se comprendre d'une
manière péjorative en dehors de C++, mais qui peut se comprendre d'une
manière positive dans le cadre de C++. En clair, avant de commencer
le développement d'une application ou un système en C++, il faut
"finir" le langage, en spécifiant les caractéristiques qui seront
utilisées, celles qui ne le seront pas, les bibliothèques de bases
utilisées, les motifs de bases, etc.



D'un point de vue industriel, je te comprends.
D'un point de vue enseignement, non, le coeur du langage (je mets
de côtes la vaste API) est plus riche en méchanisme. Je pense avoir
argumenté.

Je ne crois pas que ce soit une bonne idée d'enseigner du C++ à des
débutants. Avant d'attaquer C++, il faudrait avoir été formé à
différents langages, du C au Lisp, et différentes techniques de
programmations, du procédural au fonctionnel en passant par l'OO.



Tout ça en 18 mois (car il y a le stage...) ?
J'avoue que je ne pensais pas qu'on puisse démarrer avec C++, jusqu'à
lire "Accelerated C++". Et dans ce cadre, il se substitue élégamment
à C ou Pascal ou Ada.

Alors on peut attaquer le C++, en montrant comment, ayant choisi un
style de travail, on peut implémenter en C++ les mécanismes de base
permettant de travailler de façon à peu près saine.



Tout ça en 18 mois ? Je pense que ce serait très bien,
en rajoutant une année de formation.



Non, pas en 18 mois.
Il faut dix ans pour maitriser un quelconque sujet.

Donc il faut revoir le système de formation, manifestement on ne va
pas laisser les étudiants 10 ans en école; les entreprises ne peuvent
pas s'attendre à avoir des jeunes "diplômés" 100% compétents.

Enfin, en repassant sur les passionnés, ceux qui ont commencé en
autodidactes à 13 ans ont déjà 5 ans de "formation" avant d'attaquer
les études informatiques formelles, et après cinq ans d'études, ils
peuvent avoir accumulé les dix ans qui leur permettent de maitriser
un sujet. Mais pas ceux qui n'on touché un ordinateur autre qu'un
playstation qu'après 18 ans...

Alors peut être que les premiers ont fait en temps illusion pour les
seconds au niveau des entreprises ?

--
__Pascal Bourguignon__
Avatar
Marc Boyer
On 2009-02-06, Pascal J. Bourguignon wrote:
Marc Boyer writes:

Tout ça en 18 mois ? Je pense que ce serait très bien,
en rajoutant une année de formation.



Non, pas en 18 mois.
Il faut dix ans pour maitriser un quelconque sujet.



Oui, enfin là, l'OP demandait des conseils pour un cursus en IUT.

Donc il faut revoir le système de formation, manifestement on ne va
pas laisser les étudiants 10 ans en école; les entreprises ne peuvent
pas s'attendre à avoir des jeunes "diplômés" 100% compétents.



D'ailleurs, en général, elles le savent très bien.

Enfin, en repassant sur les passionnés, ceux qui ont commencé en
autodidactes à 13 ans ont déjà 5 ans de "formation" avant d'attaquer
les études informatiques formelles, et après cinq ans d'études, ils
peuvent avoir accumulé les dix ans qui leur permettent de maitriser
un sujet.



Sauf que les autodidactes qui accumulent 5 ans de mauvaises
habitudes avant de commencer une formation, ils sont un peu
tétus...

Alors peut être que les premiers ont fait en temps illusion pour les
seconds au niveau des entreprises ?



Je pense que c'est plus compliqué.

Très clairement, il y a une génération qui a évolué avec l'info,
qui a pu commencer à bosser en ASM, voire arriver les C/Pascal/Fortran
etc et réaliser tout ce que ça apportait, en même temps que les
projets grossissaient, puis voire la POO arriver, et avoir
le temps de l'assimiler, et se mettre aux Weberies sans
disfficulté majeure.

Les jeunes actuels ont 18-36 mois pour tout avaler.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
Wykaaa
James Kanze a écrit :
On Feb 6, 6:22 am, "Gilles" wrote:

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++ ?



Beaucoup dépend des visées du cours. Avec un Bac+2, les élèves
ne seront jamais des informaticiens généralistes, capables
d'intervenir dans tout domaine. (Je ne sais même pas si c'est
possible en général, quelque soit le niveau.) Avec un Bac+2, il
n'y aura pas le temps d'aborder beaucoup de théorie ; il
faudrait donc s'orienter sur le métier qu'ils pratiqueront une
fois sortie de l'école. S'ils vont développer les sites Web,
c'est Java (et HTML, et PHP, et peut-être Python et Perl) qu'il
faut aborder ; le C++ n'y a vraiment pas de rôle signifiant.
Si c'est pour les petits logiciels qui tournent sur PC (et
uniquement sur PC), on pourrait aussi considérer le Java ou
encore plus le C#. Si c'est pour prèsque n'importe quoi d'autre
(des serveurs autres que les sites Web, des applications
temps-réel, du calcul numérique...), le C++ leur serait plus
utiles à la longue.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Je suis globalement d'accord avec toi sauf que je parlerais plutôt de
Ruby que Python ou Perl. Il faut parler de JavaScript dans le cadre du
Web à cause d'AJAX. JavaScript est un langage très mésestimé, à mon avis.

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).

Les derniers projets que j'ai audités étaient dans le domaine militaire
(les systèmes de commandement des 3 armes). Je n'ai vu quasiment que du
C++ et du Java (des millions de lignes de code).

J'invite tous les participants à cette discussion sur le forum
fr.comp.lang.general pour parler de la pédagogie de la programmation.
Avatar
espie
In article <498bc8f4$0$18388$,
Gilles wrote:
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).



De mon point de vue, C++ est infiniment superieur a Java cote apprentissage
de la programmation correcte.

En Java, on peut programmer comme un goret et obtenir du code qui "tourne"
(avec plein de bugs mineurs et d'aberrations de comportement, mais globalement
qui fonctionne). En C++, la premiere incomprehension sur les pointeurs, et,
paf, on dit au revoir.

On peut faire du Shadok en Java (reessayer sans comprendre jusqu'a obtenir
quelque chose), c'est beaucoup plus dur en C++.

Par contre, s'il s'agit d'explorer des techniques de programmation
industrielles modernes, java est plus interessant, car il existe suffisamment
de bibliotheques a peu pres finies pour pouvoir faire des bases de donnees,
de la programmation web, du xml... (a ce stade, je prefererais le perl, mais
c'est moi).

Java explose egalement C++ a plates coutures cote opportunites d'embauche
pour certains types de profil... par exemple, pour du Bac+2 a vocation
professionnelle.

Les contraintes temporelles et materielles etant ce qu'elles sont, je
crains que dans ton cas, le passage a Java soit inevitable, et constitue
une bonne chose pour l'avenir professionnel de tes etudiants... et soit une
catastrophe vis-a-vis de la qualite du code produit a terme, mais on ne
peut pas tout avoir.
1 2 3 4 5