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
pjb
Fabien LE LEZ writes:

On Fri, 06 Feb 2009 13:21:40 +0100, Wykaaa :

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 ?



Oué mé bon... l'avenir est-il dans l'amélioration de Ruby, ou dans sa
disparition du devant de la scène ?



Bonne question. Mais comme l'amélioration de Ruby signifie la
restauration de ses origines Lisp, autant le faire disparaitre et
utiliser directement Lisp.

--
__Pascal Bourguignon__
Avatar
Wykaaa
Pascal J. Bourguignon a écrit :
Fabien LE LEZ writes:

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



Oui. Je n'ai pas dit d'aller du C au C++. J'ai dit d'avoir une large
connaissance des langages (et même de la conception des langages),
avant d'attaquer le C++, car pour l'utiliser, il faudra le finir.




Veux-tu dire qu'il est nécessaire d'introduire la programmation par la
connaissance des concepts fondamentaux des langages : variables,
constantes, valeurs litérales, classes d'allocation mémoire, traitement
des exceptions, modularité, sous-programmes (je prends ce terme à
dessein, plus général que fonction, procédure ou méthode), récursion et
qu'ensuite on enseigne leur mise en oeuvre dans tel ou tel langage ?
Avatar
Wykaaa
Marc Boyer a écrit :
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++.



C'est sûr. C'est aussi plus facile de démontrer la portabilité à l'aide
de Java que C++.

J'ai des applets assez costauds qui tournent sous Windows (XP), Mac OS
(classique ou X) et Unix/linux sans avoir changé une seule ligne de code.

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.



:-)
Avatar
Wykaaa
Jean-Marc Bourguet a écrit :
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.



Il est clair que si on a des notions de lambda-calcul ou de Lisp ou de
Caml, on est à l'aise avec n'importe quel macroprocesseur.
Avatar
Wykaaa
Fabien LE LEZ a écrit :
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.



Je suis d'accord qu'il faut corriger l'image de Java comme étant un
langage pour le Web. Aujourd'hui le code Java que je vois est surtout
pour des grosses applications industrielles ou militaires ou côté
serveur pour le Web.
La notion d'applet est devenue presque marginale.
Avatar
Wykaaa
Marc Boyer a écrit :
On 2009-02-06, Fabien LE LEZ wrote:
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 ?



On parlait C++ vs Java.
C'est plus facile de faire un TP de développement Web dans
l'environnement J2EE, JSP, Tomcat, qu'avec du C++.



Ca c'est tout à fait certain.

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.



Voui, mais c'est encore d'autres langages.
Et des étudiants (contexte de la discution), ça leur
demande un effort de changer de langage. Les principes
de la prog WEB, tu peux les illustrer avec Java facilement
(et le passage PHP/Python devrait se faire pas trop mal).
En C++, c'est bien sur théoriquement possible (j'ai vu
les docs pour le faire en C), mais bon...



Entièrement d'accord. Le temps n'est pas extensible dans les cursus
d'informatique.

On arrive à une question intéressante : quel est le langage ou les 2 ou
3 langages( c'est déjà beaucoup) qui vont faciliter l'apprentissage des
autres en autonome, tout en tenant compte, malgré tout, du marché ?
Avatar
Wykaaa
Marc Boyer a écrit :
On 2009-02-06, Fabien LE LEZ wrote:
On Fri, 6 Feb 2009 15:04:42 +0000 (UTC), Marc Boyer
:

Voui, mais c'est encore d'autres langages.


Justement. Je crois que la caractéristique principale de la
programmation web, c'est qu'on jongle avec plusieurs langages.



Oui, et une caractéristique importante des IUT, c'est que
tu as 18 mois pour caser toute ta formation. Et quand on
te donne royalement 10h de TP pour faire toutes tes manips
WEB, ben, tu t'amuses pas à en plus leur donner un
nouveau langage pour illustrer tes trucs.



Donc dans un contexte "IUT", il faut prendre Java comme premier langage ?
Ca permet d'apprendre la programmation de façon assez correcte, de
montrer du développement dans un contexte Web et de faire des
applications (à mon avis aussi fiables qu'avec du C++).
Est-ce ton avis ?
Avatar
Wykaaa
Marc Espie a écrit :
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...



Non, c'est une question de programmation en JavaScript et justement, ça
permet de montrer concrètement ce que signifie "programmer proprement".

Voir :
http://www.journaldunet.com/developpeur/tutoriel/dht/061211-javascript-ecmascript-implementations.shtml

Si maintenant Microsoft et IE (avec JScript) ont la nostalgie des Active
X, c'est leur problème...
Avatar
espie
In article <498c6726$0$4070$,
Wykaaa wrote:
Fabien LE LEZ a écrit :
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.



Je suis d'accord qu'il faut corriger l'image de Java comme étant un
langage pour le Web. Aujourd'hui le code Java que je vois est surtout
pour des grosses applications industrielles ou militaires ou côté
serveur pour le Web.
La notion d'applet est devenue presque marginale.



Euh...

d'une part, le web, c'est surtout les serveurs aujourd'hui (enfin, c'est la
ou est une grosse partie du boulot interessant et paye), voire les
webservices (l'usine a gaz qui fait plaisir au manager qui a l'illusion de
voir enfin les composants pluggables qu'on lui promet depuis 15 ans et qui
lui simplifieraient sa vie de manager qui voit l'informatique comme une pile
de legos qui puent).

Ensuite, il traine a droite a gauche "la suite", a savoir des compilateurs
d'interface graphiques -> javascript, histoire de finalement unifier le
modele d'evenements et de faire du ajax propre. Il y en a depuis C++, il y
en a dans des langages fonctionnels (je prend les devants avant que JP
Bourguignon nous la ramene avec son couplet habituel sur lisp), et il y en
a evidemment depuis Java, chez google entre autres.

Donc oui, les applets tournant en byte-code java, c'est abandonne. Mais
pas forcement les applications web entierement programmees en java.
Avatar
espie
In article <498c6a57$0$18372$,
Wykaaa wrote:
Voir :
http://www.journaldunet.com/developpeur/tutoriel/dht/061211-javascript-ecmascript-implementations.shtml

Si maintenant Microsoft et IE (avec JScript) ont la nostalgie des Active
X, c'est leur problème...



Tu es serieux ? Tu realises que dans la plupart des contextes reels, il est
totalement impossible d'ignorer IE ?