IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Quelles sont les difficultés majeures qui bloquent l'apprentissage du C++ en 2012

Votants
106. Vous ne pouvez pas participer à ce sondage.
  • La qualité de l'enseignement du C++

    60 56,60%
  • La gestion bas niveau de la mémoire

    24 22,64%
  • L'absence de mécanisme de protection (garbage collector)

    16 15,09%
  • Une syntaxe trop complexe

    26 24,53%
  • Pas assez de fonctionnalités dans le langage de base (IHM)

    29 27,36%
  • Trop d'outils ou de bibliothèques externes

    16 15,09%
  • Des abstractions haut niveau trop complexes (template)

    18 16,98%
  • L'évolution trop lente du langage et le retard qu'il a pris

    21 19,81%
  • Le manque de portabilité du C++

    7 6,60%
  • Un système de compilation beaucoup trop complexe

    32 30,19%
  • Les messages d'erreurs incompréhensibles

    47 44,34%
  • Le manque de ressources pour l'apprentissage

    14 13,21%
Sondage à choix multiple
C++ Discussion :

Le C++, un langage orienté débutant ! [Débat]


Sujet :

C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut Le C++, un langage orienté débutant !
    Vers un C++ orienté débutant ?
    Le langage évolue, son apprentissage doit évoluer aussi


    Ce n'est plus une nouvelle, le C++ continue son évolution avec la publication de la nouvelle norme, le C++11. Quels étaient les objectifs de cette évolution ? Il y a en avait plusieurs, mais nous allons nous intéresser ici à un seul point : "rendre le C++ plus facile à apprendre et à enseigner" (B. Stroustrup).

    Or, en pratique, force est de constater que le langage C++ rebute beaucoup de débutants. Certains n'arrivent pas à maîtriser les abstractions de haut niveau. D'autres bloquent sur les problèmes de gestion mémoire. Il y en même qui ont peur de la réputation du C++ et fuient avant de le tester.
    On reproche régulièrement au C++ d'avoir une syntaxe trop complexe, de permettre d'avoir 10 solutions pour un problème, de proposer des mécanismes d'abstraction trop complexes ou au contraire de ne pas sécuriser les manipulations de la mémoire, de ne pas fournir assez de fonctionnalités dans le langage et d'avoir trop de bibliothèques externes.
    On retrouve ainsi des débutants qui rencontrent encore et toujours les mêmes difficultés et refont les mêmes erreurs.

    Est-il possible de changer la façon dont est abordé le C++ pour en faire le langage parfait pour les débutants ?


    A votre avis, qu'est-ce qui doit évoluer dans l'enseignement du C++ ?
    Le C++ est-il par nature un langage trop complexe à force de vouloir trop en faire ?
    Les développeurs seniors ont-ils réussi à évoluer avec le langage et à transmettre les bonnes pratiques ?

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    A votre avis, qu'est ce qui doit évoluer dans l'enseignement du C++ ?
    Arrêter de l'enseigner en même temps que le C (au point que certains croient apprendre le C/C++ ) ou forcément après le C, comme s'il continuait parfaitement dans la lignée ? Le C a mauvaise presse en ce qui concerne l'enseignement, alors que le C++ ajoute pas mal de belles choses qui évitent notamment les pointeurs (vivent les références), la pire chose possible pour un débutant.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    J'ai un problème, j'aimerais cocher toutes les réponses du sondage.

    Je pense que c'est un mélange de tout ça qui rebute les nouveaux utilisateurs, à fortiori les étudiants nommé par beaucoup "génération google".

    Le fait que par défaut le langage ne permette rien en ihm leur laisse l'impression première d'inutilité.
    Après ça, on leur montre comment on crée une fenêtre, et là ils commencent les gros yeux "mais je veux juste créer une fenêtre".
    Dès qu'on parle pointeur, certains pensent déjà au suicide avant la moindre explication, et la gestion de la mémoire leur fait pousser des boutons.

    Quand à côté on leur vend du JAVA sous eclipse/netbeans ou C# sous visual en WYSIWYG, beaucoup ne comprennent pas l'intérêt de "se prendre la tête" avec le C++.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Points : 343
    Points
    343
    Par défaut
    Moi je pense que le plus gros problème c'est que ce qui semble etre de plus en plus enseigné a l’école c'est les langages a la mode comme Java ou C#. C'est simple, haut niveau, y'a pas besoin de savoir gérer la mémoire, y'a des outils drag & drop, ça fait le café... Bref ça parait tellement plus facile que le C++.

    Et par conséquent les débutants ne voient pas l’utilité d'un tel langage, ils ne sont pas conscient de sa puissance, de son utilité.

    Apres la syntaxe et la complexité du C++ rebutent également beaucoup. Si on fait n'importe quoi on est plus rapidement punit qu'en Java ou C#.

    Si je dois résumer, les débutants ne sont souvent pas suffisamment formés (gestion de la mémoire, POO et programmation générique), et les atouts du C++ ne sont certainement pas assez mis en avant !

  5. #5
    Membre actif Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    On reproche régulièrement au C++ d'avoir une syntaxe trop complexe, de permettre d'avoir 10 solutions pour un problème, de proposer des mécanismes d'abstraction trop complexes ou au contraire de ne pas sécuriser les manipulations de la mémoire, de ne pas fournir assez de fonctionnalités dans le langage et d'avoir trop de bibliothèques externes.
    Pour moi ces "reproches" sont au contraire le coeur des qualités du C++. Ceux qui posent ces reproches se trompent tout simplement de langage.
    Ceux qui cherchent un langage simple et qui ne nous pète pas à la figure à la moindre erreur de logique devraient utiliser un autre langage. C'est d'ailleurs souvent ce qu'ils font.
    Ce qui fait la complexité du C++ est également ce qui fait que c'est un langage où il est possible de faire du sur mesure afin d'optimiser à fond son programme.

    Citation Envoyé par dourouc05 Voir le message
    Arrêter de l'enseigner en même temps que le C
    je valide, c'est deux philosophies et deux langages complètement séparés.



    J'ai eu des expériences d'enseignement du langage C++. La principale difficulté à laquelle tous mes élèves ont été confronté est le pointeur. C'est contre intuitif, et si tu sais pas exactement ce que tu fais ca t'explose à la gueule. En tant qu'enseignant, je me suis demandé également comment les présenter pour que ce soit simple a comprendre, et je pense qu'il faut insister sur le concept de déréférencement. Un pointeur qu'on ne déréférence pas c'est une variable qui contient une adresse. La ils comprennent beaucoup mieux.
    Mais beaucoup de gens ne comprennent pas les pointeurs, et arrêtent d'apprendre le langage à cause de ca.

    Un autre aspect qui est mal compris, c'est le domaine d'utilisation du C++. Utiliser du C++ n'est pertinent que dans un programme où la performance est critique, et nécessite un traitement sur mesure et optimisé. Ca limite son utilité.
    Or beaucoup commencent le C++ sans le savoir, et du coup ne comprennent pas pourquoi qui que ce soit voudrait travailler avec un langage aussi peu sécurisé, et qui fait si peu de choses sans l'aide de libs externes.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    pour ma part j'ai commencé le c++ à la fac en master 1, déjà c'est tard et en plus le cours portais plus sur comment remplacer printf par cout. c'était pas glorieux, la suite c'est le projet, un annuaire, résultat, à la présentation j'étais hors sujet parce que j'avais utilisé la stl ... triste monde cruel. (sachant que faire joujoux avec des pointeurs et autres, je faisais ça en pascal et c pendant les 3 années de licence)

    comment le langage peut attirer des gens si l'enseignement est aussi pauvre ; mais je ne sais pas finalement quel est le mieux, faire du java où les profs n'ont pas besoin d'être très compétents, ou du c++ qui visiblement n'est pas dans les bonnes grâce des profs.

    par contre faire du c++ un langage facile à apprendre est une très mauvaise idée amha, on voit les dégâts avec php ou js qui sont des saletés pas possible.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Je pense que si c'est bien amené, le C++ n'est pas plus difficile à apprendre que d'autre langages. Le plus délicat est (comme dans beaucoup d'autres situations) la qualité de l'enseignement: du C++ présenté à base de STL et de RAII est très accessible et permet de faire déjà beaucoup de choses avec le langage. Les subtilités de ce que l'on peut faire au niveau de la mémoire ne devraient arriver qu'après.
    Enfin je pense qu'il ne faut pas négliger la complexité algorithmique dans la présentation notamment de la STL, il faut idéalement voir la STL comme une "boite noire" au niveau de l'implémentation (en tout cas dans les premiers mois d'apprentissage) mais il faut être parfaitement informé des garanties de performances offertes.

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Je crois sincèrement que le gros problème, ce sont les profs qui doivent apprendre C++ aux élèves...

    Trop souvent, ils font apprendre du "C with classes" sans avoir une once d'approche des principes même de conception OO (et sans parler des principes relatifs à la programmation générique )

    En java (ou en C#), l'héritage est "facile", vu qu'il ne peut etre que simple, et l'on peut sans risque envisager l'héritage "simplement" parce que deux classes présentent une interface commune, alors que l'héritage n'a aucun sens "sémantique".

    Si j'avais du attendre mes profs, jamais je n'aurais entendu parler de LSP, d'OCP, d'inversion de dépendance, de responsabilité unique, de sémantique d'entité VS sémantique de valeur ou encore de demeter!!!!

    Or, c'est la mise en oeuvre stricte de ces principes qui permettent d'éviter bien des écueils, quel que soit le langage (OO s'entend ) envisagé.

    En outre, les profs qui présentent, quand ils le font, la forme de Coplien ne présentent, le plus souvent, qu'une des formes: celle rendant obligatoire la présence d'un constructeur, d'un constructeur par copie, d'un opérateur d'affectation et d'un destructeur, puis obligent ( !!! ) les étudiants à l'utiliser de manière systématique.

    Il peut, effectivement, etre utile de s'assurer que l'étudiant a bien compris cette forme, mais il faut aussi qu'il comprennent:
    1. Que ce n'est pas la seul forme de la règle de Coplien qui existe
    2. Qu'elle n'est adaptée que pour les classes ayant sémantique de valeur
    3. Que le compilateur est en mesure de créer ces différentes fonctions si leur action est triviale
    On peut aussi parler du fait que la STL n'est pas (ou peu) abordée, et que le prof insiste beaucoup trop pour que leurs étudiants gèrent eux meme la mémoire, alors qu'il faudrait en fait faire l'inverse : parler d'abord et avant tout des classes telles que string vector et autres conteneurs, quitte à aller voir en profondeur à quoi cela correspond une fois que les bases sont acquises.

    En dehors de cela, il est vrai que l'évolution lente de C++ (on a parlé de C++11 pendant plus de cinq ans, à tel point que cette nouvelle norme m'a presque fait penser au monstre du loch ness, par moment) n'aide pas vraiment à son utilisation, tant il pouvait ne pas être en adéquation avec les besoins des développeurs (un simple exemple : les threads )

    J'ai aussi voté pour l'impossiblité de créer des IHM en natif, car j'ai l'impression que, à l'heure actuelle, on jure bien plus par l'aspect IHM d'une application que par son utilisation en mode console (ou en mode serveur )


    J'ai, enfin, voté pour les messages d'erreur incompréhsensibles, tels qu'ils apparaissaient avant la sortie de C++11...

    Grâce aux apports de la nouvelle norme, on remarque maintenant que les messages deviennent sensiblemnt plus clairs, mais encore faut il décider de l'utiliser

    Par contre, je ne crois sincèrement pas que le nombre de bibliothèques ou d'outils externes, la gestion bas niveau de la mémoire, l'absence de mécanisme comme le GB ou que le manque de portabilité soient des freins à l'utilisation de C++...:

    C++ est capable d'utiliser, en gros, toutes les bibliothèques C, en plus des bibliothèques "C++ only"... Ce n'est pas un mal, si ce n'est que l'on peut, effectivement, se trouver face à l'obligation de choisir entre deux bibliothèques fournissant des outils identiques.

    Mais ce genre de choix permet, justement, d'avoir une préférence, que ce soit pour des raisons clairement objectives ou non, et la liberté commence par la possiblité de choisir

    Si l'on travaille correctement, la gestion manuelle de la mémoire et l'absence de mécanisme de garbage collector deviennent suffisemment annecdotique pour que ce soit pas des problèmes... Tout au plus pourrait-on dire que cela nécessite "un tantinet" plus d'attention

    Pour ce qui est du "manque de portabilité du langage, je crois qu'il est surtout du au fait que certains n'aiment simplement pas C++ et ne ressentent donc pas le besoin d'en fournir une implémentation correcte pour leur système

    Enfin, je ne trouve pas la syntaxe de C++ *si complexe* que cela

    Bien sur, nous avons affaire à un langage multi paradigme, ce qui fait qu'il y aura, fatalement, plusieurs types de syntaxe à prendre en compte.

    Mais la syntaxe "de base" n'est vraiment pas compliquée!!! Il n'y a que quand on commence à s'intéresser à la programmation générique que les choses peuvent, tout doucement, commencer à se corser
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    J'ai coché enseignement et syntaxe trop compliquée.
    Enseignement pour les raisons de koala, pas la peine de les répéter. J'ai été assistant sur des TPs, et je vois ce que ça a pu donner.
    Syntaxe trop compliquée, principalement actuellement pour les lambdas qui ne sont pas correctement supportées par les IDEs classiques et par manque d'habitude sur leur utilisation. Mais les erreurs de compilation des templates ne m'ont jamais posés de problème, il suffit de savoir comment les lire.

  10. #10
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour à tous,

    j'ai coché "l'enseignement" : j'ai été embauché avant de finir ma licence, en tant que ingénieur C++, alors que dans mon université (Poitiers), on nous apprends les bases du C++ qu'en...accrochez vous... première année de Master... je trouve ça abusé.

    Maintenant pour ceux qui veulent être développeur C++ en sortie de leurs études comme moi je voulais à la base (j'avais prévu un master à ENJMIN, pour travailler dans le JV), comment on peut être prêt en 2 ans à utiliser un langage comme le C++ de façon "professionnelle" ?

    Nos profs nous répétaient sans cesse "pour maitriser un langage il faut au moins 20 ans".... mais alors pourquoi on fait 1 an d'ADA (bon j'adore ce langage presque plus que le C++, mais là n'est pas la question), puis un an de C et d'ADA puis un an C et de JAVA (voilà pour la licence), puis 1 an de C++ (pour voir les bases hein), et je ne sais quoi encore ?


    J'ai coché "les message du compilo" : ce qui m'amuse le plus ce sont les message concernant une mauvaise utilisation des conteneurs, quand il arrête de masquer tous les typedef qui ont été fait, les allocators qui ont une valeur par défaut, etc, et que tu peux même pas voir la partie du message qui compte sans recopier le tout dans ton main par exemple
    Nullius in verba

  11. #11
    Membre expérimenté
    Avatar de charlespf
    Homme Profil pro
    Développeur C/C++/Qt/Python et WebPHP
    Inscrit en
    Mai 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur C/C++/Qt/Python et WebPHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 251
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour à tous,

    J'ai également répondu la qualité de l'enseignement du langage. Peu de profs savent bien enseigner le langage et font trop le rapprochement avec le langage C. L'enseignement de la STL est également trop peu fréquent.

    A+
    charlespf

  12. #12
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 849
    Points
    849
    Par défaut
    Je pense également que l'enseignement peut-être mise en cause.

    Comme d'autre l'on dit, C++ est souvent enseigné en même temps que le C ou en se basant uniquement sur des connaissances de C. Or C++, même s'il peut effectivement être considéré comme un langage "multi-paradigmes", est d'abord un langage orienté-objet. Sans avoir préalablement étudié et pratiqué la POO avec un langage plus "simple", l'apprentissage simultané de la POO et d'un langage aussi impressionnant que C++ peut très vite créer des blocages chez les apprenants.

    Un autre problème que j'ai observé, c'est qu'avec certaine filière, les apprenants n'ont pas un modèle mental de l'ordinateur qui leur permettent d’appréhender la notion de pointeur qui, avec un modèle adéquat, est finalement très simple. Ce même modèle rend trivial également la compréhension de l'allocation dynamique.

  13. #13
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Une chose me chiffonne tout de même dans tout ce que je lis. Tout le monde insiste sur la nécessité d'introduire au plus tôt la STL et tout ce qui fait le C++ moderne. D'un autre côté, si vous n'avez que cent heures de cours à prodiguer, que vaut-il mieux former : des élèves capables de joliment manipuler la STL ou bien des élèves capables de manipuler les pointeurs sans se vautrer ? A quoi cela sert-il de prodiguer un cours en C++ à base de auto_ptr si les élèves ne comprennent pas comment cela fonctionne ?

    Après, j'entends que les élèves sont effarés par ce qui est nécessaire rien que pour créer une fenêtre. En même temps si on ne leur explique pas ce que "bas niveau" veut dire... Pour de nouveaux développements le C++ ne devrait être utilisé que lorsque l'on a besoin de sa puissance et d'un contrôle bas niveau, pas pour des applis qui seraient aussi bien développées, et plus rapidement, en Java ou C#.

    Enfin certains critiquent le manque de formation à la POO. Mais cela a t-il sa place dans un cours de C++ ? C'est plutôt un module à part. Qu'on fasse une embardée pour les spécificités du C++ qu'on retrouve de moins en moins ailleurs (héritage multiple, patterns spécifiques, etc).

    Un dernier pour la route : le modèle de compilation. Ajouter aux normes un second modèle de compilation, moderne, dont les fichiers seraient compilés comme l'est n'importe quel langage aujourd'hui (sans headers, avec un traitement préprocesseur purement local et une étape de résolution des noms avant la compilation proprement dîte), ne serait pas du luxe. Cela n'enlèverait rien à la puissance du C++ (templates et defines toujours utilisables via des include) et accélèrerait grandement sa prise en main, sans même parler d'un intérêt pour de nouveaux projets.

  14. #14
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 849
    Points
    849
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Enfin certains critiquent le manque de formation à la POO. Mais cela a t-il sa place dans un cours de C++ ? C'est plutôt un module à part. Qu'on fasse une embardée pour les spécificités du C++ qu'on retrouve de moins en moins ailleurs (héritage multiple, patterns spécifiques, etc).
    C'était tout à fait le sens de ma remarque. Il apparaît cependant que ce module à part n'existe hélas pas toujours.

  15. #15
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 19
    Points
    19
    Par défaut
    En tant que prof de programmation, le C++ ne me parait pas être un bon langage de programmation pour débuter.
    La principale raison est le mauvais choix des symboles à la fois hérités du C et ceux rajoutés par le C++ en ce qui concerne les pointeurs et les références (le * et le &). Ce sont de véritables pièges, et cela demande beaucoup de temps et de pratique pour s'y faire (ce dont on ne dispose pas dans les enseignements).
    Dès qu'on utilise une bibliothèque comme la STL, on découvre les joies des const. Même si ils ont une raison d'être, là encore on a tiré une petite branche, et c'est tout un arbre qui vient.
    Ensuite, j'ai toujours trouvé que les templates du C++ sont incroyablement compliqués d'un point de vue syntaxe, ils ont tendance à rendre le code complètement illisible.
    Je suis d'accord pour dire qu'il y a une logique, que tout peut se comprendre, mais si c'est au bout de 5 ans de pratique intensive et régulière, c'est que ce n'est pas le bon langage pour apprendre, car l'apprentissage de la programmation doit hélas se faire sur des délais beaucoup plus courts. J'ajouterai que le C et le C++ ne sont pas motivants par la forme des résultats (programme console) qui à mes yeux datent des années 80.
    Si tous les langages qui sortent aujourd'hui cherchent en premier à contourner toute la mécanique de la gestion de la mémoire, c'est bien que ça n'a plus rien de glorieux à le faire systématiquement à la main.

  16. #16
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Une chose me chiffonne tout de même dans tout ce que je lis. Tout le monde insiste sur la nécessité d'introduire au plus tôt la STL et tout ce qui fait le C++ moderne. D'un autre côté, si vous n'avez que cent heures de cours à prodiguer, que vaut-il mieux former : des élèves capables de joliment manipuler la STL ou bien des élèves capables de manipuler les pointeurs sans se vautrer ? A quoi cela sert-il de prodiguer un cours en C++ à base de auto_ptr si les élèves ne comprennent pas comment cela fonctionne ?

    Après, j'entends que les élèves sont effarés par ce qui est nécessaire rien que pour créer une fenêtre. En même temps si on ne leur explique pas ce que "bas niveau" veut dire... Pour de nouveaux développements le C++ ne devrait être utilisé que lorsque l'on a besoin de sa puissance et d'un contrôle bas niveau, pas pour des applis qui seraient aussi bien développées, et plus rapidement, en Java ou C#.

    Enfin certains critiquent le manque de formation à la POO. Mais cela a t-il sa place dans un cours de C++ ? C'est plutôt un module à part. Qu'on fasse une embardée pour les spécificités du C++ qu'on retrouve de moins en moins ailleurs (héritage multiple, patterns spécifiques, etc).

    Un dernier pour la route : le modèle de compilation. Ajouter aux normes un second modèle de compilation, moderne, dont les fichiers seraient compilés comme l'est n'importe quel langage aujourd'hui (sans headers, avec un traitement préprocesseur purement local et une étape de résolution des noms avant la compilation proprement dîte), ne serait pas du luxe. Cela n'enlèverait rien à la puissance du C++ (templates et defines toujours utilisables via des include) et accélèrerait grandement sa prise en main, sans même parler d'un intérêt pour de nouveaux projets.
    Concernant les formations il faut aussi savoir où l'on va. Si on veut apprendre à faire du développement sur un langage spécifique en allant en Informatique de Gestion on s'est un peu planté de voie. (C'est un exemple pas taper )

    Concernant la formation BTS IRIS (ancien Informatique Indus.) en revanche, pour en être sorti (non sans difficultés mais ça c'est la feignantise du développeur qui avait pris le dessus), ma promotion a vu ce qu'il fallait voir (du moins je pense).

    Quand à la POO elle n'est pas propre au C++, donc en faire un module à part n'est pas une mauvaise idée.

    Enfin, n'allez pas en université pour apprendre l'informatique, sauf si vous êtes à même d'apprendre seul (ce qui, de toute façon est obligatoire dans ler milieu de l'informatique) car ce ne sont pas les profs qui vous aideront.
    L'homme est un fou pour l'homme. Toi qui viens de me mettre un aie au moins le courage d'expliquer pourquoi tu n'es pas d'accord.

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 15
    Points
    15
    Par défaut
    Pour moi l'enseignement du C++ est clairement un problème. Dans mon école d'ingénieur, les profs (pourtant docteurs) nous apprennent le C/C++ (sic). Du coup on se retrouve avec des gens qui pensent qu'on peut transformer un code C en C++ en changeant les printf et les scanfs par des std::cout et std::cin. De la même facon, des développeurs C++ utilisent des en-têtes C au lieu d'en-têtes C++, typiquement stdlib.h au lieu de cstdlib.
    Et dans nos cours, la STL est à peine mentionnée, on se retrouve alors avec des implémentations maison des listes chainées ou piles, moins rapides que ceux de la STL.

  18. #18
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Une chose me chiffonne tout de même dans tout ce que je lis. Tout le monde insiste sur la nécessité d'introduire au plus tôt la STL et tout ce qui fait le C++ moderne. D'un autre côté, si vous n'avez que cent heures de cours à prodiguer, que vaut-il mieux former : des élèves capables de joliment manipuler la STL ou bien des élèves capables de manipuler les pointeurs sans se vautrer ?
    Les deux ! Je donne un cours d'une vingtaine d'heures, pendant lesquelles j'introduis à la fois des concepts (paradigmes de développement, OCP, POO, exceptions...), des outils (contrôle de version...) et le C++ (plus des bribes de C# et Java). Et pour la partie C++, je parle à la fois de la gestion manuelle de la mémoire, et des moyens d'automatiser ça (shared_ptr, pas auto_ptr). Alors même si mon cours est dense et destiné à des élèves qui comprennent vite, j'imagine qu'en 100h, il y a de quoi faire des choses intéressantes si on ne dois faire que du C++. Non, pour moi la problématique principale n'est pas "quoi enseigner", mais plus "dans quel ordre enseigner". Et là, je suis partisan de commencer par les aspects haut niveau qui permettent de faire des programmes ayant un intérêt simplement (et qui corresponde à 90% du code écrit en C++) pour ensuite se concentrer sur les aspects plus bas niveau (qui bien que ne correspondant qu'à 10% du code écrit font partie de ce qui fait l'intérêt du langage).
    Citation Envoyé par DonQuiche Voir le message
    Enfin certains critiquent le manque de formation à la POO. Mais cela a t-il sa place dans un cours de C++ ? C'est plutôt un module à part. Qu'on fasse une embardée pour les spécificités du C++ qu'on retrouve de moins en moins ailleurs (héritage multiple, patterns spécifiques, etc).
    Je suis d'accord que ça peut être séparé, même si le risque alors est d'avoir un cours de POO tellement abstrait que personne n'y comprends rien. Mais j'ai déjà enseigné le C++ à des élèves ayant un background de C et à d'autres ayant un background de Java, et il est clair que je pouvais aller bien plus vite dans mon enseignement avec les javaistes.
    Citation Envoyé par DonQuiche Voir le message
    Un dernier pour la route : le modèle de compilation. Ajouter aux normes un second modèle de compilation, moderne, dont les fichiers seraient compilés comme l'est n'importe quel langage aujourd'hui (sans headers, avec un traitement préprocesseur purement local et une étape de résolution des noms avant la compilation proprement dîte), ne serait pas du luxe. Cela n'enlèverait rien à la puissance du C++ (templates et defines toujours utilisables via des include) et accélèrerait grandement sa prise en main, sans même parler d'un intérêt pour de nouveaux projets.
    Les modules sont actuellement le "silver bullet" du C++, qui permettraient tout et son contraire... Mais je suis d'accord que pour l’aspect enseignement, quels que soient les choix effectués sur le design de cette fonctionnalité, il ne peuvent qu'améliorer les choses !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    J'ai voté pour les messages d'erreurs, et encore c'est uniquement pour les messages d'erreurs lors de l'utilisation de la STL (je n'ai plus fait de C++ depuis la sortie de C++11)

    C'était tout à fait le sens de ma remarque. Il apparaît cependant que ce module à part n'existe hélas pas toujours.
    Lors de mon DUT, on avait 2 cours séparer : Théorie de la POO et Mise en pratique en C++. Ce qui fait que malgré un prof incompétent en C++ on avait des bases générales de POO ce qui permettait de s'en sortir.
    Par contre dans mon école d'ingé (et comme ça semble être malheureusement de partout) les 2 cours était mélangés ce qui en a perturbé plus d'un... j'ai donc aussi voté pour l'enseignement.

  20. #20
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Nesquik75 Voir le message
    Pour moi l'enseignement du C++ est clairement un problème. Dans mon école d'ingénieur, les profs (pourtant docteurs) nous apprennent le C/C++ (sic).
    Je pense qu'il s'agit là d'une des cause du problème. Nombre d'enseignants ne sont pas des développeurs professionnels, mais des docteurs. C'est à dire qu'en dehors de l'enseignement, ce qu'il font, c'est du travail de recherche : c'est plus de l'algorithmique, des méthodes de preuve formelles, ou tout un tas de choses qui sont très certes utiles aux développeurs (peut-être pas toujours dans l'immédiat, mais certainement un jour), mais qui ne correspondent pas vraiment au travail au quotidien d'un développeur. Après, la situation peut varier, entre autre en fonction des goûts de chacun, mais j'ai déjà discuté avec des professeurs d'informatique n'ayant pas écrit une ligne de code depuis 10 ans.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. langage orienté gestion
    Par disneb dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 06/04/2008, 00h06
  2. régles de passage d'un diagramme de classe à un langage orienté objet
    Par lasmarmann dans le forum Diagrammes de Classes
    Réponses: 7
    Dernier message: 22/01/2007, 18h16
  3. [langage C][débutant] un vaisseau qui tire
    Par shinkyo dans le forum GLUT
    Réponses: 12
    Dernier message: 10/06/2006, 15h39
  4. VBA est-il un langage orienté objet ?
    Par Kcirtap dans le forum Général VBA
    Réponses: 5
    Dernier message: 06/12/2005, 09h46
  5. [web] [Que choisir ?] langages orientés web.
    Par otakuMerlin dans le forum Web
    Réponses: 4
    Dernier message: 07/04/2003, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo