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. #21
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 66
    Points : 200
    Points
    200
    Par défaut
    Bonjour a tous,

    Quid a répéter : le rapprochement entre le C/C++ est un vrai problème pour l'apprentissage de C++. Je me suis moi-même retrouver dans une erreur classique en pensant qu'en apprennant le C, j'apprennais aussi le C++. Il y a même des profs ou des tutoriels qui disent que le C++ est une simple suite à C. C++ et C, on a cet impression de similitude et de continuité juste en regardant les noms du langage. Or si on regarde Javascrip et PHP , même si il y a des similitudes dans les langages, on sait pertinemment que ce sont deux choses totalement différentes.

    Pour un débutant, apprendre le C++ avant le C , ça n'a pas l'air évident. Un vieux prof m'avait dit clairement pendant une discussion , "il faut apprendre le C avant de passer au C++ etc...". Comme si il y avait une hiérarchie C, C+ puis C++.

  2. #22
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Un autre problème de l'enseignement est de se focaliser plus sur les parties algorithmique et moins sur l'architecture. Je pense comme ça a été dit qu'une des raisons est que beaucoup de prof sont aussi chercheurs et que de l'algorithmie ils en mangent dès le petit-dej, et puis l'architecture, ... tant que ça tourne... osef.

    (Un poil caricatural mais un peu de vécu dedans quand même )
    Linux > *

  3. #23
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 528
    Points
    2 528
    Par défaut
    Juste une remarque en passant (de la part de quelqu'un qui a appris le C++ à une époque où ce langage ne permettait pas de gérer les exceptions et qui n'en a pas fait depuis. A vous de relativiser la portée de mon commentaire...) concernant certaines des réponses que vous proposez dans votre sondage, à savoir : "La gestion bas niveau de la mémoire", "L'absence de mécanisme de protection (garbage collector)", "Pas assez de fonctionnalités dans le langage de base (IHM)".

    Le C++ est conçu comme un langage très généraliste, privilégiant le bas niveau et les performances, ce qui est peut-être son plus grand point commun avec le C. Les caractéristiques que je cite ne sont pas des problèmes mais sont voulues. Si des programmeurs n'ont pas besoin de ces caractéristiques et les trouvent gênantes de par la complexités qu'elles imposent, cela ne veut pas dire qu'il faut changer C++, mais plutôt que C++ n'est pas adapté au besoin de ces programmeurs et qu'il serait préférable qu'ils utilisent un autre langage.

    Personnellement, ce qui m'a toujours dérangé avec C++, c'est le fait qu'il y ait trop de manières différentes de faire les choses, dont certaines héritées du C. Dans ces manières différentes de faire les choses, il y a souvent beaucoup de mauvaises manières de faire les choses, ce qui veut dire qu'il faut beaucoup d'expérience avant de pouvoir réussir à faire du bon code en C++.

    Citation Envoyé par befalimpertinent Voir le message
    Un autre problème de l'enseignement est de se focaliser plus sur les parties algorithmique et moins sur l'architecture. Je pense comme ça a été dit qu'une des raisons est que beaucoup de prof sont aussi chercheurs et que de l'algorithmie ils en mangent dès le petit-dej, et puis l'architecture, ... tant que ça tourne... osef.

    (Un poil caricatural mais un peu de vécu dedans quand même )
    C'est tout à fait vrai, même si ce n'est pas spécifique à C++. Les enseignants et les chercheurs ne connaissent souvent pas les réalités de l'entreprise. L'architecture, c'est un domaine où on cherche à réfléchir dans le but d'améliorer la maintenabilité, la réutilisabilité, la robustesse, la sécurité, etc. C'est souvent très loin des préoccupations académiques.

  4. #24
    Membre extrêmement actif
    Avatar de benjani13
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2010
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2010
    Messages : 615
    Points : 2 824
    Points
    2 824
    Par défaut
    Il y a un réel problème d'apprentissage de la programmation en général je pense, le C++ ressort plus que d'autres langages du fait de sa complexité.

    Je suis en première année de DUT Informatique, et en un an on apprend le C (semestre 1), le C++(1/2 semestre 2) et le Java (1/2 semestre 2).

    Notre de prof de C nous a donné un enseignement trop abstrait dès le C. En TP nous ne faisions que des petits programmes du type programme de calcul de surface/volume de différents formes (a travers un menu, en console bien sur), lorsqu'on devait voir les scanf, et des programmes utilisant des doubles indirections lorsqu'on a commencé les pointeurs.

    Au lieu de cela, il aurait du nous faire faire une multitude d'exos, qui paraissent bêtes pour certains peut être, du type "afficher le contenu d'un table", "retourner un tableau", "faire la somme des éléments d'un tableau", etc. Ce genre de petits exos, de quelques lignes, qui font que les élèves vont s'approprier la logique du langage. Et cette logique, je vous assure que certains ne l'ont toujours pas.


    En C++ il a continué dans la même veine, mais le temps d'enseignement accordé ne l'a pas aidé. On a du avoir, au maximum, 8 semaines de cours de C++ (en en enlevant une pour le contrôle). C'est forcément trop peu pour tous voir et pratiquer assez.


    On a eu épreuve pratique (notée) de fin de C++, qui consistait à écrire une classe représentant une planète. L'épreuve était divisée en trois partie:
    - Écrire la classe de base, avec des champs simple (vitesse, rayon, type, révolution).
    - Ajouter une chaine de caractère (de type C), et la créer de façon dynamique(gestion des pointeurs). Puis mettre la classe sous forme de Coplien.
    - Introduction d'une composition en ajoutant deux champs de type Date (classe qu'on avait déjà écrit avant).

    Résultat? En deux heures, au moins la moitié de la classe n'a pas passé la première étape. On a du être 3 ou 4 a passé à la troisième étape, et je suis le seul a avoir finit le TP.


    Mais la faute en revient aussi en partie aux élèves! Indubitablement mordu de programmation (et d'informatique en général, je suis tombé dedans au collège), je m'attendais, en suivant un cursus informatique, à retrouver d'autres passionné(e)s. Et bien pas du tout, 95% des élèves baillent en amphi lorsqu'on leur parle de classe abstraite en C++, du fonctionnement d'un transistor en architecture, de l'organisation du noyau linux, pendant que les 5% restant s'extasie. J'ai souvent l'impression d'être le seul réellement passionnée par ce qu'on nous enseigne.
    Car si je suis "bon" (par rapport a mes camarades) codeur c'est bien par ce que je suis passionné. C'est par ce que cela fait depuis la troisième que je lis des tutos sur internet, que je m'amuse à coder des petits jeux genre snake, etc.

    En programmation je me suis bien rendu compte que pour progresser il faut continuer le cours sur internet, faire des exos dans son coin, se faire insulter par le compilateur pendant des heurs. Et pour cela il faut être motivé et passionné.

    Citation Envoyé par Traroth2 Voir le message
    C'est tout à fait vrai, même si ce n'est pas spécifique à C++. Les enseignants et les chercheurs ne connaissent souvent pas les réalités de l'entreprise. L'architecture, c'est un domaine où on cherche à réfléchir dans le but d'améliorer la maintenabilité, la réutilisabilité, la robustesse, la sécurité, etc. C'est souvent très loin des préoccupations académiques.
    Et bien, malgrès ce que j'ai pu dire sur lui dans mon précédent post, une qualité de mon prof de C++ et qu'il venait du monde tu travail. Il nous a initié aux méthodes agiles, à la programmation par occurrence, aux séquence de tests et à la sacro-sainte réutilisabilité.

  5. #25
    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
    Mais la faute en revient aussi en partie aux élèves! Indubitablement mordu de programmation (et d'informatique en général, je suis tombé dedans au collège), je m'attendais, en suivant un cursus informatique, à retrouver d'autres passionné(e)s. Et bien pas du tout, 95% des élèves baillent en amphi lorsqu'on leur parle de classe abstraite en C++, du fonctionnement d'un transistor en architecture, de l'organisation du noyau linux, pendant que les 5% restant s'extasie. J'ai souvent l'impression d'être le seul réellement passionnée par ce qu'on nous enseigne.
    Malheureusement, ça m'a l'air d'être le cas un peu partout (ça l'est dans mon école en tout cas). Forcement le code que ces gens là pondent est assez catastrophique.

  6. #26
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Personnellement, en DUT, on a eu un module de POO illustré avec Java et Python, et pour ceux qui le désiraient, une courte introduction à C++.

    Une fois en école d'ingénieur, c'était souvent Java, toujours uniquement pour illustrer, et langage plus ou moins libre pour les projets.

    On m'a toujours répété qu'un langage n'est qu'un outil pour l'ingénieur, qu'on doit être capable d'en comprendre les principes généraux et les spécificités en un ou deux jour (j'ai dit comprendre, pas maîtriser).

    Je fais essentiellement du C++ et tout ce que j'ai appris, je l'ai appris par moi même ou en entreprise.

    Je ne suis pas contre l'enseignement du c++ (au contraire) mais il vaut mieux comprendre à fond les mécanismes de la POO et les spécificités Cpp/Java/Python/OCaml...

    Je suis assez opposé aux différentes simplifications introduites par la nouvelle norme, parce que si elles ne sont pas bien enseignées, elles permettent au débutant de faire des choses sans les comprendre. (exemple: auto qui me révulse au plus haut point).

  7. #27
    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 JolyLoic Voir le message
    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.
    Quand je parlais de séparer l'enseignement de la POO et du C++, je ne pensais pas à enseigner la POO de manière abstraite mais avec un langage orienté-objet plus "simple" ou plutôt moins impressionnant.

    Si on arrive dans un cours de C++ en connaissant la programmation structurée et en connaissant POO, on peut se concentrer sur le langage et la syntaxe et, si c'est le premier langage de "bas niveau" étudié, sur la problématique des pointeurs et de l'allocation de la mémoire.

    Citation Envoyé par JolyLoic Voir le message
    la problématique principale n'est pas "quoi enseigner", mais plus "dans quel ordre enseigner"
    Absolument d'accord. Je reste persuadé qu'un apprentissage séparé de la POO et du C++ évite beaucoup de confusion et permet d'obtenir de meilleurs résultats sans forcément nécessiter plus de temps (peut-être même moins).

  8. #28
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par benjani13 Voir le message
    En programmation je me suis bien rendu compte que pour progresser il faut continuer le cours sur internet, faire des exos dans son coin, se faire insulter par le compilateur pendant des heurs. Et pour cela il faut être motivé et passionné.
    Et même après.
    On appelle ça faire de la veille.

    Pour les histoires de voir l'OO à part. Oui mais non. Il faut voir l'OO avec un langage (edit: je vois que nous sommes d'accord). Si on manipule des concepts sans les mettre en œuvre, on arrivera à rien inculquer aux élèves.
    Maintenant faut-il que cela soit avec le C++ ? Il faut alors répondre à une autre question avant : quel est l'objectif ? Enseigner le C++, ou enseigner le développement en s'appuyant sur le C++ ?

    Perso, je n'ai rien contre à utiliser le C++ moderne idiomatique comme support d'enseignement. (je rejoins donc Loic). (Et voir vers la fin les détails bas-niveau.)
    Le problème, c'est que si on se dit : "il faut montrer le bas-niveau aux élèves", et "prenons alors le C++ comme langage support, du coup on montrera l'OO en même temps", on finit par continuer à enseigner le "C/C++" (oui c'est un terme volontaire et péjoratif) et former de nouvelles générations de développeurs qui ne sachant pas utiliser le C++ vont continuer à le mépriser (ça encore, c'est pas grave).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #29
    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
    Le problème de la qualité de l'enseignement ne vient pas forcément de l'enseignant ou de l'élève, ni même du langage. Je penses qu'il s'agit surtout de l'agencement des emplois du temps, dans les universités en particulier...

    Comme il a été dit, et je l'ai vécu, beaucoup d'élèves ne feront jamais de programmation si on ne leur demande pas. Cela n'aide pas à comprendre le peu de cours que les profs peuvent nous faire et le temps imparti n'aide pas les profs non plus à faire des cours de haute qualité.

    C'est vrai qu'en 8 semaine de cours, moins une semaine pour les exams, je ne saurais pas quoi faire, mon cours serait forcément un survol, et du coup je serais obligé de mentir (ou d'oublier volontairement certaines subtilités du langage) pour ne pas les embrouiller.

    Mais quand on passe 3 jours sur 5 en 1° année de licence à faire tout sauf de l'informatique (bio, physique, chimie, etc... terminale 2 quoi...), et qu'ensuite on arrive en 2° année de licence et qu'on ne nous spécialise toujours pas dans notre domaine...il y a un problème. J'ai l'impression que la première année sert plus à "éliminer" tous ceux qui ont eu leur bac parce qu'il est donné de nos jours... forcément dans ces conditions on voit ensuite à la fac des élèves qui foutent rien...

    Bref, pour moi le problème vient avant tout du système éducatif qui ne permet pas aux profs et aux élèves de gérer leur temps d'enseignement/d'apprentissage correctement.
    Nullius in verba

  10. #30
    Membre actif Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    J'ai débuté le C/C++ quand j'étais en classe de second/première au lycée. C'était de l'autodidacte avec un ami donc les seuls enseignements que nous avons eu à cette époque c'était les infos et tutos sur le web.

    De ce que je me souviens, les difficultés rencontrées étaient :

    • - difficulté à trouver la frontière entre le C et le C++. Mélange de la stl, des libs du C (stdlib.h, stdio.h ....)
    • - la manipulation des pointeurs/références : ça était un cauchemar à l'époque. C'est ce qui a été le plus difficile et le plus long à comprendre. (Surtout qu'on était sous windows98 et à chaque écriture foireuse en mémoire à cause d'une mauvaise manipulation des pointeurs, on avait le droit à un écran bleu.)
    • - gestion de la mémoire dynamique qui faisait intervenir la manipulation des pointeurs, etc....
    • - la compilation, l'édition de liens (et config de l'IDE entre autre).... Autres gros problèmes majeurs, je me souviens comment ça pouvait être la galère à faire compiler 10 lignes de code toutes simples pris d'un tutorial utilisant divers librairies,...
    • - pattern, template, lorsque l'on est tombé dessus (en autodidacte on tombe sur les choses ). Bizarrement, ça n'a pas était la chose la plus compliquée à comprendre, seul bémol, la lourdeur de la syntaxe qui peut parfois poser problème.


    Pour résumer de ce que je me souviens, le plus compliqué était la manipulation des pointeurs/références et la compilation, l'édition de liens.

    Plus tard dans mes études, j'ai pu avoir des cours de C puis C++.
    J'avais trouvé les cours relativement bien compréhensibles, mais mon ressentie positif à ce sujet est surement biaisé programmant déjà depuis 5ans quand j'ai eu mes premiers cours.
    Ce que je peux dire, c'est que de la part de mes camarades de classe, les premières difficultés était de faire face aux "jargons" et notions trop souvent utiliser par les enseignants sans explication de ces derniers, rendant les phrases difficilement compréhensible même pour des notions très simples.

    Si non après les mêmes difficultés rencontrées par mes camarades de classe étaient surtout liée aux notions et manipulations des pointeurs/références, et la gestion dynamique de la mémoire.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 240
    Points : 636
    Points
    636
    Par défaut
    Perso je vois beaucoup qui disent que la difficulté vient du fait que le C et le C++ sont enseigné en même temps et insistent sur la différence entre ces deux langages.

    Erreur !

    La problème vient du fait qu'on ne fait pas assez la distinction entre algorithmie et architecture (matière qui se rapprocherait de la POO sans être de la POO notamment en étudiant les avantages qu'apporteraient d'autres paradigmes).
    Ces deux disciplines pourraient et devraient être enseigné presque indépendamment du langage qui ne servirait que de support. Cela dit, si il est évident que le C et le C++ se valent pour tout ce qui est algorithmie, le C++ est bien plus adapté pour ce qui est architecture.

    D'ailleurs il est possible d'apprendre l'une de ces deux matières (algo ou archi) sans apprendre l'autre. On aurait alors deux profils: l'un développeur spécialisé dans l'algo et l'autre ingénieur spécialisé dans l'archi. Sans placer l'un au dessus de l'autre, erreur souvent faite sur le marché. Un module qui tourne vite et consomme peu aura forcément une incidence sur le choix de l'architecture finale.

    Bien entendu l'idéal serait avoir une notion des deux domaines avec, pourquoi pas, un cours faisant la jonction entre les deux, du genre :"problématique d'un point de vue algorithme du choix de tel ou tel architecture".

  12. #32
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    Pour le sondage je dirais la qualité de l'enseignement, inutile de répéter ce qui a déjà été dit, c'est très juste.

    Néanmoins, j'aimerais ajouter une chose que je trouve importante et que j'ai souvent vu en étant qu'étudiant. Vous savez, quand on débute, le visuel c'est très important mais là je ne parle pas du visuel au niveau des langages mais au niveau des IDE. Quand on apprend le Java ou le C#, on le fait sur Eclipse/Netbeans et Visual Studio, pour le débutant, il y a d'une part, une certaine abstraction au niveau de la gestion du projet, puisqu'il va seulement se contenter de faire "Projet" > "Ajouter fichier" et d'autre part, quelques mécanismes pour le code comme le fameux "Generate Getters/Setters", d'Eclipse, l'auto-complétion, l'analyse lexicale et syntaxique à la volée, ... Quant au C++, je ne connais pas toutes les universités de la planète, mais bien qu'il existe des IDE pour le C++ dont Eclipse et VS, on préfère souvent travailler avec un éditeur de texte et un compilateur ou au mieux avec Codeblocks. Dans un cas comme ça, l'étudiant est livré à lui-même et la possibilité de faire des erreurs augmente considérablement s'il doit en plus de savoir gérer son code, savoir gérer son projet, ses headers, ses sources, les inclusions mutuelles, etc. Quand l'étudiant passe beaucoup de temps à gérer ces petites choses, ça le rebute forcément. Evidemment, je voudrais rappeler que je parle ici de débutants et de débutants qui commencent.

    D'un autre côté, l'apprentissage avec les IDE n'est pas sans mal, le fait est que j'ai toujours développé en Java avec Eclipse, et si aujourd'hui on me donnait 30 fichiers sources et qu'on me demandait de les compiler à la main, j'en serais incapable, même chose pour C#. Même chose pour les fonctions qui aident à coder, pour reprendre le "Generate Getters/Setters" d'Eclipse, si l'étudiant n'utilise que ça, quand on va lui demander de faire sans, il va sûrement réussir mais s'il n'a pas acquis la logique derrière, il va mettre plus de temps. Même chose encore pour l'auto-complétion, notre cerveau a trop tendance à déléguer la partie "je dois me rappeler de ces fonctions" à l'option de l'IDE, résultat : on maitrise moins bien la connaissance de son projet. Mais bon à ce niveau c'est plus un débat sur l'utilisation ou non d'un IDE, ce que je voulais dire à la base c'est que l'étudiant qui doit gérer le moins de chose sera plus concentré sur l'essentiel.

    J'ai bien envie de dire, aurait-on le même topic si on enseignait le Java et le C# sans IDE ? Ca risque de beaucoup changer les habitudes du "New project" > "Build & Run" de l'étudiant.
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  13. #33
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 832
    Points : 2 625
    Points
    2 625
    Par défaut
    Citation Envoyé par koala01 Voir le message
    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!!!!
    Jamais entendu parler de tout ça perso :/

    Bon, pour mon background:
    lycée: 2nd (n°1) => qbasic
    lycée: 2nd (n°2) => asm , C (dans cet ordre, sisi j'étais cinglé xD)
    lycée: 1ère => abandon de l'asm (bizarrement XD)
    lycée: Tlle => tentative d'apprendre C++. Echec. Impossible de comprendre avec ce satané livre ce qu'est une classe ( "le C++ pour les nuls". Je le recommande vivement a ceux qui veulent claquer du pognon dans une immondice bourrée de référence culturelles américaines et de fautes de français, qui mélange tous les concepts.). En tout cas, en C, j'en apprenais à mes profs d'électronique.
    BTS IRIS (info indus): C puis C with classes. Pas C++. Je refuse d'appeler ça du C++.

    Au sujet de ce fichu BTS, mis à part qu'ils m'ont dégoûté de la programmation et que j'ai pas touché une seule ligne pendant 1 an après, et mis a part le fait que mon niveau en programmation a ce moment m'empêche de juger objectivement, voici ce que j'en ai retenu:
    _ Utilisation de CString, QString. Oui. Qt et MFC, jamais STL. Qt qui réinvente la roue et complexifie la chaîne de compilation (de qui se moc t'on? ), MFC qui génère un code dégueu. Normal que les gens aient pas vraiment aimé C++. Des frameworks font des trucs moins durs à manier/comprendre quand même: wxWidgets par exemple, fltk peut-être.
    _ Le côté pointeurs m'a semblé correct dans leur enseignement. Bon, après, classe de gens qui venaient surtout d'électronique, donc qui savaient ce qu'est un processeur.
    _ Implémentation de liste chaînée, mais je trouve ça normal, après tout comprendre n'est pas un mal, surtout dans l'industrie. Mais jamais rien sur le template std::list.
    _ RIEN sur les template.
    _ du coup, RIEN sur la STL.
    _ en TP: 50% du temps a dessiner des IHM avec l'IDE, 25% du temps a utiliser les fonctions pour gérer les dessins d'ihm avec des fonctions spécifique au framework. 25% du temps a glander.


    Récemment, j'ai repris des études. J'ai eu des cours de JAVA. Le prof faisait très souvent des comparaisons avec le langage C. Il disait que C n'est pas modulaire. Que C n'est pas réutilisable. Quand je lui prouvait le contraire, à ce prof qui enseigne en fac, il se bloquait, persuadé de savoir tout mieux que tout le monde... Mouai. Il m'a même sorti, tenez-vous bien, qu'il n'y a pas besoin de distribuer les header pour distribuer une lib en C++ à destination d'autres dev. Eventuellement, avec les pch... mais je crois pas que ce soit standard, et c'est pas du tout portable. Et je doute qu'il sache même qu'ils existent ^^

    Je vais m'arrêter la parce que bon...
    En gros, l'enseignement que j'ai reçu en programmation était fait par des gens qui ne connaissent clairement pas le C++. Pour qui le C et le C++ sont la même chose. C with classes.

    Et je me rappelle d'une "news" qui disait que Linus disait que les dev C++ sont plus mauvais que les dev C. J'ai aussi été voir dans le code d'un jeu nommé flare. En C with classes.
    Mon impression, c'est que la plupart des gens voient le C++ comme du C avec des classes (je sais, je me répète), et du coup, le paradigme objet n'est pas utilisé correctement.

    Alors que justement, en C, la mémoire, c'est pénible. Qu'a cela ne tienne, encapsulons cette gestion avec des classes primitives et oublions la.
    C++ n'est pas bas niveau, C++ est sur tous les niveaux.
    Idem pour la syntaxe parfois compliquée. Ca s'encapsule tout ça.

    J'ai coutume de dire aux gens que C++ est à la fois plus simple et plus dur à utiliser que JAVA. Plus simple pour le dev utilisateur de bibliothèques, plus dur pour celui qui créé les bibliothèques.

    Alors ce qui le rend peu populaire par les débutants pour moi c'est ça:
    _ La qualité de l'enseignement du C++. Navré pour les profs qui me liront, c'est pas contre eux.
    _ mauvaise réputation, hérité du C. (chose qui manque dans le sondage)
    _ Pas assez de fonctionnalités dans le langage de base (IHM). Enfin, pas dans le langage, mais dans la SL, j'aimerai qu'on cesse de confondre langage et librairie bon sang. Les IHM, c'est pas des fonctionnalités du langage. Java n'a pas de mot clé pour créer une fenêtre que je sache.
    _ L'évolution trop lente du langage et le retard qu'il a pris. C'est indéniable. C++11 est plus accessible aux débutants, et apporte des choses que d'autres ont depuis longtemps, surtout au niveau des threads.
    _ Un système de compilation beaucoup trop complexe. Je l'ai mis, mais en fait, je commence a en douter ces derniers temps. Je pense que c'est plutôt make qui est complexe. Il me semble au fond assez naturel de dire ou sont les libs, leurs headers, et les fichiers à compiler... Le reste, ce sont surtout les options du... compilateur, pas du C++
    _ message d'erreurs cryptiques quand on utilise la STL. Y compris avec C++11 on a parfois des pages et des pages de messages d'erreurs, qui viennent d'une ligne après la fautive. Je ne suis pas encore un expert, alors je fais pas mal de fautes d'utilisation avec les template, et les messages d'erreurs sont franchement imbuvables. Pourtant ça fait quelques temps que je m'amuse avec eux. Bon, je m'étais fait à ceux de pré 2011 à force. Les nouveaux ne sont pas si lisibles que ça pour moi, surtout avec la pléthore de "candidats" qui sort. Trop verbeux, en somme.

    Honnêtement, le manque de garbage collector... Ca m'indiffère. Il n'y en a pas besoin pour moi. Au moins, C++11 n'est d'ailleurs pas fermé à ces choses, il me semble (je crois que le comité à laissé le choix aux dev de compilos).
    Gestion bas niveau de la mémoire, je vois juste que les programmes java, ça plante aussi avec des problème d'accès mémoire, donc ça me fait marrer (ahh eclipse, je t'aime ). Puis l'OO, ça permet d'encapsuler les trucs chiant a manier, qui du coup deviennent triviaux.
    Syntaxe trop complexe: pas pour le débutant, non. Mais forcément, il ne faut pas tout lui montrer. Genre volatile, je sais que ça existe, mais un débutant n'a pas besoin de s'en servir. A moins que les débutants touchent aux threads (version C++11 si je me goure pas) ? Le débutant, qu'il sache manier les classes, les types primitifs, const et les références, ce sera déjà pas mal. Une fois la maîtrise de ces concepts, passer aux pointeurs (sauf s'ils savent ce qu'est l'électronique, parce que du coup la gestion mémoire est moins dure a comprendre)
    Trop d'outils ou de bibliothèques externes => foutaise, depuis quand le choix est-il un problème? Au pire, y'a la méthode pile ou face quand on sait pas quoi prendre. De toute façon, la quantité d'outils externes n'est pas la faute au C++, mais à ses utilisateurs
    Des abstractions haut niveau trop complexes (template) => Parce que faire "std::list<int>" c'est trop compliqué pour définir une liste d'entiers? Faut qu'on m'explique. En plus, java fait pareil... sans la surcharge des opérateurs (et amha en plus moche du coup). Ah oui, JAVA a mis "Object" en parametre par défaut, ce qui permet de se passer de préciser le type. Je trouve ça a vomir moi, les trucs implicites. Vomitifs et générateurs d'erreurs.
    Le manque de portabilité du C++ => je veux bien qu'on m'explique... Qu'est-ce qui n'est pas portable?

  14. #34
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    [HS] Il faudra qu'on m'explique l’intérêt de mettre des -1 aux posts si l'on argumente pas derrière... [/HS]

  15. #35
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par psykokarl Voir le message
    Perso je vois beaucoup qui disent que la difficulté vient du fait que le C et le C++ sont enseigné en même temps et insistent sur la différence entre ces deux langages.

    Erreur !

    La problème vient du fait qu'on ne fait pas assez la distinction entre algorithmie et architecture (matière qui se rapprocherait de la POO sans être de la POO notamment en étudiant les avantages qu'apporteraient d'autres paradigmes).
    Ces deux disciplines pourraient et devraient être enseigné presque indépendamment du langage qui ne servirait que de support. Cela dit, si il est évident que le C et le C++ se valent pour tout ce qui est algorithmie, le C++ est bien plus adapté pour ce qui est architecture.

    D'ailleurs il est possible d'apprendre l'une de ces deux matières (algo ou archi) sans apprendre l'autre. On aurait alors deux profils: l'un développeur spécialisé dans l'algo et l'autre ingénieur spécialisé dans l'archi. Sans placer l'un au dessus de l'autre, erreur souvent faite sur le marché. Un module qui tourne vite et consomme peu aura forcément une incidence sur le choix de l'architecture finale.

    Bien entendu l'idéal serait avoir une notion des deux domaines avec, pourquoi pas, un cours faisant la jonction entre les deux, du genre :"problématique d'un point de vue algorithme du choix de tel ou tel architecture".
    Fondamentalement, je ne vois aucune difference entre l'algorithmie et l'architecture, si ce n'est l'echelle.

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Points : 18
    Points
    18
    Par défaut
    Je viens de finir ma première session avec un cours de Structure Interne des Ordinateurs (circuit logique, binaire/hexadécimal, assembleur) et un cours d'Introduction à la programmation (Python en guise de pseudo code, C par la suite). Dans la partie de cours sur le C, le prof a passé plus de deux semaines sur des pointeurs et il nous sortait des trucs impressionnant à voir pour des débutants où il fallait dire si c'était fonctionnel. C'était du genre : int R, x, *y, **w, ***z, t[]; suivit d'une dizaine de ligne d'échange de variable d'une place à l'autre, d'allocation dynamique de mémoire, etc.

    Le cours avec de l'assembleur était horrible mais m'a aidé à comprendre les pointeurs. Je n'ai pas encore vu de C++, mais si c'est les histoires de pointeurs qui rebutent le plus les débutants, je devrais m'amuser, moi qui ait trouvé ça intéressant.

    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 ?
    Je suis d'accord sur le fait qu'un cours ne devrait pas nécessairement être sur l'utilisation de librairies. Je sais que pour certains TP, les libraires de string.h était très approprié mais si nous les utilisions c'était un 0 en partant, tout ça parce qu'utiliser la librairie n'aide pas à apprendre à manipuler les variables, etc. Même, dans mon examen final de session, il fallait écrire sur papier une fonction de la librairie.

    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 n'ai pas encore pu en être témoins mais dans le programme où je suis inscrit, il y a un cours sur le C++, et un autre sur la programmation orienté objet. Et le premier est un prérequis de l'autre. C'est peut-être différent au Québec d'en France.


    Mais la faute en revient aussi en partie aux élèves! Indubitablement mordu de programmation (et d'informatique en général, je suis tombé dedans au collège), je m'attendais, en suivant un cursus informatique, à retrouver d'autres passionné(e)s. Et bien pas du tout, 95% des élèves baillent en amphi lorsqu'on leur parle de classe abstraite en C++, du fonctionnement d'un transistor en architecture, de l'organisation du noyau linux, pendant que les 5% restant s'extasie. J'ai souvent l'impression d'être le seul réellement passionnée par ce qu'on nous enseigne.
    Je dois dire que je partage ton impression. Quand je lisais les TPs que nous devions faire, je m'amusais comme un fou (programme de filtre à image en Python, programme d'encryptage RSA, générateur de mot mystère et programme de filtre de .wav en C.).

  17. #37
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 162
    Points : 301
    Points
    301
    Par défaut
    Ça fait maintenant un peu plus de 10 ans que j'ai quitté la fac, donc je ne sais pas comment cela se passe maintenant.
    Dans mon cursus, je n'ai jamais fait de C++ ou vraiment très peu (peut être une option l'utilisait comme langage d'illustration). Donc je ne peux pas juger de la qualité de l'apprentissage.
    Mais ce que j'ai apprécié dans ma formation (uniquement universitaire), c'est qu'on m'a toujours appris les mécanismes fondamentaux et à chaque fois avec des langages très peu utilisés (CAML, Pascal) ou démodé (Smalltalk). L'important c'était de comprendre toutes les notions fondatrices de l'informatique : qu'est ce qu'un compilateur, comment fonctionne un processeur, mémoire virtuelle, pointeur, tcp/ip... J'ai fait mon lot de programmes C en ligne de commande pour retirer les commentaires d'un fichier ou faire un petit client serveur.
    Bien sur que j'ai pesté contre les profs : je voulais faire du Java, des EJB, du COM sans même savoir ce que c'est.
    Aujourd'hui je comprends la portée de ce que j'ai appris. Oui j'avais des profs qui ont connus les débuts du FORTRAN et qui ne juraient que par Smalltalk 80 mais de connaitre pas mal de base me permet aujourd'hui d'être à l'aise quand j’apprends une nouvelle notion où un langage.
    De part mon métier je fais beaucoup de Java mais je développe en C++ pour des projets perso. Oui le C++ est une plaie par beaucoup d'aspects mais à partir du moment où on sait pourquoi le langage est tel qu'il est, il n'y a pas à le redouter.

  18. #38
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    J'ai eu envie de cocher toutes les réponses également, je ne l'ai pas fait car je me suis aperçu ces derniers temps que je ne connaissais pas ce langage, au final.

    J'ai (réellement) appris la programmation avec le C. Logique pour un étudiant en électronique et info industrielle. Et puis un beau jour, on a eu un cours de C++. Pardon : de C avec classes ! En réalité, ce cours était un cours de POO et le prof avait décidé d'utiliser le C++ pour montrer ce qu'est une classe. C'était pratique puisque ses élèves connaissaient le C et donc n'étaient pas perdus par la syntaxe.

    Ayant un bon niveau en C, connaissant le principe des classes, je pensais pouvoir écrire C/C++ sur mon CV, en tout bonne fois. Mais depuis quelques mois, je lis de temps en temps des sujets C++ sur Developpez.com et je ne comprends rien ! Mais rien de rien ! J'ai découvert il y a peu la STL et les vectors en faisant un code en Qt à la maison. Mais pourquoi on ne m'avait jamais parlé de ces vectors et de la STL ?? POURQUOI ???


    Pour aller au delà de l'enseignement, je pense que l'intérêt de C++ pour la plupart des gens est limité. C++ est comme C : un langage où tout (ou presque) est à la charge du développeur. Cela permet de faire des applications ultra personnalisables, optimisables, maitrisées. Le soucis pour moi est qu'on retrouve les problèmes du C : compilation parfois lourde, problème de portabilité, évolution relativement lente (comparé à Java ?).

    J'ai aussi l'impression que, comme tout est à faire, il n'y a du coup rien de tout fait, prêt à l'emploi. Comme je l'ai dit, je ne connais pas la STL et c'est peut-être qu'une impression, mais je ne dois pas être le seul à l'avoir.

    Je compare avec d'autres langages :
    1) J'ai utilisé Java au boulot, alors que je n'y connaissais rien. La puissance de la Javadoc et des milliers de classes incluses dans le JDK font que tu peux coder rapidement des applications relativement complexes, sans faire appel à des lib externes. Cela attire plus qu'un langage CIY (Code It Yourself ^^).
    2) J'apprends Python en ce moment et ce langage est simple et souple. J'aime la rigueur des langages compilés mais il est vraiment que pour faire des petites applications, un développeur amateur ou un pro souhaitant faire un outil perso, se tournera plus facilement vers Python que vers C++.


    Enfin, de ma courte expérience professionnelle, je pense qu'il est plus simple de dire à un mec "tiens, tu connais pas, mais tu vas faire du Java" que de lui dire la même chose avec C++. Java est à la mode, Java ça a l'air cool, Java c'est portable, nianianiania. J'ai travaillé sur des projets où personne ne maitrisait vraiment les technos utilisées (vive les SSII) alors on utilise des technologies "simples". On remplace des applications en C / C++ (certes rapides mais difficiles à maintenir) par des applications en Talend Open Studio (moins rapides mais beaucoup plus simples à prendre en main).



    Je ne vois pas C++ comme un langage à utiliser à tout va. Tu utilises ce langage quand tu sais pourquoi tu en as besoin. Pour cette raison, je ne vois pas C++ devenir un langage "grand public" que tout le monde aura envie d'apprendre.

  19. #39
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 240
    Points : 636
    Points
    636
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Fondamentalement, je ne vois aucune difference entre l'algorithmie et l'architecture, si ce n'est l'echelle.
    En effet fondamentalement c'est surtout une question d’échelle.
    La différence vient surtout de la manière d'aborder la programmation: plutôt "top-down" pour l'archi, "down-top" pour l'algo.

    L'articulation entre différents modules relève de l'architecture, la notion d'héritage, les interfaces, les templates. Il doit se soucier des contraintes métier et penser maintenance et évolution du code au delà de son scope, stratégie de diffusion et de traitement des messages d'erreur.

    Les problématiques de l’algorithmique sont plutôt du domaine de l'efficacité, de l'économie de la fiabilité. Penser modularité à ce niveau "parasite" le travail de développement, un algo dépasse rarement la centaine de ligne.
    Il a juste à ce soucier que les contraintes nécessaire au bon fonctionnement de de l'archi soient respecté, le traitement des erreurs au niveau de l'algo ou leur remonté si ce n'est pas possible

    Biensur, la communication entre les deux parties est essentielle.

  20. #40
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Août 2008
    Messages : 148
    Points : 232
    Points
    232
    Par défaut
    Beaucoup trop de choses à commenter dans les commentaires précédents aussi vais-je me contenter de répondre aux questions posées en donnant mon point de vue.

    - Ce qui doit évoluer dans l'enseignement : les enseignants
    - Un langage trop complexe : non, mais tout dépend du point de vue
    - Les développeurs seniors : Je n'en connaît pas suffisamment pour donner un avis objectif

    Pour étayer un peu le point sur l'enseignement :
    - Comment quelqu'un qui n'a jamais mis un pied dans une entreprise (sauf stage de 6 mois wouhouuuu) peut parler du monde du travail ?
    - Pourquoi considère-t-on qu'un prof qui connaît un langage peut tous les enseigner ?
    - L'apprentissage d'un langage ne se borne pas à sa syntaxe ou alors je peux écrire un roman juste en connaissant l'alphabet

    Voilà voilà voilà ... dans 2 ou 3 générations ça sera peut-être au point ...

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