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
espie
In article <498c1594$0$9392$,
Wykaaa wrote:
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.



Bof, bof, bof. ruby possede aujourd'hui de graves problemes de performance.
Ils seront peut-etre regles dans un avenir proche, mais ca n'est pas encore
le cas.
Cote javascript, il vaut mieux eviter d'en parler directement. Expliquer une
ou deux bonnes bibliotheques comme jquery ou prototype me semble plus
pertinent.
Avatar
Wykaaa
Marc Boyer a écrit :
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.



Disons que le programmeur a plus de maîtrise sur certains aspects comme
la gestion mémoire.

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.



Tout à fait d'accord.

C++ offre toujours deux sémantiques: par valeur et par reference.
Java n'offre ce choix que sur les types de base.



Il est nécessaire, dans l'enseignement de la programmation de parler des
différentes façon de passer des paramètres (quid du passage par nom,
comme en Algol 60 ?).

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



Il faut se modérer sur l'héritage multiple (surtout en C++) qui pose
généralement plus de problèmes qu'il n'en résoud.

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



Pas seulement. J'ai vu beaucoup d'applications en Java qui n'étaient pas
dans un contexte Web (en particulier chez les militaires).

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



Il y a 10 ans, il était inévitable, pour un développeur, de connaître C
et/ou C++. Aujourd'hui j'en suis moins certain. Il me paraît, en tout
état de cause, qu'aujourd'hui il faut connaître C++ ou Java au moins.
Connaître seulement des langages comme PHP, Perl ou Python ne suffit pas
(ou alors dans certains endroits bien particuliers).

Ce qui est sûr, c'est qu'un développeur, aujourd'hui, ne peut pas ne pas
connaître l'objet.

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



Si on ne connaît pas Java aujourd'hui, il faut connaître C++, il me semble.
Avatar
Marc Boyer
On 2009-02-06, Wykaaa wrote:
C++ offre toujours deux sémantiques: par valeur et par reference.
Java n'offre ce choix que sur les types de base.



Il est nécessaire, dans l'enseignement de la programmation de parler des
différentes façon de passer des paramètres (quid du passage par nom,
comme en Algol 60 ?).



Le passage par nom a, je pense, disparu des formations sans que
personne ne s'en émeuve. D'ailleurs, moi même, je ne sais pas
bien ce que c'est.

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



Il faut se modérer sur l'héritage multiple (surtout en C++) qui pose
généralement plus de problèmes qu'il n'en résoud.



Voui, mais pour l'enseigner, c'est mieux avec un langage qui
me permet.

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



Pas seulement. J'ai vu beaucoup d'applications en Java qui n'étaient pas
dans un contexte Web (en particulier chez les militaires).



Je voulais dire qu'il sera plus facile d'enseigner la prog WEB avec
Java qu'avec C++.

Il y a 10 ans, il était inévitable, pour un développeur, de connaître C
et/ou C++. Aujourd'hui j'en suis moins certain. Il me paraît, en tout
état de cause, qu'aujourd'hui il faut connaître C++ ou Java au moins.



Je partage cet avis.

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

On 2009-02-06, Wykaaa wrote:
>> C++ offre toujours deux sémantiques: par valeur et par reference.
>> Java n'offre ce choix que sur les types de base.
>
> Il est nécessaire, dans l'enseignement de la programmation de parler des
> différentes façon de passer des paramètres (quid du passage par nom,
> comme en Algol 60 ?).

Le passage par nom a, je pense, disparu des formations sans que
personne ne s'en émeuve. D'ailleurs, moi même, je ne sais pas
bien ce que c'est.



Un passage d'une fonction mais sans en dire le nom. Les lambda avec
capture par references sont une maniere plus verbeuses d'avoir le meme
effet. Avec moins de surprises.

Dans les macroprocesseurs, on a aussi (plus ou moins) le meme comportement
suivant comme on specifie la capture des noms.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Michael DOUBEZ
Marc Boyer wrote:
On 2009-02-06, Wykaaa wrote:
C++ offre toujours deux sémantiques: par valeur et par reference.
Java n'offre ce choix que sur les types de base.


Il est nécessaire, dans l'enseignement de la programmation de parler des
différentes façon de passer des paramètres (quid du passage par nom,
comme en Algol 60 ?).



Le passage par nom a, je pense, disparu des formations sans que
personne ne s'en émeuve. D'ailleurs, moi même, je ne sais pas
bien ce que c'est.



C'est un mixte entre la substitution de nom et les lambdas:
http://www.cs.sfu.ca/~cameron/Teaching/383/PassByName.html

[snip]

--
Michael
Avatar
Wykaaa
Marc Espie a écrit :
In article <498c1594$0$9392$,
Wykaaa wrote:
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.



Bof, bof, bof. ruby possede aujourd'hui de graves problemes de performance.
Ils seront peut-etre regles dans un avenir proche, mais ca n'est pas encore
le cas.



Et alors, l'enseignement ne doit-il pas (un peu) anticiper ?

Cote javascript, il vaut mieux eviter d'en parler directement. Expliquer une
ou deux bonnes bibliotheques comme jquery ou prototype me semble plus
pertinent.



Après tout JavaScript n'est pas un mauvais langage. Je ne comprends pas
bien tes réticences.
Avatar
Wykaaa
Marc Espie a écrit :
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.



Ce n'est pas sûr pour un débutant. Il a plus de fonctionnalités (ou
moins de fonctionnalités cachées que Java, ok) mais la gestion mémoire,
par exemple, me semble venir dans un deuxième temps du point de vue de
la pédagogie de l'apprentissage.

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



On peut faire, à mon avis, encore plus de "shadokeries" en C++, il me
semble avec, par exemple, la surcharge des opérateurs et l'héritage
multiple, pour ne citer que 2 exemples.

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



De mon point de vue, je préfère infiniment plus Java à Perl (qui me
semble ne plus trop avoir le vent en poupe).
Voir : http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

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.



Ca dépend quand même des domaines d'application.

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.



Je ne suis pas d'accord que ce serait une catastrophe concernant la
qualité du code produit. Tout dépend comment Java est enseigné.
J'encourage toutes les personnes participant à ce fil à rejoindre le fil
(pédégogie de la programmation) que j'ai ouvert dans le forum
fr.comp.lang.general.
Avatar
espie
In article <498c2b54$0$4091$,
Wykaaa wrote:
Marc Espie a écrit :
Bof, bof, bof. ruby possede aujourd'hui de graves problemes de performance.
Ils seront peut-etre regles dans un avenir proche, mais ca n'est pas encore
le cas.



Et alors, l'enseignement ne doit-il pas (un peu) anticiper ?



Mais ruby n'offre aucun avantage fondamental par rapport a ses ancetres.

Cote javascript, il vaut mieux eviter d'en parler directement. Expliquer une
ou deux bonnes bibliotheques comme jquery ou prototype me semble plus
pertinent.





Après tout JavaScript n'est pas un mauvais langage. Je ne comprends pas
bien tes réticences.



Graves soucis de portabilite d'un navigateur a l'autre...
Avatar
Fabien LE LEZ
On Fri, 06 Feb 2009 10:17:35 +0100, (Pascal J.
Bourguignon):

Avant d'attaquer C++, il faudrait avoir été formé à
différents langages, du C au Lisp,



Non. Le C est le pire moyen d'arriver au C++.

On peut parfaitement commencer la programmation par le C++, pour peu
que le cours soit un tant soit peu organisé. Évidemment, si on se met
à parler de pointeurs et d'allocation dynamique dès le premier
chapitre, les élèves vont décrocher.
Avatar
Fabien LE LEZ
On Fri, 6 Feb 2009 08:45:15 +0000 (UTC), Marc Boyer
:

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



Ah ben pourquoi ?

Java est certes utilisé dans quelques intranets, principalement parce
que ce langage semble adapté à de très grosses équipes.

La programmation web "généraliste", c'est plutôt PHP/Python/Ruby côté
serveur, et HTML/Javascript (voire Flash/Flex) côté client.
1 2 3 4 5