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.
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...
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.
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
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:
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
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:
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 !
Oui, toujours pareil. C'est les plus ouverts d'esprit et les plus pédagogues donc qui discutent et trinquent pour les autres ;)
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.
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
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.
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:
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.
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.