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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage

    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
    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.

  2. #2
    Membre éprouvé
    Avatar de benjani13
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2010
    Messages
    616
    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 : 616
    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é.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    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...

  4. #4
    Membre très actif

    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
    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.

  5. #5
    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
    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".

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    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.

  7. #7
    Membre chevronné Avatar de I_believe_in_code
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 219
    Par défaut
    Citation Envoyé par Kaamui Voir le message
    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.
    Voila un point de vue original qui me parait, au fond, tres juste.

    Sinon, je suis pour un enseignement elitiste, de celui qui met d'entree de jeu les etudiants peu motives ou ecerveles dans la situation tres claire du "tu t'adaptes ou tu revois tes ambitions a la baisse". A ce titre, il me semble que C++ premier langage est un tres bon choix, a condition d'en faire faire pendant un semestre entier, et de ne pas en cacher les difficultes.

    Et puis voir un langage fonctionnel comme deuxieme langage, faire ecrire de vrais applis avec aux eleves (histoire de tordre le coup a des idees recues repandues meme chez les pros). Que les cerveaux inadaptes soient degoutes le plus tot possible et qu'ils s'orientent vers un metier plus reposant.

  8. #8
    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
    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.

  9. #9
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    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).

  10. #10
    Membre confirmé
    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
    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 ...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Je me souviens lorsque j'ai commencé le C++, je trouvais ce langage très compliqué.

    En grande partie car pour bien le manier, il est nécessaire d'avoir une vision d'ensemble de l'informatique. C'est à dire de la gestion de la mémoire mais aussi le développement orienté objet.

    Après lorsqu'on commence les templates, on est vraiment perdu surtout lorsqu'on a une erreur de compilation avec un message incompréhensible.

    De plus lorsque j'étais étudiant en informatique, je n'ai connu dans mon cursus qu'un seul professeur assez doué pour l'enseigner car il avait pris le temps de lire les ouvrages de référence et il utilisait le langage quotidiennement.

    Pour moi les plus gros reproches qu'on peut faire au C++ :

    - Écriture cabalistique ( le C# est beaucoup plus clair exemple : & / ref et les templates)

    - La STL trop pauvre en fonctionnalités et dur à utiliser (foncteur, prédicat)

    - Aucun framework officiel ( on a surtout du bas niveau )

    - Aucun IDE qui gère le c++ aussi bien qu'éclipse en Java ou visual studio pour le C#. Pourquoi les IDE C++ ne permettent pas une bonne auto complétion ? De pouvoir modifier un header quand on ajoute une fonction dans le cpp ou l'inverse ? L'écriture de la documentation de manière intégré ?

    - Trop de choses sont implicites et nécessites d'être connu (exemple : constructeur implicite à 1 paramètre )

    Il manque une option de compilation pour expliciter toutes les opérations implicite. Par exemple, on lui donnerait un cpp avec du code, il en génère un nouveau ou on peut voir l'appel des operators ou les cast faits. Ca permettrait de mieux comprendre le code qui est généré et les comportements parfois étranges.

    - La norme qui laisse trop de largesse aux éditeurs de compilateur. Exemple : Les fonctions inlines où chaque compilateur à sa politique sur le est-ce qu'on inline ou non la fonction. Ou encore la taille en octet des types qui n'est pas imposés ce qui entraîne la redéfinition dans chaque API de type comme UINT32, INT16 etc ...

    - Il y a aussi un lourd passif d'API indigestes (les API Microsoft ^^) dur à utiliser avec des redéfinition de Type dans tous les sens.

    - Des ressources surtout en anglais.

    Le dernier point est la compatibilité avec le C qui donne de mauvaises habitudes aux débutants (utilisation de char*, de atoi, malloc etc ....)

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 836
    Par défaut
    Juste pour les UINT & co, je t'encourage à lire le fichier stdint.h

    http://en.wikipedia.org/wiki/Stdint.h#stdint.h

    Bien sûr, vu qu'il fait partie de la norme C99 (C++ aussi l'intègre normalement), tous les compilateurs ne le prennent pas en charge... Notamment visual C++.

    Par contre, peut-on taper sur un langage quand un fichu compilateur refuse de la respecter?
    Parce que dans ce cas, ça reviens a dire que HTML 4 c'est de la merde, puis que microsoft refusais de la respecter pendant pas mal de temps.

    Bon, je crois aussi avoir plus ou moins compris que certaines choses étaient abusivement difficiles à implémenter par rapport à l'utilité dans cette norme, mais sur le coup des entiers, c'est pas comme si c'était difficile.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Citation Envoyé par Freem Voir le message

    http://en.wikipedia.org/wiki/Stdint.h#stdint.h

    Bien sûr, vu qu'il fait partie de la norme C99 (C++ aussi l'intègre normalement), tous les compilateurs ne le prennent pas en charge... Notamment visual C++.

    Merci pour l'information, je ne connaissais pas les int_fastN_t etc ...
    Ma phrase faisait surtout référence à ma lecture de "Le langage C++ (édition 3.5)" de B.Stroustrup où dans une partie il explique comment la norme définie la taille des types les un par rapport aux autres en fonction de la longueur d'un char.

    Extrait tiré du livre : 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

    J'ai trouvé cette définition bien laxiste car donnant pour un même code, des résultats pouvant être différent selon le compilateur.

    Après je trouve qu'être revenu sur un point aussi important, c'est un peu un aveux d'échec.

    Un autre reproche que je ferais au C++ c'est que dans le but de garantir une rétro-compatibilité du code, on garde beaucoup de mot clef qui ne devrait plus être utilisé dans du C++ moderne.

    La norme C++ ? Avec les problèmes de comportements indéfinis dont tu parles plus loin, certes. Mais c'est ce qui permet de faire du C++ un peu partout, même sur des micro-contrôleurs.

    ...

    1) Difficile d'accuser l'équipe d'avoir fait un IDE trop efficace pour Java ^^
    2) Langage propriétaire, IDE dédié, ce n'est pas la même approche.
    Quand je parlais de framework, je pensais plus à un ensemble de bibliothèque plutôt haut niveau (poco, boost) officiel (un peu comme en java ou c#) pour offrir des fonctionnalités de bases pour un développement moderne (IHM, XML, réseau etc ...)

    Concernant les langages, je n'accuse en rien l'équipe d'Eclipse qui à fait un super travail mais en tant que développeur C++, je trouve qu'il serait bien que les Guru du C++ se lancent dans un projet d'IDE tout aussi performant et efficace.

  14. #14
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Je n'ai pas voté, et ne voterai pas, ne trouvant pas le c++ si difficile que ça (une fois les messages d'erreur assimilés, on apprend vite à vaite un " | less" ; même si ce n'est pas particulièrement orienté débutant).

    Je rebondirai surtout sur la notion de portabilité.

    En effet, le c++ possède un compilateur qui permet de partager un même exécutable entre différentes plate-formes -- tant que la "VM" est installée. Ce qui en fait l'égal de Java si on ne regarde que ce point.

    Je nommerai clang++.

    Et je ne pense pas qu'un binaire clang++ soit plus lourd qu'un binaire jvm !

    Et, pour le monsieur du dessus, quelles fonctionnalités attends-tu d'un IDE ? Personnellement, j'ai vim, il est personnalisé comme je le préfère, et je n'ai rien de plus à lui demander ... Donc ?

  15. #15
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Javadoc, c'est comme doxygen ou comm latex: ce n'est qu'un outil qui impose une certaine syntaxe pour des commentaires pour qu'il soit pris en compte lors de leur regroupement au sein d'un format "structuré"
    Je suis désolé, en fait je ne parlais de la documentation que tu peux générer avec ton code, façon Doxygen, mais ce ça : http://docs.oracle.com/javase/6/docs/api/ Pardon

    Et tu as de quoi...

    Ce sont d'ailleurs exactement les même raisons qui font que les dev C++ ne sont pas contents, de manière générale, de l'enseignement qui en est fait
    Du coup, hier soir en rentrant chez moi, j'ai jeté un oeil sur les principaux éléments de la STL et je me suis dit "ah...... dommage pour moi". Ca m'a remotivé à m'intéresser à ce langage.


    Quand je parlais de framework, je pensais plus à un ensemble de bibliothèque plutôt haut niveau (poco, boost) officiel (un peu comme en java ou c#) pour offrir des fonctionnalités de bases pour un développement moderne (IHM, XML, réseau etc ...)
    Ok, je vois ce que tu veux dire. Il y a Qt comme framework important mais il est vrai qu'il n'a rien d'officiel...


    Personnellement, j'ai vim, il est personnalisé comme je le préfère, et je n'ai rien de plus à lui demander
    As-tu déjà utilisé Eclipse pour Java ?

  16. #16
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    En effet, on sens que tu n'utilise pas la STL.
    Je suis en train de refaire un logiciel de dessin vectoriel open source sur mon temps libre, en C++. (autoREALM pour les connaisseurs, et le mot refaire serait idéalement complété par "from scratch", "traduction du delphi", et "tentative de conception soignée".)
    En utilisant la STL, la fonction la plus grosse pèse 40 lignes, je n'ai fait, (et ne ferait probablement), aucun algo genre algo de tri.
    Je n'ai aucune gestion de la mémoire, les seuls pointeurs que j'utilise sont la a des fins de polymorphisme. Encapsulé dans ces très confortable unique_ptr d'ailleurs (et la lecture de GotW 102 me fait penser qu'il va falloir que je corrige quelques lignes).
    Il n'y a aucun tableau statique.

    Pour le dessin à l'écran, je fais comme tout le monde, j'utilise des librairies: openGL pour le rendu, et un framework d'IHM (wxWidgets dans ce cas précis) pour les fenêtres. Pour ce qui concerne les fichiers de config, je fais mumuse avec boost::filesystem.
    Je suis extrêmement loin du CIY comme tu dis. Limite je ne refais quasiment rien.
    Quand je lis ça, je suis dégoûté et encore plus énervé comme les cours bidons que j'ai eu en école. Je m'aperçois au fil des mes lectures sur Developpez, et ton commentaire particulièrement, que je passe à côté de à côté de ce langage à cause de cette méconnaissance ! Oui, monsieur, je suis pas content

    Pour la portabilité, je parle surtout pour ma connaissance du C ; et si C++ en hérite, il doit lui aussi poser quelques problèmes. Plus que dire "C(++) n'est pas portable", je dirais que "C(++) n'est pas immédiatement portable et la portabilité exige de la rigueur". Il y a aussi des dépendances vis à vis des compilateurs, de part les zones non définies par la norme. Je reste toutefois d'accord avec toi, il est portable (ce n'est pas de l'Objective C non plus), je faisais l'abus "code portable = exécutable portable (sans recompilation)".

    Pour les IHM, tout à fait d'accord avec toi !

    La Javadoc pas un argument recevable ? On peut discuter effectivement de sa qualité et son caractère unique qui en ferait un gros plus par rapport à d'autres langages. Effectivement, la doc de Qt est bien faite ; je travaille pas mal avec la documentation de Python qui est bien elle aussi. Mais dés que je repasse sur du C, je me farcis les page de man, bien moins marrantes pour naviguer et explorer les fonctionnalités.



    - Aucun framework officiel ( on a surtout du bas niveau )
    La norme C++ ? Avec les problèmes de comportements indéfinis dont tu parles plus loin, certes. Mais c'est ce qui permet de faire du C++ un peu partout, même sur des micro-contrôleurs.

    éclipse en Java ou visual studio pour le C#
    1) Difficile d'accuser l'équipe d'avoir fait un IDE trop efficace pour Java ^^
    2) Langage propriétaire, IDE dédié, ce n'est pas la même approche.

  17. #17
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Quand je lis ça, je suis dégoûté et encore plus énervé comme les cours bidons que j'ai eu en école. Je m'aperçois au fil des mes lectures sur Developpez, et ton commentaire particulièrement, que je passe à côté de à côté de ce langage à cause de cette méconnaissance ! Oui, monsieur, je suis pas content
    Et tu as de quoi...

    Ce sont d'ailleurs exactement les même raisons qui font que les dev C++ ne sont pas contents, de manière générale, de l'enseignement qui en est fait
    Pour la portabilité, je parle surtout pour ma connaissance du C ; et si C++ en hérite, il doit lui aussi poser quelques problèmes. Plus que dire "C(++) n'est pas portable", je dirais que "C(++) n'est pas immédiatement portable et la portabilité exige de la rigueur". Il y a aussi des dépendances vis à vis des compilateurs, de part les zones non définies par la norme. Je reste toutefois d'accord avec toi, il est portable (ce n'est pas de l'Objective C non plus), je faisais l'abus "code portable = exécutable portable (sans recompilation)".
    A ce niveau là, aucun code dans aucun langage ne serait totalement portable

    En effet, si java peut s'utiliser sans avoir à etre recompilé pour une machine donnée, c'est parce qu'il y a la ... machinve virtuelle entre le langage et le processeur et qu'elle, elle a été compilée pour un processeur donné
    La Javadoc pas un argument recevable ? On peut discuter effectivement de sa qualité et son caractère unique qui en ferait un gros plus par rapport à d'autres langages. Effectivement, la doc de Qt est bien faite ; je travaille pas mal avec la documentation de Python qui est bien elle aussi. Mais dés que je repasse sur du C, je me farcis les page de man, bien moins marrantes pour naviguer et explorer les fonctionnalités.
    Attention!!!

    Javadoc, c'est comme doxygen ou comm latex: ce n'est qu'un outil qui impose une certaine syntaxe pour des commentaires pour qu'il soit pris en compte lors de leur regroupement au sein d'un format "structuré"

    On peut, effectivement, reprocher à C de n'avoir jamais évolué vers une prise en compte du format HTML dans la génération de sa documentation, mais, encore une fois, C n'est pas C++, et c'est un reproche que l'on ne doit pas faire peser sur le langage en lui-même, mais bien sur l'équipe (de manière générale) qui maintient le suppport du langage dans une collection d'outil donnée
    1) Difficile d'accuser l'équipe d'avoir fait un IDE trop efficace pour Java ^^
    2) Langage propriétaire, IDE dédié, ce n'est pas la même approche.
    Je crois qu'on peut, effectivement, reprocher à C++ le fait qu'il est très difficile de mettre un système efficace d'auto complétion ou de refactoring...

    Le fait est que je ne connais pas énormément de langages qui aillent aussi loin que C++ dans le support du multi paradigme:

    Java, C# ou Ada sont exclusivement OO, ce qui limite fatalement la complexité au niveau du parsing alors que le fait que C++ intègre finalement très fortement le paradigme impératif, le paradigme OO et le paradigme générique rend, effectivement, le parsing beaucoup plus compliqué à effectuer.

    Cependant, certains outils font franchement pas mal (je pense, entre autres, à Visual Assit, sous visual studio) en terme de parsing et d'aide à la refactorisation

    Et j'ai envie de dire que ces outils sont bel et bien la preuve qu'il est possible de mettre des outils de refactorisation corrects au point pour C++... Ne manque peut etre que l'envie (ou la compétence ) des gens qui créent des outils pour C++
    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

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Par défaut Et Qt vous connaissez ?
    Juste pour réagier aux différents messages, j'ai vu les critiques :
    - pas de framework haut niveau
    - documentation peu fournie ou peu accessible
    - problèmes de portabilité
    - syntaxe trop complexe par rapport a Java ou C#
    - pas d'IDE comparable à Eclipse avec autocomplétion et code-refactoring
    etc....

    Je me demandais, si vous étiez tous au courant qu'il existe un super Framework C++, nommé Qt (prononcer kioute, par pitié, pas kiouti ou kuté), qui est accompagné de son IDE dédié, QtCreator, qui possède :
    - un interface sympa et moderne
    - un moteur d'autocomplétion puissant, associé à la documentation dynamique en overlay
    - d'une doc du langage mais aussi des outils, très bien faite (pour moi la meilleure doc d'API que j'ai pu voir à ce jour)
    - un éditeur d'interface graphique (comme le fait VB.net par exemple)
    - intégration de pleni d'outils : git, svn, gdb, valgrind, ...
    - dans le même SDk, un outil de gestion des traductions (QtLinguist)

    De son coté, le langage Qt (je l'appelle langage car il ajoute de paradigmes et des mots clés inexistants en C++ standard, comme les foreach, les signal, les slots, rapprochant énormement de Java) apporte un API claire, très bien structurée et hyper complete (XML, SQL, Http, FTp, socks, GUI, FS, scripts etc)

    De plus, dernierement le projet a été doté d'un langage totalement nouveau, basé sur les technologies qui ont fait le succés de Qt (les meta objets, les signals/slots, etc) et les rend accessible depuis un langage déclaratif très dynamique, adjoint au Javascript, j'ai nommé QML.

    A noter aussi que Qt passe très bientôt en version 5.0, avec des performances et une portabilité très accrue, ainsi que des centaines de nouvelles classes/fonctions.

    Certaines personne devraient doc sortir du terrain C++ STD ou VSC++ avant de comparer le développement en C et celui en C++ qui n'ont plus grand chose a voir aujourd'hui, et avec Qt, C++ possède un framework de très grande qualité qui n'a rien a envie à Java ou CC# (bien au contraire selon moi, les garbage collector et autre types dynamiques ont des abbération inventées pour pouvoir développer sans réfléchir, ce qui n'est franchement pas une bonne chose)

    A bon entendeur !

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Citation Envoyé par TheBootroo Voir le message
    Juste pour réagier aux différents messages,
    Je me demandais, si vous étiez tous au courant qu'il existe un super Framework C++, nommé Qt (prononcer kioute, par pitié, pas kiouti ou kuté)
    Qt != C++ et ça n'a rien d'officiel comme par exemple la STL.
    Qt existe aussi pour d'autre langage comme python.

  20. #20
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour à tous et merci de vos interventions

    A plusieurs reprises, le terme "officiel" a été utilisé. J'ai un peu de mal à comprendre l'idée. Ok, vous voulez dire par là qu'il y a un comité qui décide de ce qu'il y aura dans le C++ et un autre comité pour ce qu'il y aura dans Qt (idem avec les autres "gros" frameworks : Boost, WPF, .net,wxWidget, etc.)

    Mais du mal à comprendre pourquoi ça serait un défaut ? Pensez vous que la qualité des ces frameworks est moins bonne que ceux qui sont intégrés directement dans un langage ?

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