Bonjour,
J'ai crée un cours de C/C++ avec beaucoup d'exemples, des exercices, des QCMS... destiné aux débutants et sans pub !.
http://nte-serveur.univ-lyon1.fr/merrheim
Quen pensez-vous ?
merci
Version imprimable
Bonjour,
J'ai crée un cours de C/C++ avec beaucoup d'exemples, des exercices, des QCMS... destiné aux débutants et sans pub !.
http://nte-serveur.univ-lyon1.fr/merrheim
Quen pensez-vous ?
merci
Bonjour
J'ai pris au hasard dans le premier cours (bases du C++) les chapitres 3 et 5, sur les tableaux et les chaines de caractères :
On remarque que c'est du C, pas du C++ où il est conseillé d'utiliser std::vector et std::string !Code:
1
2
3
4 int * pInt = new int[10]; char tt[20]; ...
Cela dit, le style est clair, la présentation sobre. J'aime bien ! :) :bravo:
Les execices et QCMs sont très pratiques.
Seul bémol à mon avis : ne pas encourager dès le départ sur l'utilisation de la stl.
:koi: :marteau: :furieux: :scarymov:Citation:
Envoyé par mabu
:bravo: pour la présentation, le pas de pub et en plus c'est français: je n'est pas eu le temps de lire mais c'est un (trés) bon début!Citation:
Envoyé par merrheim
C/C++, ça n'existe pas ! C et C++ sont des langages différents.Citation:
Envoyé par merrheim
Visiblement, il s'agit d'un cours de C++. Le bon forum est "C++".
merci pour vos remarques.
juste quelque points :
1) je pense qu'il est difficile de commencer par apprendre le C++ sans commencer par apprendre le C (c'est un sujet de polémique récurrent mais c'est le choix que j'ai fait. J'ai aussi 1500 heures de cours d'expérience avec des débutants en C/C++)
la logique du cours est
on étudie les types de base
on étudie les structures
on regroupe des structures et des fonctions dans des modules
on passe ensuite naturellement des structures aux classes
Dans le module qui suit "notions avancées en C++" : on introduira les classes, les string,la STL, la virtualité...etc... Il est en cours de rédaction
2) les chaînes de caractères sont étudiées à la C car je pense qu'il est bon pour des débutants de "mettre les mains dans le camboui" pour voir comment ça marche. Ensuite, on parle de string et on dit : "toutes les difficultés des chaînes de caractères sont masquées à l'utilisateur dans les string d'où l'intérêt de l'encapsulation"
3) Mêmes arguemnts pour la STL : si on parle de vector et de template dès le chapitre 3, les étudiants vont perdre pied car après si peu d'heures de cours j'estime qu'il faut y aller doucement. Imaginez bien qu'un bachelier lambda sur 2 sait à peine écrire un for lorsque je commence le chapitre 3 !
4) Ce cours est un cours de C/C++ car je pense qu'il faut étudier les 2 langages : d'abord le C ensuite le C++ en disant que l'approche orientée objet est préférable que l'approche procédurale. Le principal argument est que pour faire un appel système sous unix ou sous windows il faut connaître le C.
merci
Je suis éventuellement d'accord, mais il ne faut absolument pas mélanger les deux langages, et bannir l'expression 'C/C++' qui est extrêmement confusante.Citation:
Envoyé par merrheim
Déjà des différences de syntaxe entre C et C++...Citation:
la logique du cours est
on étudie les types de base
on étudie les structures
Encore une fois, le C/C++, ça n'existe pas. A mon avis cette approche 'combinée' n'est pas bonne (en tout cas, ce n'est pas celle qui est recommandée par les professionels, lire les discussions sur clc et clc++).Citation:
on regroupe des structures et des fonctions dans des modules
on passe ensuite naturellement des structures aux classes
Dans le module qui suit "notions avancées en C++" : on introduira les classes, les string,la STL, la virtualité...etc... Il est en cours de rédaction
2) les chaînes de caractères sont étudiées à la C car je pense qu'il est bon pour des débutants de "mettre les mains dans le camboui" pour voir comment ça marche. Ensuite, on parle de string et on dit : "toutes les difficultés des chaînes de caractères sont masquées à l'utilisateur dans les string d'où l'intérêt de l'encapsulation"
3) Mêmes arguemnts pour la STL : si on parle de vector et de template dès le chapitre 3, les étudiants vont perdre pied car après si peu d'heures de cours j'estime qu'il faut y aller doucement. Imaginez bien qu'un bachelier lambda sur 2 sait à peine écrire un for lorsque je commence le chapitre 3 !
4) Ce cours est un cours de C/C++ car je pense qu'il faut étudier les 2 langages : d'abord le C ensuite le C++ en disant que l'approche orientée objet est préférable que l'approche procédurale. Le principal argument est que pour faire un appel système sous unix ou sous windows il faut connaître le C.
L'intérêt du C++ est justement d'apporter une couche d'abstraction qui rend caduc et inutile les détails scabreux du langage C.
D'autres part, il y a de véritables différences de syntaxe et de sémantique qui rend la combinaison des deux langages dangereuse. Le C++ n'est en aucun cas une surcouche du C.
Parler de malloc() en C++ est une absurdité lorsqu'il existe new. Ne pas s'étonner si les élèves font un malloc() suivit d'un delete...
C'est du C++ donc je déplace.
http://nte-serveur.univ-lyon1.fr/merrheim/BASESCPP/outils/VC6/image7.html
http://c.developpez.com/faq/cpp/?pag...le#SL_iostream
c'est bizarre cette attitude dogmatique !
1) Parler de malloc est indispensable à la compréhension des concepts du langage ! Dire que c'est une "absurdité" est une attitude incorrecte ! En effet je pense qu'il est fondamental qu'un étudiant sache que lorsqu'on fait un new, il y a en premier lieu une interaction avec le système d'exploitation (avec un appel de fonctions type malloc ) et en second lieu beaucoup d'autres choses me semble capital.
En fait j'estime qu'on ne peut pas parler des concepts de haut niveau des langages de programmation sans faire comprendre aux étudiants "comment ça marche". Répondre à la simple question "comment on utilise" serait une grave erreur.
2) Dire qu'il y a une manière de faire "recommandée par les professionnels" est réducteur : j'ai encadré beaucoup de stages (où il y avait des professionnels) où la connaissance des 2 langages étaient nécessaire ! On peut toujours dure que ces professionnels étaient nuls mais il ne faut pas juger si vite !
Dire que les apports du C++ "rend caduc et inutile les détails scabreux du langage C. " C'est "oublier" que le C existe encore, est utilisé par les professionnels et que nos étudiants ont intérêt à connaître ces 2 langages.
On mettra bien sûr l'accent sur les comcepts compliqués du C++ mais sans oublier l'aspect procédural.
Au fait linux et windows sont écrits en C avec des surcouches C++ ! Cela doit être écrit par de mauvais programmeur !
3) les remarques comme "Ne pas s'étonner si les élèves font un malloc() suivit d'un delete..." sont complètement déplacées ! Personnellement aucun de mes étudiants n'a jamais confondu ! Je dis juste dans mon cours que le malloc existe et qu'il est préférable d'utiliser un new !
Dans ce cas, il faut aussi expliquer le fonctionnement de malloc puis du gestionnaire de mémoire puis des OS et enfin du hardware :scarymov:Citation:
Envoyé par merrheim
Sans rire, expliquer que new réserve de l'espace mémoire, oui mais je ne pense pas qu'un parallèle avec malloc soit indispensable pour comprendre et comme le fait remarquer Emmanuel cela peut entrainer une confusion dans leurs l'utilisations.
"il faut aussi expliquer le fonctionnement de malloc puis du gestionnaire de mémoire puis des OS" Je suis parfaitement d'accord c'est pourquoi un bon cours de systeme d'exploitation et un autre d'architecture des ordinateurs est important dans une formation informatique.
Toujours le même soucis : expliquez (en simplifiant) comment ça marche et expliquez en insistant sur "comment on utilise".
salut,
je ne vois pas le besoin d'expliquer à balle les concepts d'allocation pour apprendre le C++ (ou alors faut faire un cours d'assembleur/C/C++, sans s'étonner que l'étudiant fasse du JMP ou du MOV dans son prog C++). ou en tout cas si on le fait (ok, c'est bien de comprendre les mécanismes), ce n'est pas pour autant qu'on doit faire l'amalgame entre C et C++.
le 1er est un langage procédural, le 2è un langage orienté objet. ce qui est ennuyeux, c'est que le C++ ait été conçu en englobant le C. résultat dans la tête de beaucoup C++ = C objet, et les 2 langages sont présentés comme père (C) et fils (C++), alors que je les verrais plus comme des cousins par alliance :lol:.
sinon pour résumer je dirais que si on veut apprendre les 2, ou si on veut apprendre le C++ en commençant par un cours ou tutoriel sur apprendre le langage C, il faut 2 cours bien distincts et au début du cours de C++ bien dire que ce n'est pas du C, montrer les différence et les concepts objet, et montrer également tout ce qui est obsolète/déconseillé/à bannir issu du C lorsqu'on fait du C++.
http://arb.developpez.com/smileys/houlala.gif
piou!! je parle trop moi :roll:
:D sinon pour la pensée positive, je trouve le cours pas mal pour débuter (je n'ai pas tout regardé). mais perso j'aime pas trop la mise en page (fonte trop grande) et la navigation.
:twisted: hihi, j'ai trouvé une erreur de syntaxe dans le code (cf. Le type char)
au lieu deCitation:
if(c>='A && c<='Z)
http://arb.developpez.com/smileys/panpanculcul.gifCode:if(c>='A' && c<='Z')
Ne vous inquiétez pas, les étudiants ne confondent pas l'assembleur et le C++ !
Bien sûr il faut bien faire comprendre les différences entre le C et C++ : les contraintes apparentes du C++ doivent apparaître comme un plus par rapport au langage C. On peut faire cela de manière "continue" en montrant point par point les insuffisances du C et en montrant comment le C++ apporte une solution élégante à ces insuffisances et à chaque étape on "interdit" à l'étudiant d'utiliser ce qui devient "obsolète".
On passe alors d'une manière très souple du C au C++ !
Les chaînes de caractères me semble être un exemple intéressant :
Il y a 2 manières d'aborder le problème :
- on utilise des strings et on explique aux étudiants comment on les utilisent. C'est une possibilité mais les étudiants ne perçoivent pas toute la difficulté d'écrire une classe comme string (allocation de la mémoire et autre) : on leur fait croire que c'est simple alors qu'il y a une réelle difficulté qu'ils ne percevront pas.
- Autre approche possible : on utilise des tableaux de char et des char *.
On voit vite la nécessité d'utiliser les fonction de string.h et on s'aperçoit vite qu'un problème apparait avec l'allocation de la mémoire au niveau de la fusion de 2 chaînes par exemple. Finalement on leur montre que le C++ a encapsulé les difficultés dans une classe appelée string et il n'ont plus envie d'utiliser des char *. Au passage ils on vraiment compris l'avantage d'"encapsuler les difficultés". De plus si une bibliothèque quelconque les obligent à manipuler des char *, ils sauront à quoi ils ont affaire et sauront vite les transformer en string !
PS : au fait pour l'assembleur on montre succinctement aux étudiants comment on passe de l'assembleur au C dans un cours d'architecture des ordinateurs. On montre par exemple comment on écrit des fonctions simples en assembleurs et on les convainct rapidement de la nécessité d'abandonner l'assembleur !
C'est parti et dans le désordre.
-> J'ai donné le lien hier et le revoici -> http://www.research.att.com/~bs/bs_f...l#prerequisite. Je t'encourage très vivement à lire ce pdf. Il y en d'autres dans le genre, mais celui-ci est probablement un des plus "détaillés".
Le truc est qu'apprendre aux élèves à écrire du code simple mais faux, alors que l'on peut leur apprendre du code encore plus simple mais juste, est un choix pour le moins discutable.
Les expériences & témoignages de profs qui justement enseignent le C++ comme un langage de haut niveau (et non pas comme un C avec classes) indiquent que les élèves se font très bien au sens logique (et non historique). Sujet récurrent, comme le signalait Emmanuel, sur news:fr.comp.lang.c++, le "troll" vient d'ailleurs de ressortir il y a deux jours.
On n'a jamais eu besoin d'enseigner les pointeurs ou comment sont mis en oeuvre les tableaux variants de l'Ada avant de pouvoir les utiliser. De la même façon, pas besoin de savoir concevoir une classe template pour l'utiliser. Je ne peux que te conseiller de te procurer Accelerated C++ de Koenig et Moe, et le bouquin de Francis Glassborrow, et de les méditer.
Des cours de C avec classes, il y en a des tas. Il y a en revanche un vrai créneau pour les cours de C++ en français.
_______
Ensuite, côté présentation ta page oblige à scroller verticalement. Je fais parti de ces gens qui ont un volet avec les bookmarks qui réduit toujours la fenêtre de navigation. Autant dire que ta contrainte de surfer en 1024x768 est anti-ergonomique. La navigation avec le petit truc en haut n'est pas terrible non plus.
Les images se lissent (oui, avec deux "s") mal. Et si tu veux vraiment garder cette utilisation d'images (on fait de super trucs avec (La)TeX ...), rajoute les boutons de navigation en bas -- mon index a souffert deux fois plus que nécessaire sur la molette.
L'utilisation d'une police monotype (je crois que l'on dit) est ce qui ce fait généralement pour le code, donc les mots clé et autres symbôles d'un programme.
Une justification parfois excessive -> page 51 du chapitre 2.
Pour le mode texte, utilise les balises <pre>.
Ton indentation va donner de mauvaises habitudes.
______
Le premier C with classes de Bjarne Stroustrup date du début des années 80.
Le code n'est absolument pas standard ! <iostream.h> est déprécié depuis ... 98. Voir le point de FAQ signalé par Aurélien.
Il est conseillé en C++ de ne pas déclarer une variable avant d'en avoir besoin. C'est discuté sur GOTW, ou la FAQ C++ lite je crois, je te laisse consulter tout cela.
Les castings à la C ne sont pas conseillés non plus.
Dans le slide du "while", tu parles de "la sémantique du do...while"
ASCII, ce n'est pas 8, mais 7 bits.
Pour la transformation maj-min et ce genre de choses, je préciserai qu'en vrai il existe des méthodes plus justes qui tiennent compte des caractères hors ASCII, et propres à la locale courante (à dire autrement à des débutants)
Ch3, p4 -> :s/opérationss/opérations/
p11 -> :s/CONSTANT/CONSTANTE/
C99 supporte const, non ?
____
chaines
ex2 -> bonjour buffer-overflow et autres injection de code
Les fonctions C de manipulation de char* sont dans <cstring> en C++98.
Manipuler ces fonctions n'a pédagogiquement pas grand intérêt. std::string a une sémantique de valeur, il faut en profiter.
(Si avec VC++6 tu n'arrivais pas à t'en servir (de std::string) avec les flux, c'est parce que std::string est compatible avec les flux standard (sans .h) et non avec les flux classiques (avec .h) que VC7.1 ne connait plus).
conclusion -> "Nous avons étudié comment les chaînes de caractères étaient représentées en C++." Non, en C!
____
Gestion des fichiers C....
Choisi quel langage tu veux enseigner, mais ne les mélange pas. Après les gars, il faut passer dérrière.
______________________
Le C++ n'est pas entièrement compatible avec le C. Pas de VLA en C++ p.ex., pas la même signification pour "void f()", ...
En C++, on parle de "fonction membre". "méthode" est un terme emprunté à d'autres langages/technologie et semble venir du Smalltalk. Certaines personnes comprennent, en C++, "fonction membre virtuelle" quand on parle de "méthode". Autant écarter l'ambiguité en ce tenant au vocabulaire du C++.
Visiblement tout le monde n'a pas la même approche -> en ce qui me concerne, ce n'est pas l'encapsulation, mais l'abstraction qui est importante. L'encapsulation n'est que le moyen pour mettre en oeuvre l'abstraction.
Attention avec accesseurs et mutateurs, suivant comment on les présente, on pourrait croire qu'ils sont nécessaires et à systématiser. Procéder de la sorte (systématisation sans autre réflexion) est signe d'un mauvais design en ce qui me concerne. C'est traité dans la FAQ de developpez.
C'est quoi ça " void operator>>(ostream &out);" ???? :scarymov:
Il y a des choses plus importantes à montrer que cette écriture que tu dois être le seul à utiliser. Qui plus est, il n'est pas besoin de définir amis les opérateurs d'injection (grâce aux accesseurs) et les opérateurs d'extraction grâce aux constructeurs (bon moyen d'ailleurs pour avoir une lecture atomique).
Code:
1
2
3
4
5
6
7
8 // extracteur simplifié, atomique, et avec 0 amitié std::istream & operator>>(std::istream & is, Point p) { int x, y; if (is >> x >> y) p = Point(x, y); // on utiliserait swap avec des types plus conséquents return is; }
(p57) "Point::Point(double x, double y) : x(x),y(y) { }" hum ....
_________
Les posts arrivés pendant que je lisais/tapais/...
C++/CLI va être le langage des API des prochains windows. Ouste le C qui va disparaitre petit à petit.
Si tu veux leur dire comment cela ça passe en mémoire, pourquoi ne pas leur montrer par la même occasion comment on remplace le gestionnaire du free store ? :-/
Merci pour les erreurs de syntaxe, il en reste malheureusement (et c'est toujours trop". C'est pour cela que je fournis tous les exemples du cours en téléchargements et avec les projets visual C++ et dev C++.
Si au début C++ se voulait être un meilleur C, maintenant c'est un langage à part. On a bien 2 langages différents, vraiment différents. Il faut choisir : soit on fait du C, soit du C++, mais pas du C/C++. Vous êtes enseigant d'après ce que j'ai compris, et vous devez bien mieux savoir que nous la manière dont il faut enseigner les choses. Mais ici on voit passer beaucoup de débutants, étudiants ou non, qui mélangent C et C++ ce qui leur vaut différents problèmes. Selon moi, il vaudrait mieux enseigner C++ comme on enseignerait Java. Quand on parle de new en Java on ne parle pas de malloc. Car malloc c'est du C alors que là on parle de Java. Ben pour C++ c'est pareil. Dire que new appelle malloc est de plus infondé, à mon avis. Une implémentation de new pourrait très bien se passer de malloc et appeler une autre primitive de l'OS sous jacent comme HeapAlloc sous Windows.
Enseigner le C/C++ revient à faire programmer en C au moyen de C++, c'est à dire à utiliser C++ comme un C enrichi. Or c'est bien plus que cela, et c'est passer à côté de C++. Personnelement, je pense que les heures d'enseignement de la programmation sont bien trop rares pour les "gaspiller" à faire manipuler les char * en C++ par exemple, au lieu d'étudier et de donner le réflexe std::string et STL.
Avis totalement personnel : les char * devraient être enseignés en dernier, afin que le programmeur découvre leur danger et la raison de les éviter en se cassant les dents dessus après avoir utilisé sans problème std::string un certain temps. Car dans l'autre sens, la désintoxication char * est très dure, surtout quand on est étudiant et que les programmes que l'on a fait n'exèdent pas quelques centaines de lignes, auquel cas on mesure mal les problèmes soulevés par l'utilisations de multiples pointeurs.
Je salue votre initiative de venir sur un forum, acte trop rare selon moi de la part des enseignants en informatique. A ce sujet je me permet de vous suggérer quelques idées de TP que l'ancien étudiant que je suis aurait aimé faire:
- 1° partie: chaque étudiant, tout seul, doit faire un programme pas trop dur, tel que trier une liste de mots contenus dans un fichier. les programmes sont remis au professeur. Si pas fini => expiration du délais, comme en entreprise, ça se paye en heures sup.
- 2° partie : on mélange les programmes, chaque étudiant doit poursuivre le travail d'un autre tiré au hasard. Ajouter une fonctionnalité simple telle que trier par ordre croissant ou décroissant. Avant de mélanger les programmes, faire estimer par chaque étudiant le temps que cela va demander de modifier son programme. Ensuite comparer l'estimation de auteur avec le temps passé par le modifieur...
- Final: donner la solution C++ qui tient en quelques lignes et prend 10 minutes à coder / tester. => faire prendre conscience de ce qu'est C++, de ne pas réinventer la roue / partir sur une usine à gaz, etc...
Remarques globales sur C++ de base.
Avant de parler de la pratique, plongez vous un peu dans la notion OBJET ! Au pire, faites un renvoi vers le cours sur le C pour les types, fonctions, tableaux et autres...
Vous ne parlez pas de passage par reference dans le chapitre sur les fonctions, d'ailleurs rien non plus sur passage par pointeurs.
Globalement je presenterai le cours de la maniere suivante :
1. Objet
2. Types de base & operateurs
3. Switch, for, while, if & co
4. Pointeurs & references
5. Allocation de la memoire (new)
6. Fonctions
7. Tableaux statiques & dynamiques
8. Classes
9. Surcharge
10. Heritage
11. Polymorphisme
12. Interfaces
13. Bibliotheques
Remarques precises sur le Cours C++ base :
Chapitre 1 / Slide 2 : mauvais francais.
Chapitre 1 / Slide 8 : faute : Il faut bien maitriser et non maitrisé
Chapitre 1 / Slide 10 : faute : un certain nombre, sans s
Chapitre 1 / Slide 12 : faute : une fonction appelée
Chapitre 2 / Slide 19 : parler de l'operateur +=, i+=2
Chapitre 2 / Slide 32 : for a une utilisation plus large, notament pour toute boucle necessitant une initialisation, une condition et une expression à executer à chaque iteration. exemple : for(j= 0, b= c->GetFirst(); j< 10; j++, b = c->GetNext();
Chapitre 2 / Slide 56 : non un char est un entier 8 bits qui peut prendre 256 valeurs
Chapitre 4 : Avant de parler de tableaux, parlez des pointeurs et de l'allocation de la mémoire.
Chapitre 5 : Il est fortement deconseillé, en c++, d'utiliser le char* pour la representation des chaines de caracteres. std::string est fortement conseillée.
Chapitre 7 : Ne faites pas peur aux etudiants avec les pointeurs, c'est la base de tout le langage C/C++. Il est essentiel d'instaurer un climat de confiance dans l'utilisation des pointeurs.
Aie ne pas vouloir aller trop vite !
Prendre un public de bachelier et leur parler de STL au troisième cours cela se fait mais "passe mal" avec des étudiants débutants. Il faut bien voir que pour eux, ils ne connaissent que word un mois avant ! Je connais des cours de C++ où en 20 h on a vu tous les concepts du pur C++ normalisé et où effectivement on parle d'héritage et de virtualité au dixième transparents. Il m'est arrivé de passer derrière : on pose un problème élémentaire et les étudiants ne savent rien faire. Vous, vous les voyez jamais ces étudiants car ils se plantent dans leur études. Regardez le taux d'échec dans l'ex DEUG ! On est allez trop vite et on n'a pas compris qu'il faut commencer par des choses simples.
Je prends acte de votre point de vue qu'apprendre de C est inutile et qu'on perd son temps ! C'est possible par contre je connais des enseignants qui on essayé de commencer par le C++ avec un public 18-20 ans : beaucoup d'échecs et j'en connais des tonnes qui sont revenu en arrière. Je connais aussi beaucoup de cours de C++ si ambitieux qu'à la fin 7 étudiants sur 10 n'ont rien compris ! Il ne faut pas conclure trop vite et je respecte votre point de vue. Faites aussi attention que "casser du prof" est facile et que je passe moins de temps que beaucoup d'entre vous (les étoilés) à programmer !
Savoir manipuler les chaînes sous forme de char * permet d'approfondir l'algorithmique : comment transformer une chaîne en un entier par exemple ? L'algo est simple mais les étudiants galèrent pour le trouver.
Si cet étudiant n'a jamais fait cet exercice pensez vous qu'il sera bon en algo ? L'algo est peut être inutile ? Je suis d'accord il y des fonctions qui font ça tout seul mais il faut aussi bien voir que les exercices "inutiles" où on "gaspille" du temps forme leur esprit au raisonnement algorithmique. Si on leur donne des recettes toute faites ils seront nuls en algo à la fin. Dès qu'une fonction ne sera pas disponible dans leur bibliothèque de fonctions, ils seront perdus. Vous les embaucheriez comme programmeurs !
Je pense qu'il faut faire attention à une chose : on pense souvent de l'extérieur et quand on a 10 ans de C++ derrière soi que la programmation c'est simple à apprendre mais non c'est compliqué ! On ne peut pas tout traiter : il faut commencer par des choses élémentaires.
Deux écoles effetivement sont possibles :
1) on commence par les choses avec tous les concepts bien comme il faut
et petit à petit on explique comment ça marche.
2) On commence par les choses simples ( ce que vous appelez usine à gaz), on explique les insufissances et on montre un nouveau concept qui va combler ces insuffisances.
Pour moi, il n'y pas photo : l'approche 2 est préférable pour la majorité
l'approche 1 est élitiste !
PS : j'ai été formé par l'approche ultra élitiste (pas en programmation mais en mathématiques)- j'ai vite compris les insuffisances pour la majorité de cette approche.
merci mtopoloff pour le plan.
C'est une possibilité. Par contre la difficulté que je vois, c'est qu'on a pas de tableaux avant le chapitre 7 : comment faire des exercices concrets dans un tel cas ? C'est à étudier....
merci
Ce n'est pas un question d'aller trop vite, mais de ne pas les perdre dans des détails qui leur seront inutiles. Pour cela, on va faire en sorte d'aller le bon ordre.
Ce n'est pas une question de leur parler de la STL, mais de la SL au fil des besoins. On veut rentrer le nom d'une personne ? -> std::string. On veut un tableau non statique -> std::vector. C'est un bon début et il n'y a pas besoin de rentrer dans les détails.
std::string a une sémantique de valeur, je ne concèderai pas que c'est moins simple à utiliser que des char*, ou même des tableaux statiques de caractères. Et puis, on veut présenter les tableaux ? "Tiens, je vous montre un truc juste avant : pour accéder au premier caractère d'une chaine ch, on écrit ch[0]". Chapitre d'après, "vous vous souvenez des chaines ? Et bien les tableaux ça y ressemble."
Un gars qui doit concevoir des bibliothèques bas niveau doit maitriser ces détails, c'est un fait. Le gars qui assemble des petits modules pour arriver à un truc un peu plus gros mais dont les résultats devront être vite perceptibles n'a pas besoin de ces détails.
Le Pascal et mieux l'Ada sont des langages royaux sur le plan pédagogique. Et pourtant on ne montre jamais dans ces premiers cours comment on manipule les pointeurs, leur arithmétique, ... A la place, on utilise au maximum leur types dédiés pour les tableaux et les chaines. Est-ce un problème de ne pas savoir comment ça marche en interne ? Non, absolument pas.
Pourquoi le C++ devrait être présenté comme une surcouche du C, ce qu'il n'est plus ?
Raison de plus parce que ce sont des gens inexpérimentés, on devrait leur montrer le côté utilisation avec des exemples pratiques et motivants -> gérer un carnet d'adresse/ bibliothèque/médiathèque personnelle, un jeu du pendu, un jeu de puissance 4 (pour jouer à deux, l'élève sur 30 qui est motivé et en avance pourra s'amuser à faire l'IA)
Algorithmiquement parlant, cela ne manque pas de challenges. Et à aucun moment, on n'a besoin de voir un seul pointeur!!
Pour la convertion chaine <-> nombre, le langage propose déjà des outils. Pour un informaticien, OK on va montrer l'algo. Pour un débutant, il y a d'autres algorithmes tout aussi valables et qui plus est des qui ne supposent pas des connaissances en mathématiques qu'ils risquent d'avoir oublier depuis longtemps.
L'Accelerated C++ suppose des bases en agorithmique, en revanche la démarche de que Francis Glassborrow expose dans son bouquin a semble-t-il été testée avec succès sur de parfaits débutants. Je maintiens mon conseil quant au bien fondé de sa consultation.
Bref, cette approche est au contraire pragmatique. On montre juste ce qui est nécessaire de savoir pour concevoir des programmes simples. Les pointeurs on n'en a guère un besoin crucial avant l'introduction du polymorphisme et de la sémantique de référence. Et peut-etre même qu'ils pourraient être familiers avec les itérateurs au moment de les aborder.
Et si il y a un élève sur les 10 qui pose la question de savoir "comment c'est fabriqué std::string", et bien on aura tout le temps de lui expliquer la chose entre deux cours ou lui dire de patienter jusqu'aux annexes.
PS: je ne casse pour ma part pas du prof. Je sais très précisément à quel point monter un cours de C++ n'est pas un problème facile et évident entre les contraintes de cohérence avec le cursus, le public, ce que l'on voudrait montrer, les heures dont on dispose, le temps dont on dispose pour préparer le cours ou reprendre un truc qui existe, ....
J'estime qu'il y a un réel problème dans l'enseignement du C++ et mes remarques ne sont qu'à vocation d'améliorer le support de quelqu'un ouvert aux critiques.
STL, template, je suis d'accord c'est compliqué. std::string je trouve ça beaucoup plus simple que les char *, idem std::vector. Pas de gestion manuelle de la mémoire, syntaxe plus lisible et naturelle, etc...Citation:
Prendre un public de bachelier et leur parler de STL au troisième cours cela se fait mais "passe mal" avec des étudiants débutants. Il faut bien voir que pour eux, ils ne connaissent que word un mois avant ! Je connais des cours de C++ où en 20 h on a vu tous les concepts du pur C++ normalisé et où effectivement on parle d'héritage et de virtualité au dixième transparents.
Pour moi héritage / virtualité c'est pas du C++, c'est de l'objet. On peut faire ça en Java ou XXX, c'est kifkif. Appeler ça un cours de C++ je trouve ça très réducteur. On sort de là en croyant que C++ c'est du C avec des classes. C'est ce que j'ai cru un moment. C++ = classes. Ben en fait non, y'a rien de C++ là dedans. Etudier l'héritage et la virtualité en Java ou Python c'est pareil, et même plus simple.
Si on fait un cours pour apprendre C++, on se doit selon moi d'utiliser ses conteneurs standards, normalisés. On saisit alors ce que peut apporter C++ et justifier son choix : sa vaste bibliothèques de TAD tout prêts à l'emploi. Ca c'est spécifique C++, bien plus qu'un code exemple d'héritage qui compile indifférement en C++, Java ou C#.
Je trouve ça gonflé de mettre C++ sur son CV (ce que chaque étudiant fera) sans avoir entendu parler de la STL.
Beaucoup d'étudiants se plantent car ils se sont trompé de voie aussi. Je suis d'accord qu'il faut enseigner des choses simples, et c'est exactement pour cela que je préconise std::string au lieu de char *.Citation:
Vous, vous les voyez jamais ces étudiants car ils se plantent dans leur études. Regardez le taux d'échec dans l'ex DEUG ! On est allez trop vite et on n'a pas compris qu'il faut commencer par des choses simples
Attention, je n'ai pas dit qu'apprendre le C est inutile. Apprendre le C pour faire du C++ oui c'est inutile, je pense même que c'est néfaste. Apprendre le langage C pour faire du C pas de problèmes. Apprendre du C/C++ par contre...Citation:
Je prends acte de votre point de vue qu'apprendre de C est inutile et qu'on perd son temps ! C'est possible par contre je connais des enseignants qui on essayé de commencer par le C++ avec un public 18-20 ans : beaucoup d'échecs et j'en connais des tonnes qui sont revenu en arrière. Je connais aussi beaucoup de cours de C++ si ambitieux qu'à la fin 7 étudiants sur 10 n'ont rien compris ! Il ne faut pas conclure trop vite et je respecte votre point de vue
Oui, toujours pareil. C'est les plus ouverts d'esprit et les plus pédagogues donc qui discutent et trinquent pour les autres ;)Citation:
Faites aussi attention que "casser du prof" est facile et que je passe moins de temps que beaucoup d'entre vous (les étoilés) à programmer !
Personnellement, je pense savoir faire la part des choses. Je dois avoir un ton assez brutal, mais je n'ai aucune rancoeur ou je ne sais quoi ;)
De même que c'est un professeur qui m'a dégouté du C++ & de l'objet, c'en est un autre qui m'a réconcilié et fait aimer ces 2 là. Ce que je reproche à l'enseignement, surtout universitaire, c'est cet espèce de mépris de la programmation, cette tâche presque dégradante, indigne d'un chercheur / diplomé Bac>3 (les pisse-code). C'est un peu exagéré, mais pas tant. On nous enseigne les bases de la programmation, et puis plus rien. Les étudiants, comme par magie, deviennent de bons programmeurs. Je ne pense pas vous apprendre quelque chose en vous disant que pas mal d'étudiants, même à un haut niveau, ne conçoivent pas de savoir quelque chose si on ne leur a pas apprise en cours. Posez une seule question en interro dont la réponse ne figure pas telle quelle dans le cours et c'est un scandale (je casse aussi les étudiants :D). C'est passer à côté des études selon moi, où on est censé apprendre à apprendre.
On peut très bien faire travailler sur cet algo avec std::string. Sinon dans ce cas pourquoi ne pas utiliser uniquement les GOTO à la place de for, while, etc... ? Parce que GOTO c'est mal. Ben char * aussi, c'est mal. De même qu'on utilise for, while, do, etc... qui sont des mots clés du langage, je trouve normal d'utiliser std::string, std::vector, std::list qui sont des TAD du langage. Rien n'empêche de se coder un ou 2 TAD en TP comme on coderait for ou while avec des GOTO, mais bon, arrivé à un moment on a compris l'idée. On donne un cours de TAD, on explique qu'ils sont presque tous présents en C++. Je trouve plus utile de coder un TAD qui n'existe pas en C++, comme l'arbre, plutot qu'un type déjà existant.Citation:
Savoir manipuler les chaînes sous forme de char * permet d'approfondir l'algorithmique : comment transformer une chaîne en un entier par exemple ? L'algo est simple mais les étudiants galèrent pour le trouver
Utiliser des types tout prêt n'empêche pas de faire de l'algorithmie. Je dirais même au contraire que leur disponibilité permet de se concentrer sur l'aspect algorithmique au lieu de perdre 4 heures à coder sa pile qui va servir à je ne sais quoi. Car coder une pile, c'est plus une prise de tête sur la syntaxe, l'allocation et tout ça que sur l'algorithmie.
Par contre coder sa fonction de conversion std::string -> int au moyen d'une pile, on peut se concentrer sur l'algorithmie et laisser de côté l'aspect syntaxique.
Mon raisonnement est simple : tout le temps qu'on consacre à déboguer un pointeur, on le consacre pas à autre chose. C'est ce que je considère comme du gaspillage. Y'a pas d'algorithmie à pourrir son code de printf("coucou\n"); pour trouver où le char * plante. :wink:
C'est pas ce que j'entends par usine à gaz. Y'a une règle simple, que les élèves devraient recopier 100 fois. Moins on écrit de lignes, et mois y'a de bugs. Alors avant de partir dans un type X, Y et Z qui stockent des pointeurs de tableaux d'indices qui... aller sur google 10 minutes voir si y'aurait pas quelque chose qui existe déjà et comment s'en servir, c'est ce que j'appelle apprendre à apprendre.Citation:
1) on commence par les choses avec tous les concepts bien comme il faut
et petit à petit on explique comment ça marche.
2) On commence par les choses simples ( ce que vous appelez usine à gaz), on explique les insufissances et on montre un nouveau concept qui va combler ces insuffisances.
Merci pour vos conseils : apparamment nous sommes en désaccord sur la manière de procéder. Partir du haut ou du bas ? Utiliser ou non dès le début les librairies standards ?
Pour moi un cours doit aborder les points suivants :
- comment on utilise ?
- comment ça marche (en simplifiant bien sûr) ?
Les 2 notions doivent être abordées en parallèle.
J'estime de plus qu'il faut partir du bas pour montrer comment petit à petit le C++ s'est construit et continuera d'évoluer.
Pour les exemples motivants (médiathèques,puissance 4,...) ils sont déjà dans mes exercices et j'ai maintes fois été battu par leur satané puissance 4.
A sortir bientôt dans la même série :
- concepts avancés en C++
- interface graphiques sous QT
Il va ya avoir du sport....
:lol:
Si c'est un cours de C, la bibliothèque (attention au terme librarairie) standard c'est les char * et strlen, strcpy, ...Citation:
Merci pour vos conseils : apparamment nous sommes en désaccord sur la manière de procéder. Partir du haut ou du bas ? Utiliser ou non dès le début les librairies standards ?
Si c'est du C++, la biliothèque standard c'est std::string.
Comment on utilise -> cours de C ou C++Citation:
Pour moi un cours doit aborder les points suivants :
- comment on utilise ?
- comment ça marche (en simplifiant bien sûr) ?
Comment ça marche -> cours d'algorithmie.
Exemple : le TAD pile : principe en cours, mise ne pratique avec std::stack en TP de C++.
remarque pratique :
est que tu pourrais ajouter des indentations dans ton code. Ca le rendra plus lisible parce que tout aligné à gauche quand on a 3 boucles imbriquées c'est lourd à lire
Je sais "la drogue" j'essaye d'améliorer la lisibilité du code version après version
dur dur !
je n'ai pas l'impression qu'il y a un index pour trouver un point précis (genre je veux me renseigner sur les templates)
personnellement je préfère les cours écrits sous forme de vrais polycopiés et pas de transparents s'il n'y a pas de support audio derrière (un prof. en quelque sorte)
d'après ce que j'ai lu du thread, en 1° année on commence à programmer en C++ ? je trouve cela dingue :!:
Pour nous réconcilier il sortira (vers le mois de mai) une nouvelle version du cours (moi je garde la mienne pour faire mes cours !) où les concepts du C++ seront étudiés en introduisant au plus tot les librairies standard : on abordera dans le même chapitre les tableaux et les vecteurs !
Chiche !
Le probleme est bien plus profond !
Ayant fait un cycle universitaire en parallele au travail en entreprise (eh oui, vive les cours du soir à Paris 6), j'ai remarqué le gouffre qui separe les deux.
J'ai appris à programmer tout seul, en faisant des jeux. Puis je me suis amélioré en travaillant avec des gens doués et experimentés.
Mais je pense qu'il est essentiel d'apprendre aux etudiants à quoi va servir leurs connaissances en C++. N'oubliez pas, cher professeur, que demain, vos etudiants devront fabriquer des composants fonctionnels, avec les contraintes de productivité de l'entreprise, loin des theoriques char * et *i++.
Pour cela il faut leur apprendre tres tot l'utilisation des outils professionnels (Visual, Ecclipse, Builder..) avec des projets d'apprentissage realistes (arretez avec vos fonctions foo et les regexp). Ou on leur apprend pas seulement comment coder une fonction en C++ mais aussi comment créer un projet sous Visual Studio (ou un IDE GNU) comment utiliser les outils de debug, de versionning. Et cela ne prendra pas beaucoup de plus de temps mais sera tellement plus utile que d'apprendre par coeur la syntaxe du C/C++ qu'on peut tres facilement retrouver sur Internet, MSDN etc... Il faut, dans le cours d'informatique, leur apprendre à se servir des principaux outils et d'appliquer des methodes de developpement (RAD)....
En gros passer sous forme de reference le cours en C++ et etudier plus en profondeur les methodes et les outils.
:wink: re-moi
j'ai pas pu suivre les débats, jme suis tapé 220 bornes aller-retour.
enfin bref.
en ce qui concerne le plan, pour réconcilier un peu tout le monde je serais d'avis de faire 2 parties :
Partie 1 : Notions de C
Chapitre 1 : kekchoz
...
Partie 2 : Cours de C++
Chapitre 1 : concepts objets, gnagnagna
Chapitre 2 : les différences entre C et C++
...
dans la partie 1 (qui n'a pas a être très longue), on peut parler des instructions que l'on retrouvera dans le C++
des instructions propres au CCode:
1
2
3 for (...) {intructions;} while (condition) {instructions;} ...
des conventions d'écriture (+ indentation)Code:
1
2
3 malloc free types_basiques * (dont notre ami le char *)
ensuite viens la Partie 2 qui nous intéresse, et là pif paf pouf les concepts objets d'abord :Code:
1
2
3
4
5 //constantes en majuscule #define MON_ENTIER 10 //variables en minuscule int monEntier = 12; int mon_entier = 27;
sans code, présenter des diagrammes de classes pour illustrer, prendre un ou deux exemples concrets style une classe CAnimal
- par la même occasion donner les convention d'écriture au fur et à mesure (nom de classe en minuscule avec un "C"+ la lettre suivante en majuscule) - donc faire le diagramme de cette classe, introduire l'héritage (le concept, pas de code dans les chapitres qui introduisent les concepts)
avec le diagramme UML où on retrouve la classe CAnimal et dont dérive CHomme, CChien, CTruie :lol: ...
ensuite vient le chapitre qui montre les grosses différences C/C++ (outre que le C++ soit un langage objet)
et passé ce chapitre ne mettre que du code C++!
i.e. std::string, std::vector ..., éventuellement virer les std:: en mettant un using namespace std pour débuter (sans trop expliquer le std::, faire référence au chapitre qui parle des namespace et de la STL, le but au début étant de manipuler. plus tard on dira d'où sorte les aliens 'std::'. on peut se passer de le savoir pour comprendre la prog C++)
bon ben ché pas ske vou en pensé, n'hésitez pas à me trucider. allez-y j'aime ça !!!!
http://arb.developpez.com/smileys/aouille.gif
Il est dommage que le débat tourne à la croisade anti-universitaire (j'ai beaucoup apprécié le "cher professeur"). Je ne pense pas qu'une approche orientée outils soit une bonne solution : les outils changent vite et il vaut mieux je crois commencer par apprendre des notions indépendamment des compilateurs. J'estime que mes apprentissage sont réalistes et je n'ai jamais posé le moindre devoir qui traite de la syntaxe du C++.
J'estime qu'un étudiant qui sort de licence informatique doit connaître ce qu'est un char * et doit connaître la classe string et la STL et doit aussi connaître quelques outils de développement ( je propose dev-cpp et visual C++ dans mes cours). Il doit aussi savoir développer une application C++ comportant une interface graphique. Par contre nous divergeons fortement sur les moyens d'y parvenir !
j'au toujours été un universitaire farouchement opposé à un unique apprentissage théorique. c'est pour cette raison que , même si vous n'aimez pas mon cours, je propose de nombreux exercices aux étudiants certains théoriques pour voir s'ils ont compris les concepts et d'autres très pratiques (comment gérer une DVDthéque) ! C'est aussi pour cette raison que je suis venu ici dans cette jungle !!!
bigboom pose également une bonne question : où mettre l'UML ?
ça aussi c'est une problème pas si évident que ça !
Et un autre problème majeur : où mettre la programmation système ? est-ce inutile ? Comment faire si on n'a pas vu le C (d'où mon approche C puis passer en douceur au C++) ? Peut-on traiter ce sujet en C++ pur ?
L'idéeal serait de traiter à fond le C puis à fond le C++ puis à fond java et a fond l'UML mais là arrive la contrainte du nombre d'heures de cours !
Finalement c'est pas si simple la programmation !
Qui apporte une proposition ?
moi je trouve ça très bien. J'ai touché à rien d'autre que emacs en 5 ans d'études. Beaucoup étudiants qui étaient avec moi ont quitté l'école sans avoir vu ou même savoir ce qu'est Visual C++. Je trouve ça bien que vous y fassiez une initiation. Cela dit je ne suis pas d'accord avec mtopoloff. On ne doit pas former à un RAD particulier. Initier oui. Un TP d'initiation je trouve ça bien, et suffisant.Citation:
je propose dev-cpp et visual C++ dans mes cours
La programmation système c'est un autre domaine à mon avis. Moi j'ai appris le C en cours de système par le prof de système, et le C++ en cours d'OO par le prof d'OO.
Initier aux outlis OK, mais pas former. Je suis d'accord les outils changent et tout le monde n'a pas les mêmes gouts ni les mêmes attentes une fois que l'on doit développer pour de bon.
UML est à voir en parallèle d'un langage OO et d'une méthodologie (UP ou autre) -- car au fond, juste UML seul il n'y a pas de quoi avoir un truc vraiment pertinent.
Il y a moins d'une semaine, le manque de sensibilisation aux méthodes de tests (voir p.ex. les test units) était d'ailleurs souligné sur fclc++.
Notre point d'"accroche" n'est pas ce qui doit être enseigné, mais l'ordre dans lequel procéder.
La programmation système est dans un module à part. Dans mes souvenirs, j'avais eu un mélange de C, Ada et modula (gros projet durant lequel on avait développé un noyau transactionnel). Et justement, en lisant les propos d'Herb Sutter (une toute petite phrase au sujet du langage d'API pour .NET) je m'interroge quant à l'avenir du C dans la programmation système sous .NET.
NOTE : je suis d'accord avec le fait de faire toucher aux IDE.
perso, après un DESS et une école d'ingé Info, j'ai pas touché à un IDE pour programmer du C++ (c'est fou ça quand même). je n'ai fait que de la ligne de commande et souvent dans un éditeur de texte sans coloration syntaxique (un bloc note sous Unix quoi, c'est caca pour s'y retrouver dans le code et dans les différents fichiers du projet).
ya qu'en DESS que j'ai touché à un IDE, c'était pour faire de l'EIFFEL (et bonjour l'environnement vachement complexe! complet, mais complexe, cf. le lancer de caillou :lol: et autres)
aussi je suis complètement d'accord pour faire toucher à VC++ ou autre, mais éventuellement après avoir fait de la ligne de commande histoire d'abord de se concentrer sur les concepts et la syntaxe s'en s'embrouiller en plus avec un IDE.
(fournir un makefile type où ya plus qu'à changer les noms des fichiers à compiler)
NOTE: à un moment ou un autre faut apprendre à faire un makefile (j'ai pas fais gaffe si c'était ou pas dans le cours)
On peut se poser des questions quant à l'avenir du C.. On a dit ça pendant des années du cobol : il n'est pas mort si vite (excusez moi je pense qu'il est encore vivant) !
On peut voir la programmation système uniquement selon l'axe .net. Cela enterrine donc que microsoft fixe tous les standards de l'informatique. Il y a des gens qui pensent que voir à la fois linux et les standards microsoft est une bonne solution. C'est vrai qu'il s'agit là d'un bon système d'exploitation même si en part de marché il est loin derrière microsoft !
Aujourd'jui on ne peut pas non plus multiplier les langages car il faut étudier je crois le C++ et le java et cela prend du temps.
Je crois encore à la nécessité d'apprendre le C.
Finalement vous m'avez convaincu :
- pour le public bac+1 à BAC+3 j'utiliserais ma méthode
- pour un public plus mature, on peut peut-être apprendre directement le C++ mais je ne suis pas certain qu'ils conprennent si bien que ça car le problème c'est que dans les BAC+4 à BAC+5 le niveau des étudiants baissent lentement mais surement (car le nombre des étudiants augmente !).
Il y aura donc 2 cours de C++ sur mon site avec é approches différentes! Vous aurez 2 fois plus de critiques sur les fautes d'orthographes !
merci à vous !
:wink:
Pour le makefile j'ai pas encore décidé ou le placer. c'est pas si facile : les étudiants s'en fouttent un peu lorsqu'ils connaissent un IDE ! Je peux botter en touche en disant que c'est du système... trop facile ...
à tout casser, tu peux le mettre en annexe (c'est un cours uniquement sur le net à la dispo des étudiants ou c'est un support à un cours+TP?. dans le 2è cas fo obligatoirement leur faire faire un makefile au moins 2 fois - le 2è c'est parce que généralement y zon rien capter la 1ère fois :lol:)
par contre faut que ça soit bien détaillé, dire ce qu'il est obligatoire de mettre et à quoi ça sert, et les options qui peuvent être ajouté, fournir un squelette de makefile + des exemples complets concrets pour des projets contenant plusieurs fichiers.
Pour moi, le makefile c'est dans la catégorie initiation aux outils. Un TP sur emacs (ou vi pour faire plaisir à Luc :-), un sur VC++ et un sur les makefiles.
Pour la prog système en C, c'est plutot la prog système tout court qui devient moins fréquence. Avec des frameworks comme Qt tu n'as plus trop besoin de passer par les API systèmes en C.
J'ai fait IUT, licence&maitrise, DESS (2 universités différentes). Essentiellement ADA en 1° année, et du C à la fin.
Un peu de C++ en 2° année, +asm, et bcp de merise / analyse OO (=> dégout).
C/C++ en Licence (reconcilliation C++), et un peu FORTRAN, Scheme (juste assez pour détester).
Maitrise : un poil de Java (réseau)
DESS: un poil de Java SWING (IHM)
Bref, quasiment rien après bac+3.
Un bouquin que j'ai beaucoup apprécié, et qui traite du "fossé entre le monde académique et le monde professionnel" : "Métier Développeur : kit de survie", de Jean-Christophe Arnulfo. C'est pas mal axé C++ & Windows quand même. A faire lire par les maîtrise / DESS.
Très instructif pour les étudiants. Ca permet de voir un peu en pratique ce que donne le génie logiciel.
Sinon à lire absolument :
:fleche: Les cours et tutoriels pour apprendre C++ : http://cpp.developpez.com/cours/
:fleche: La FAQ C++ : http://cpp.developpez.com/faq/
yaka c'est sûr mais les makefiles si on veut que les étudiants aient compris et aient pratiqués, ça "bouffe" encore 4h de cours/TP ! Idem pour savoir utiliser un débogguer...et ainsi de suite avec des tonnes d'outils....
Et après, une fois qu'on a fait tout ça on s'aperçoit que les étudiants n'ont pas acquis les bases : on a passé trop de temps sur les outils et pas assez sur le fondamental.
Il y a des facteurs qu'il faut prendre en considération :
- les étudiants ne peuvent pas "absorber" un grand nombre d'outils comme ça surtout avec le nouveau public universitaire de ces 3-4 dernières années
(peut être ne saviez vous pas que notre public change ?)!
- si on manipule pas fréquemment les outils, on oublie très vite surtout quand on est étudiant.
- si on fait trop de choses on laisse 50 % de gars sur la route qui termineront chomeurs
- si on va plus lentement et avec pédagogie : on en a que 10 % c'est mieux !
Les entreprises préfère l'approche élitiste (on met tout au programme et les gars qui suivant pas on s'en fout) car elles ne s'intéressent qu'aux meilleurs étudiants que produit le système.
C'est sûr qu'il y a un fossé d'incompréhension avec un mépris caractérisé
envers le monde universitaire. Il n'est pas sans défaut, j'en suis bien conscient mais ce que je puis vous assurer c'est que tous mes étudiants qui ont fait un stage en développement, et parfois de pointe, on toujours donné 100% satisfaction aux entreprises.
A vouloir casser du prof on finit par dire n'importe quoi !
Facile
Bonjour
Je ne vais pas vraiment participer au débat, car les sujets de discussion de ce topic sont devenus nombreux au fil des réponses (C/C++, outils, méthodologie, etc.)
Je voudrais juste rappeler que le but de ce cours est d'apprendre à des étudiants à programmer en C/C++. On peut discuter longtemps de ce que c'est C et de ce que c'est C++, des outils, etc mais il ne faut pas oublier que c'est des étudiants jeunes qui pour certains n'ont jamais programmé, et qui sont limité en temps. Quand on fait un cours, on s'adresse à un public assez large et c'est beaucoup plus facile de critiquer un cours que d'en construire un qui soit adapté à un plus grand nombre d'étudiants. Un cours n'est pas un tutorial et tant qu'on n'en n'a pas fait un, on sous-estime souvent le travail que ça nécessite.
Une petite remarque, beaucoup de profs ont constaté que commencer par l'OO passe mal, et préfèrent faire une transition (plus ou moins longue) par un langage procédural avant d'attaquer l'OO.
Cordialement
PS : >>merrheim : je pense qu'une idée d'amélioration est de faire évoluer le contenu du cours par les étudiants en fin d'année pour voir leurs réactions et attentes, car c'est eux (et les enseignants qui participent à ce cours) qui y participent réellement.