Je me permet de réagir sur ce thème (même si je crois en avoir parlé l'année dernière sur un sujet similaire), puisque étant en deuxième année d'une école d'ingénieur, je peux en témoigner, sachant que ma vision est un peu différente, l'objectif n'est pas de convaincre des personnes qui programme depuis des lustres, mais en l'occurrence des étudiants qui programment depuis peu (lorsque je suis rentré en première année, on était peu à avoir déjà programmer).
Je passerai sur les élèves qui me disent que "de toute façon, autant uniquement apprendre le C et ne pas se faire chier sur d'autres langages puisque, de toute façon, en étant dans une école d'ingénieur ils sont là pour devenir des manageurs et non des pisseurs de code".
Histoire que vous ayez une vision de la "courbe" d'apprentissage de la programmation, voici comment cela se passe dans notre école (ingénieur, axé informatique), j'imagine que c'est un peu le même cas dans les autres :
Première année : Algorithmie, C
Deuxième année : Algorithmie, C++
Troisième année : Java, (C# je crois)
Je suis actuellement en L2, et les cours de C++ débutent au deuxième semestre, donc je ne peux pas témoigner sur la qualité des cours, mais un cours de programmation se divise principalement en trois "sections" :
- Les cours en amphithéâtre. Comme l'a souligné une personne plus haut, j'ai aussi cette sensation que les profs se considèrent plutôt comme "prof d'algorithmie", puisque, en fait, les cours ne portent pas le nom de "Cours de C" mais "Cours d'algorithmie". Concrètement, le professeur utilise un "langage algorithmique" plutôt que du C, sous prétexte que ce langage algorithmique a l'avantage de ne pas être dépendant d'une syntaxe. En pratique, ce langage algorithmique consiste à remplacer float, int, double... par réel, entier, if, else, while par SI, SINON, TANT QUE...
- Les "TD", ou "je code sur ma feuille". Pour moi, mais quelqu'un pourra peut-être me contredire, je considère ceci comme une ineptie. Quel est l'intérêt de "coder" sur une feuille ? De par ce que j'ai pu voir parmi les élèves, ceci à pour unique conséquence de dégouter une partie des élèves de la programmation.
- Les "TP", ou "je copie colle les sujets de TD, mais vous faites les exos sur l'ordinateur maintenant".
Voilà rapidement pour l'enseignement de la programmation en école d'ingénieur.
Concernant à présent le débat C et C++, j'ai bien peur que le même schéma se passe dans notre école. On nous présente, au tout début de la première année, les différents langages, en nous expliquant que le C++ est une évolution de C, une sorte "d'extension". Bref, dès le premier cours "d'algorithmie", il est rentré dans la tête des élèves que le C++ est une extension du C, comment voulez-vous que ceci change ? Résultat, lorsque je dis à mes amis que j'ai commencé par le C++, on me rétorque que je suis fou et on me demande l'intérêt.
Comme ceci a été souligné très justement par plusieurs personnes, il est inconcevable, à fortiori dans mon cas ou les gens ont, au maximum, 1 an de programmation dans le dos, de leur parler RAII ou de concepts compliqués dont il ne verrai pas l'intérêt.
J'ai pas mal observé mes camarades durant les cours de C, et je me suis aperçu que ce sont systématiquement les mêmes remarques qui reviennent : "putain, j'ai un problème avec ce pointeur", ou "comment je fais pour avoir un tableau dynamique sans avoir à faire des realloc bien chiants"... Et c'est clairement là qu'on peut convaincre les gens que les langages sont différents, justement en leur présentant les solutions à leur problème (à savoir std::vector pour les tableaux dynamiques, les pointeurs intelligents, la classe string...). La plupart du temps, les gens me répondent : "ah ouais, ça c'est pas mal, t'aurais pas un livre pour apprendre le C++ ?".
L'objectif principal est de leur faire prendre conscience qu'il existe des solutions en C++, qui soient propres, efficaces et simples à utiliser.
Comme je l'ai dit plus haut, je n'ai pas eu l'occasion d'avoir eu les cours de C++ encore, mais j'ai pu lire les slides du prof et, de mémoire, il traite effectivement d'abord la notion de POO, et passe très rapidement à la fin sur les templates, la STL... et c'est bien dommage. La POO, ils n'en verront peut-être pas "immédiatement" l'utilité, alors que std::vector, std::string, ça fera directement tilt dans leur esprit : il y a une solution à ce à quoi ils ont galéré durant des mois en C.
Même si je n'ai aps le droit vis-à-vis de l'école de mettre en ligne les slides du prof de C++, voici quand même le plan, histoire de vous donner une idée de la manière dont le C++ est enseigné dans une école d'ingénieur :
EDIT : je viens de m'apercevoir que des slides plus récents (et beaucoup plus beaux) sont en fait en lignes sur le réseau de l'école. J'ai regardé rapidement, et c'est quand même beaucoup mieux. Il cite même quelques exemples du moteur 3D Ogre pour montrer comment il est implémenté, avec de jolis diagrammes UML. C'est vraiment bien foutu, par contre les différents thèmes sont organisés de la même façon que ce que j'écris juste en dessous. En tout cas de très gros progrès ont été faits sur ce cours de C++.
Cours 1 : Introduction des entrées/sorties, référence, surcharge de fonctions, manière d'utiliser les fonctions C en C++, fonctions inline, allocations dynamiques avec new/delete à la place de malloc/free. Et, en prime, un magnifique slide indiquant que le C++ est un sur-ensemble de C.
Cours 2 : limitations des structures du C => présentation des classes : sécurisation des accès avec public, private, protected ; méthodes ; variables membres ; constructeur ; destructeur ; surcharge des opérateurs ; exemple de création d'une classe nombreComplexe.
Cours 3 : héritage & composition, liste d'initialisation (ça c'est un bon point déjà
), polymorphisme, classes abstraites.
Cours 4 : exceptions, exceptions dans le constructeur, namespace
Cours 5 : template, présentation de la STL, les fichiers en C++.
Je ne suis pas très clair dans ce que je veux dire, mais je pense effectivement que le problème vient directement de l'enseignement, ou le C est systématiquement enseigné en premier, ou le C++ présenté comme un subset du C, et lorsque le C++ est enseigné, c'est plus le côté "POO" qui est mis en avant, plutôt que la SL...
PS : Je tiens à préciser, au cas où des admins de l'école tourneraient par ici, que mon objectif n'est pas de dénigrer l'école où je suis et où je m'y sens bien, mais juste de pointer du doigt certaines faiblesses dans la manière d'enseigner la programmation et qui contribuent à faire de très mauvais programmeurs C++, même si beaucoup d'élèves argueront que de toute façon ils ne souhaitent pas devenir programmeur.
1 |
0 |