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

Langages de programmation Discussion :

C ou C++ ? Lequel choisir ?


Sujet :

Langages de programmation

  1. #121
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par alex_pi Voir le message
    Y a-t-il quelque chose dans ce que je raconte qui te semble faux ou mensonger ?
    Ce qui me gene dans ton affirmation, c'est dire que le C
    Citation Envoyé par alex_pi Voir le message
    est d'une exceptionnelle trivialité, et qu'il est donc très facile d'écrire un compilo pour chaque nouvelle architecture. Vu que tout est à la charge du programmeur du logiciel, celui qui écrit le compilo n'a pas particulièrement à réfléchir, et écrire un compilo C sans trop d'optimisation se fait très rapidement. C'est quand même un langage qui date des années 70. Disons que depuis, la théorie des langages de programmation a fait quelque petit progrès.
    Et creer un langage proche de la machine n'est trivial !

  2. #122
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Ce qui me gene dans ton affirmation, c'est dire que le C [est d'une exceptionnelle trivialité]
    Tente de compiler du C d'un coté et du Haskell de l'autre, tu comprendras ce que j'entends par "exceptionnelle trivialité".

    Les instructions en C c'est quoi ? Affecter une valeur à une variable, passer à l'instruction suivante, faire une boucle, une fois de temps à autre faire un appel de fonction, utiliser directement les adresses des éléments et faire des appels système pour gérer manuellement la mémoire. Bref, c'est de l'assembleur avec une syntaxe de "haut niveau" (c'est à dire indépendant de la machine et où tu ne fais pas de distinction entre une valeure déjà dans un registre et celle dans un emplacement mémoire), et un très vague système de type.

    Du Haskell c'est quoi ? Des fonctions de premier type (c'est à dire utilisable comme des valeurs "normales"), des évaluations retardés, des monades, un système de type complexe et j'en passe.

    Il est quand même assez évident que compiler du C est beaucoup plus simple que de compiler n'importe quel langage fonctionnel ou même simplement objet. Donc effectivement, dès qu'une nouvelle architecture arrive, un compilo C est livré avec, parce que c'est simple ! Alors qu'il faut attendre bien plus longtemps pour avoir d'autres langages (sauf ceux dont la machine virtuelle est écrite en C...)

    Encore une fois, le C a été inventé dans les année 70, pour écrire un système d'exploitation. C'est donc un langage qui a 40 ans, et qui était spécifiquement fait pour du bas niveau. Donc qu'on l'utilise pour faire du bas niveau (ie. un OS), pas de problème ! Qu'on l'utilise pour le reste, je trouve ça plus que dommage.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Dire que le C n'est pas un langage de programmation mais un assembleur est faux.
    Oui, ok, c'est une légère provocation. Mais je persiste à penser que ce langage relève plus de l'assembleur que de ce qu'on appelle de nos jours un langage de programmation. Pour reprendre ce que je dis un post plus haut, un programme en C reviens à une succession d'instruction bas niveau telle que l'affectation d'une valeur à une variable, une boucle (il n'y a même pas de boucle for à proprement parler, mais une syntaxe différente de boucle while...), la manipulation d'une adresse mémoire, etc. La principale différence avec un assembleur est qu'on ne se préoccupe pas de faire la distinction entre les variables en mémoire et celles dans des registres. La belle affaire !


    Dire que l'unique raison du succes du C est sa facilite d'implementation est aussi faux.
    De son succès en dehors du domaine pour lequel il a été créé serait plus judicieux alors
    Dernière modification par gorgonite ; 03/12/2007 à 21h14.

  3. #123
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par alex_pi Voir le message
    Tente de compiler du C d'un coté et du Haskell de l'autre, tu comprendras ce que j'entends par "exceptionnelle trivialité".
    Je ne suis pas d'accord !!!
    J'ai déjà fait un compilateur C et un compilateur CoreML, et la complexité est quand même du côté du C... et ce n'est pas le mécanisme d'évaluation paresseuse qui augmentera tellement la complexité

    pour ce qui est des autres fonctionnalités, si tu étudies un papier de Xavier Leroy, tu verras qu'il y a des méthodes simples pour passer d'un langage avec opérations "complexes", à un langage bien plus simple de manière automatique


    Citation Envoyé par alex_pi Voir le message
    Les instructions en C c'est quoi ? Affecter une valeur à une variable, passer à l'instruction suivante, faire une boucle, une fois de temps à autre faire un appel de fonction, utiliser directement les adresses des éléments et faire des appels système pour gérer manuellement la mémoire.
    ce qui va t'obliger à traiter énormement de cas différents, car il n'y a pas de fortes similitudes

    Citation Envoyé par alex_pi Voir le message
    Du Haskell c'est quoi ? Des fonctions de premier type (c'est à dire utilisable comme des valeurs "normales"), des évaluations retardés, des monades, un système de type complexe et j'en passe.
    étant donné que tout est du type déclarations ou évaluations... ça va "assez" vite

    Il est quand même assez évident que compiler du C est beaucoup plus simple que de compiler n'importe quel langage fonctionnel ou même simplement objet.

    perso, je te conseillerais d'essayer d'en faire en vrai avant t'exprimer si catégoriquement sur le sujet
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #124
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Ce qui me gene dans ton affirmation, c'est dire que le C


    Et creer un langage proche de la machine n'est trivial !
    Si on ne cherche pas les optimisations, C est un langage relativement simple à implémenter (voir par exemple http://www.de.ioccc.org/2001/bellard.c). Oui, il y a plus simple même en cherchant dans les langages de l'époque (Forth par exemple; Forth serait d'ailleurs beaucoup plus répandu si le facteur simplicité d'implémentation était le principal), mais je suis globalement d'accord avec Alex_Pi.

    Citation Envoyé par alex_pi Voir le message
    Oui, ok, c'est une légère provocation. Mais je persiste à penser que ce langage relève plus de l'assembleur que de ce qu'on appelle de nos jours un langage de programmation.
    Les assembleurs restent des langages de programmation, même de nos jours.

    La principale différence avec un assembleur est qu'on ne se préoccupe pas de faire la distinction entre les variables en mémoire et celles dans des registres. La belle affaire !
    Tu as écrit beaucoup de programme en assembleur? Ce n'est pas la première différence qui me vient à l'esprit. Et une des choses qui feront que je n'arriverais jamais à considérer le C comme un assembleur, c'est ce qu'il ne permet pas.

    De son succès en dehors du domaine pour lequel il a été créé serait plus judicieux alors
    Il y avait d'autres langages plus simples, se contenter de cet aspect parce que ces langages sont plus ou moins oubliés n'est pas un raisonnement valide. Il faut considérer les autres facteurs.

    Son lien avec Unix est vraissemblablement un facteur plus important que sa simplicité d'implémentation. Le fait que ce soit un langage de bas niveau a eu aussi (et a toujours) un effet macho indéniable. Puis au moment où il s'est imposé (disons les années 80), quels étaient les concurrents sérieux? Après, il a profité pas mal de sa base installée.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #125
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    Je ne suis pas d'accord !!!
    J'ai déjà fait un compilateur C et un compilateur CoreML, et la complexité est quand même du côté du C...
    Nan mais bien sûr si d'un coté tu as un langage simplifié au maximum, à la spécification claire et limpide (CoreML) et que de l'autre tu as un langage où à chaque étape tu dois lire les 20 pages correspondante de la norme, le compilo CoreML est peut être plus rapide à écrire. Et compiler un langage fonctionnel, effectivement, on sait faire ça depuis très longtemps (CF Lisp). Le problème est de faire un compilo produisant un code *raisonnable*.

    Citation Envoyé par gorgonite Voir le message
    et ce n'est pas le mécanisme d'évaluation paresseuse qui augmentera tellement la complexité
    Encore une fois, ça dépend ce que l'on veut comme qualité de code en sortie de compilo. Du C compilé naïvement, le résultat est raisonnable. Du ML compilé naïvement, faut se tirer une balle. Et franchement, l'évaluation paresseuse, c'est galère au niveau de l'implémentation. Il faut garder pleins de pointeurs dans tous les sens pour tout remettre à jour.

    Citation Envoyé par gorgonite Voir le message
    pour ce qui est des autres fonctionnalités, si tu étudies un papier de Xavier Leroy, tu verras qu'il y a des méthodes simples pour passer d'un langage avec opérations "complexes", à un langage bien plus simple de manière automatique
    Compiler vers une machine virtuelle avec instructions adaptés aux langages fonctionnels est une chose. Passer de ça à du langage machine (qui est profondément impératif), c'est une autre paire de manches. Rajouter un GC et compagnie, ça augmente encore la difficulté...

    Citation Envoyé par gorgonite Voir le message
    perso, je te conseillerais d'essayer d'en faire en vrai avant t'exprimer si catégoriquement sur le sujet
    J'ai quelques bases de compilation, je te rassure...

  6. #126
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Son lien avec Unix est vraissemblablement un facteur plus important que sa simplicité d'implémentation. Le fait que ce soit un langage de bas niveau a eu aussi (et a toujours) un effet macho indéniable. Puis au moment où il s'est imposé (disons les années 80), quels étaient les concurrents sérieux? Après, il a profité pas mal de sa base installée.


    turbo pascal était selon moi un concurrent tout à fait acceptable...

    Citation Envoyé par alex_pi Voir le message
    Nan mais bien sûr si d'un coté tu as un langage simplifié au maximum, à la spécification claire et limpide (CoreML) et que de l'autre tu as un langage où à chaque étape tu dois lire les 20 pages correspondante de la norme, le compilo CoreML est peut être plus rapide à écrire. Et compiler un langage fonctionnel, effectivement, on sait faire ça depuis très longtemps (CF Lisp). Le problème est de faire un compilo produisant un code *raisonnable*.

    tu ne parles plus des difficultés liés aux langages, mais plutôt de la verbosité des spécifications... mais il faut aussi garder à l'esprit la considérable différence qu'il y a entre une description académique (et souvent surtout conceptuelle), avec une description détaillée dans le cadre d'une normalisation, ce que nombre d'universitaires regardent avec dédain et qui explique souvent le manque d'intérêt de l'industrie pour leurs travaux (s'il faut être bac +7 pour comprendre comment utiliser le langage )

    Citation Envoyé par alex_pi Voir le message
    Encore une fois, ça dépend ce que l'on veut comme qualité de code en sortie de compilo. Du C compilé naïvement, le résultat est raisonnable. Du ML compilé naïvement, faut se tirer une balle. Et franchement, l'évaluation paresseuse, c'est galère au niveau de l'implémentation. Il faut garder pleins de pointeurs dans tous les sens pour tout remettre à jour.

    pas tellement... dans le cas d'un langage à la ML avec évaluation paresseuse, c'est pas si compliqué si l'on a bien analysé le problème, et qu'on a une structure de code adaptée

    Citation Envoyé par alex_pi Voir le message
    Compiler vers une machine virtuelle avec instructions adaptés aux langages fonctionnels est une chose. Passer de ça à du langage machine (qui est profondément impératif), c'est une autre paire de manches. Rajouter un GC et compagnie, ça augmente encore la difficulté...

    tout à fait d'accord, mais une fois passé sous forme SSA, avec quelques algos classiques et des heuristiques connues, on peut produire du bon code (je l'avais fait en asm mips)


    Citation Envoyé par alex_pi Voir le message
    J'ai quelques bases de compilation, je te rassure...
    je me doute bien que tu as des bases, mais la question que je me demandais était de savoir la complexité de ton plus gros projet de compilation



    EDIT : en revanche, on s'éloigne du sujet initial... ce serait bien de recadrer le débat, donc concluez vite vos appartés
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #127
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    turbo pascal était selon moi un concurrent tout à fait acceptable...
    Le gros problème de Pascal, c'est qu'il n'y avait pas deux implémentations compatibles parce qu'il fallait nécessairement des extensions au langage décrit par Wirth pour être utilisable en pratique (en particulier pour la compilation séparée) et que tout le monde a fait les siennes. La norme est venue bien trop tard pour régler ça.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #128
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    C'est quoi un langage de haut niveau? J'arrive plus ou moins a comparer deux langages quant a leur niveau d'abstraction, mais j'ai toujours du mal avec des absolus comme ca.
    Il n'y a pas d'absolu dans ce que je disais. Je voulais, et j'aurais du, dire « les langages actuellement considéré comme de haut niveau » Mea culpa.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Sur quoi precisement?
    Sur l'idée globale en ce qui concerne le C : c'est très très proche de la machine.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Mais non. C n'est pas facile a apprendre principalement parce qu'il faut au contraire connaitre tres bien ce qui est specifie et ce qui ne l'est pas; et une bonne partie de ce qui ne l'est pas reste volontairement non specifie pour permettre une portabilite a travers une grande variete d'architectures sans compromettre la performance. Ca plus un certain nombre d'idiosyncraties qui n'ont guere qu'une explication historique. Et les tableaux est clairement pour moi dans cette derniere classe (on y voit clairement une forme intermediaire entre BCPL et un langage type statiquement -- pas mal d'erreurs communements acceptees en ce qui concerne les tableaux du C sont vraies en BCPL).
    En quoi cela contredit-il ce que j'ai dit ? Tu commences par « mais non » donc je me demande.
    Parce que soit, tout ce que tu énumères est aussi une des difficultés, mais je t'assure que ce n'est pas là où mes étudiants ont le plus de mal. As-tu souvent enseigné le C à des étudiants qui n'ont jamais fait d'informatique ?

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Une des choses qui me font me demander avec quoi tu es d'accord.

    Perso, je choisi le C++ sans hesitation et je crois bien connaitre les deux.
    On va dire que je me suis mal exprimé : globalement, je suis d'accord avec Alex_pi et Jedai sur leurs remarques sur ce qu'est le C. Mais je préfère le C au C++ quand même. Si je veux du haut niveau, je prends autre chose que le C++ qui n'est qu'une couche sur le C (et à mon goût très mal faite vis-à-vis de ce qui existe maintenant). Je préfèrerais Scheme, Smalltalk, Pascal, ou même Java (c'est pour dire -_-)

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Tu peux m'expliquer la difference (j'avais tendance a considerer ces termes comme synonymes dans un contexte informatique, avec une tendance puriste semblant preferer implanter sans raisons autre que vouloir s'eloigner de l'anglais) -- et me donner des references (les deux usages ressortant du jargon informaticien pour moi; la derniere fois que j'ai chercher dans un dictionnaire generaliste -- juste maintenant et le dictionnaire est le TLF -- implémenter etait inexistant et aucune acception d'implanter n'avait que des acceptions eloignee du domaine)?
    Tu avais raison de vouloir t'éloigner de l'anglais. Le terme « implémenter » a moins de 10 ans dans le vocabulaire officiel français (même si ça fait longtemps que nous l'utilisons tous). Le terme implanter signifie « mettre en place un système » et n'est pas du tout réserver à l'informatique car on peut « implanter une usine dans une région » ou « implanter un processus de calcul de feuille d'impôt ». Le terme « implémenter » par contre est directement tiré de l'anglais avec la subtilité citée plutôt : « passer du concept à la réalisation ». En français, il est plus ou moins réservé à l'informatique. En anglais, il s'utilise pour tout projet en ingénierie qui demande un passage des plans (concepts) à la réalisation. Cependant si l'objet est physique, je pense que beaucoup d'anglophones préfèrent « implanter » à ce moment. Donc, grosso modo, « implanter » à plus une notion de passage vers le réel tangible, tandis qu'« implémenter » note plus une réalisation dans l'abstrait. En effet, le programme n'est pas physique mais reste éthéré d'une certaine manière.

    Deux références intéressantes :
    Le grand dictionnaire terminologique de l'OQLF. C'est certes québecois, mais il se trouve que nous avons l'énorme avantage de graviter au centre d'un monde qui manipule les deux langues. Les traductions doivent donc être prompt et juste, et je dois dire que l'OQLF fait un bon travail de ce côté là. Les termes sont généralement utilisés par les scientifiques des domaines concernés.
    Implanter : Mettre en place un logiciel ou un programme dans un ordinateur, en effectuant les adaptations nécessaires à leur fonctionnement optimal dans des conditions spécifiques.
    Implémenter : Réaliser la phase finale d'élaboration d'un système informatique, afin de le rendre fonctionnel.
    Termium (malheureusement avec abonnement payant) est un autre outil merveilleux. Il référence en effet, l'utilisation dans la littérature des différents termes pour pouvoir les comparer au contexte. Exemple :
    Implémenter : Effectuer les choix techniques et les actions qui permettent de passer d'une idée, d'un principe ou d'une spécification à un produit matériel ou logiciel ou à un système opérationnel.
    (source: Commission spécialisée de terminologie et de néologie de l'informatique et des composants électroniques, Paris).
    Un autre terme utilisable pour « implémenter » est « mettre en œuvre. »

    J'espère avoir été clair

  9. #129
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Je viens de relire la question du premier post... juste pour être sur...

    La question était de savoir quel langage pour commencer entre C et C++... je réitère donc : le C.

    Le C++ est un calvaire en général (entre autre chose) du fait de son caractère hybride.

  10. #130
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Sur l'idee globale en ce qui concerne le C : c'est tres tres proche
    de la machine.
    La nous somme d'accord.


    En quoi cela contredit-il ce que j'ai dit ? Tu commences par \" mais
    non " donc je me demande. Parce que soit, tout ce que tu enumeres est
    aussi une des difficultes, mais je t'assure que ce n'est pas la ou mes
    etudiants ont le plus de mal. As-tu souvent enseigne le C a des etudiants
    qui n'ont jamais fait d'informatique ?
    Non. Par contre j'ai passe pas mal de temps a enseigner de l'assembleur et
    la conception de systemes numeriques. Et je passe une partie de mon temps
    a corriger des fausses conceptions au sujet du C, ce qui fait que je
    connais bien ce qui pose probleme apres les cours -- et donc
    vraissemblablement pendant parce qu'une bonne partie de ca aurait du etre
    connue apres des cours corrects. A noter que je preferais enseigner
    l'assembleur ou la conception de systemes numeriques au C, sans hesitation.

    On va dire que je me suis mal exprime : globalement, je suis
    d'accord avec Alex_pi et Jedai sur leurs remarques sur ce qu'est le C.
    Je crois que tout le monde est plus ou moins d'accord la dessus. Je
    conteste la qualification d'assembleur, parce qu'il manque des choses au C.
    Et naturellement je differe sur l'importance accordee a differents facteurs
    dans sa popularite.

    Mais je prefere le C au C++ quand meme. Si je veux du haut niveau,
    je prends autre chose que le C++ qui n'est qu'une couche sur le C (et a mon
    gout tres mal faite vis-a-vis de ce qui existe maintenant).
    Dire que le C++ n'est qu'une couche sur le C est tellement reducteur que
    c'est le signe soit d'un troll, soit d'une meconnaissance profonde du C++.

    Je prefererais Scheme, Smalltalk, Pascal, ou meme Java (c'est pour
    dire -_-)
    Scheme, Smalltalk sont des langages au typage dynamique. J'ai du mal a
    comparer des langages aussi fondamentalement different dans l'approche en
    excluant l'interet meme de l'approche.

    Pascal est un langage mort. Il en reste Delphi qui est bien trop lie a une
    plateforme pour etre seulement un candidat pour ce que je fais. Si
    seulement tu avais ecrit Ada...

    Si j'ai a choisir entre le C et le C++ pour enseigner la programmation,
    c'est le C++ que je choisi sans hesitation parce qu'il permet une meilleure
    separation entre niveaux d'abstraction.

    Deux references interessantes...
    Interessant oui. Mais plus normatives que descriptives si j'en crois
    l'usage autour de moi.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #131
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Si j'ai a choisir entre le C et le C++ pour enseigner la programmation,
    c'est le C++ que je choisi sans hesitation parce qu'il permet une meilleure
    separation entre niveaux d'abstraction.


    pour infos, dans mon ancienne école, ils ont (depuis 2 ans) décidé de prendre un sous-ensemble du C++ pour enseigner leur premier cours de programmation, au lieu du C autrefois utilisé

    en gros, les élèves font du C, mais avec la droit d'utiliser les conteneurs stl, les itérateurs, etc ; il paraîtrait que ça les largue moins vite
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  12. #132
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 508
    Points
    5 508
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    Mais je préfère le C au C++ quand même. Si je veux du haut niveau, je prends autre chose que le C++ qui n'est qu'une couche sur le C (et à mon goût très mal faite vis-à-vis de ce qui existe maintenant). Je préfèrerais Scheme, Smalltalk, Pascal, ou même Java (c'est pour dire -_-)
    Le temps de C-with-classes est révolu. Le C++ actuel ne se limite plus à une surcouche du langage C.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #133
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 347
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 347
    Points : 20 347
    Points
    20 347
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    pour infos, dans mon ancienne école, ils ont (depuis 2 ans) décidé de prendre un sous-ensemble du C++ pour enseigner leur premier cours de programmation, au lieu du C autrefois utilisé

    en gros, les élèves font du C, mais avec la droit d'utiliser les conteneurs stl, les itérateurs, etc ; il paraîtrait que ça les largue moins vite
    c'est une excellente démarche

  14. #134
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    c'est une excellente démarche


    le hic, c'est qu'en 2A, il y a un cours de prog system sous unix (en C bien sur), et qu'ils sont tous la ramasse avec les malloc et les pointeurs (alors que new n'est pas si différent), et ne savent pas construire leurs conteneurs (même une liste est devenue un exploit !!!)
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  15. #135
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Dire que le C++ n'est qu'une couche sur le C est tellement reducteur que
    c'est le signe soit d'un troll, soit d'une meconnaissance profonde du C++.
    Certes ça a quand même changé.
    Mais historiquement c'est vrai -_-
    Menfinbon si tu préfères me considérer comme un troll libre à toi.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Scheme, Smalltalk sont des langages au typage dynamique. J'ai du mal a
    comparer des langages aussi fondamentalement different dans l'approche en
    excluant l'interet meme de l'approche.

    Pascal est un langage mort. Il en reste Delphi qui est bien trop lie a une
    plateforme pour etre seulement un candidat pour ce que je fais. Si
    seulement tu avais ecrit Ada...
    Ah oui!! Ada aussi ^_^ Je préfèrerais Ada à C++. Je l'avais même proposé en cours de premier année à la place de C++... mais il faut faire plaisir au entreprise. En fait à peu près tout sauf le C++ me plairait. J'avais juste cité les premiers qui me venaient en tête.

    Mais bon Le fait que Pascal soit un langage qui n'est plus utilisé ou que Scheme soit un langage à typage dynamique n'enlève rien dans son enseignment comme premier langage de programmation. Je pense que tu n'as pas la même vision d'un premier cours que moi. Car si ça peut faire plaisir à des étudiants de voir un langage utilisé en industrie, d'un point de vue pédagogique ça n'a aucun intérêt.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    [...]
    Si j'ai a choisir entre le C et le C++ pour enseigner la programmation,
    c'est le C++ que je choisi sans hesitation parce qu'il permet une meilleure
    separation entre niveaux d'abstraction.
    Mais il y a ce côté hybride. Encore une fois, tous les jours ou presque, chaque année j'enseigne le C++ depuis 6 ans et je suis confronté au question des étudiants. Donc tu peux penser autant que tu veux que je ne connais rien sur le C++ et que je suis une tarte, ou, accepter que j'ai une certaine expérience pertinente dans son enseignement. Dans un premier cours, il y a bien des choses intéressantes du C++ que tu ne peux pas voir parce que tu n'en es pas rendu là. À moins de laisser derrière toi 75% des étudiants. Et c'est dans ce cadre où effectivement le C est plus intéressant que le C++. Enseigner l'assembleur, je connais aussi. Et la problématique est complètement différente.

    En même temps, j'enseigne les bases de programmation avec Scheme en cours d'été en accéléré, et les questions des étudiants ne portent plus sur le côté technique, mais bien sur un niveau d'abstraction supérieur. Sais-tu que la philosophie d'enseignement du MIT est d'enseigner seulement le Scheme pour apprendre les concepts, puis laissez les étudiants apprendre les autres langages comme des grands. Le Scheme a été choisi en première année parce que sa syntaxe est extrêmement simple et qu'il permet de montrer les concepts rapidement sans perdre du temps dans des détails du langage qui ne servent à rien.

    Maintenant j'ai surtout l'impression que tu ne me donnes aucun crédit et me prends pour un idiot. C'est très présomptueux de ta part. Je vais donc laisser ce « dialogue » avec toi ici si tu le veux bien. Joyeux Noël mon cher !!

  16. #136
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    le hic, c'est qu'en 2A, il y a un cours de prog system sous unix (en C bien sur), et qu'ils sont tous la ramasse avec les malloc et les pointeurs (alors que new n'est pas si différent), et ne savent pas construire leurs conteneurs (même une liste est devenue un exploit !!!)
    Dans ce cas là c'est le programme qui est a critiqué. Je ne louerais pas notre programme a nous, il y a bien des choses que je n'aime pas. Mais ce n'est pas ce problème qu'on a.

    N'oublis pas cependant qu'il est beaucoup plus facile de dire ce qui ne va pas dans un cours que de réussir à en monter un qui fonctionne dans le cadre d'un programme universitaire complet. Car mes collègues en France, en Allemagne en Angleterre ou ailleurs dans le Canada ne l'ont toujours pas trouvé je pense. En tout cas, ils ne me l'ont pas fait savoir dans ce cas ^_^

  17. #137
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    Menfinbon si tu préfères me considérer comme un
    troll libre à toi.
    Tu prends une position excessive et tu t'offusques quand on en prend une
    similaire? Ca m'arrive aussi d'écrire des choses pour faire réagir

    Mais bon Le fait que Pascal soit un langage qui n'est plus utilisé
    ou que Scheme soit un langage à typage dynamique n'enlève rien dans son
    enseignment comme premier langage de programmation. Je pense que tu n'as
    pas la même vision d'un premier cours que moi. Car si ça peut faire plaisir
    à des étudiants de voir un langage utilisé en industrie, d'un point de vue
    pédagogique ça n'a aucun intérêt.
    J'avais pris la remarque pour plus générale qu'elle l'était et si tu
    restais dans le cadre d'enseignement, je la comprends mieux. Quant à ma
    vision sur ce qu'il faut dans un cursus d'enseignement de la programmation,
    elle est beaucoup plus nuancee que tu n'as l'air de le penser -- cette
    discussion est essentiellement entre le C ou C++ pour cet objectif. Voir
    par exemple http://www.developpez.net/forums/sho...d.php?t=154919 ou
    http://www.developpez.net/forums/showthread.php?t=82573 mais je suis sur de
    pouvoir trouver des exemples ailleurs.

    Dans un premier cours, il y a bien des choses intéressantes du C++
    que tu ne peux pas voir parce que tu n'en es pas rendu là. À moins de
    laisser derrière toi 75% des étudiants. Et c'est dans ce cadre où
    effectivement le C est plus intéressant que le C++.
    Pourquoi? L'objectif d'un premier cours n'est pas d'apprendre le langage
    au complet -- je ne le tenterais ni avec Ada, ni avec C++ -- mais
    d'utiliser un sous-ensemble pour apprendre la programmation. Et dans ce
    cadre, ça ne me semble pas compliqué de trouver un sous-ensemble de C++
    plus facile à enseigner dans un ordre logique qu'utiliser le C.

    Sais-tu que la philosophie d'enseignement du MIT est d'enseigner
    seulement le Scheme pour apprendre les concepts, puis laissez les étudiants
    apprendre les autres langages comme des grands.
    Oui.

    Maintenant j'ai surtout l'impression que tu ne me donnes aucun
    crédit et me prends pour un idiot.
    J'ai pas assez de temps pour discutter avec ceux que je considère comme
    idiots.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #138
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    le hic, c'est qu'en 2A, il y a un cours de prog system sous unix (en C bien sur), et qu'ils sont tous la ramasse avec les malloc et les pointeurs (alors que new n'est pas si différent), et ne savent pas construire leurs conteneurs (même une liste est devenue un exploit !!!)
    On dirait que le premier cours servait aussi à des choses qui n'ont plus été considérée comme des objectifs dans le deuxième. Ca ressemble plus à un manque de coordination qu'à une critique sur l'approche même.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  19. #139
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    On dirait que le premier cours servait aussi à des choses qui n'ont plus été considérée comme des objectifs dans le deuxième. Ca ressemble plus à un manque de coordination qu'à une critique sur l'approche même.

    en fait ce second cours n'a pas été réformé... et donc considérait que les bases du C était acquises. d'ailleurs, il semblerait qu'ils aient réformé le cours de 2A pour être plus homogène
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  20. #140
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Tu prends une position excessive et tu t'offusques quand on en prend une
    similaire? Ca m'arrive aussi d'écrire des choses pour faire réagir
    [...]
    J'ai pas assez de temps pour discutter avec ceux que je considère comme
    idiots.
    Alors je vais revoir mon jugement.
    Bonne fête quand même (on a pas de smiley du père noël et ça c'est un manque messieurs les responsables.)

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'avais pris la remarque pour plus générale qu'elle l'était et si tu
    restais dans le cadre d'enseignement, je la comprends mieux.
    [...]
    Pourquoi? L'objectif d'un premier cours n'est pas d'apprendre le langage
    au complet -- je ne le tenterais ni avec Ada, ni avec C++ -- mais
    d'utiliser un sous-ensemble pour apprendre la programmation. Et dans ce
    cadre, ça ne me semble pas compliqué de trouver un sous-ensemble de C++
    plus facile à enseigner dans un ordre logique qu'utiliser le C.
    J'avais compris la question de celui qui a créé le fil comme : quel est le meilleur langage pour apprendre (et comprendre) la programmation ? Donc je me suis placé dans une perspective enseignement.

    En dehors de cette perspective, et pour des gens qui sont déjà de bon programmeur, le C++ est un langage qui offre une souplesse rarement atteinte. Mais cette souplesse est rarement un avantage lorsqu'on parle à des débutants. De fait, il faut se fixer une limite (problème de temps) surtout que normalement, premier cours de programmation équivaut à premier cours de génie logiciel (analyse de problème et conception). Il n'y a jamais le temps nécessaire pour voir complètement ce qu'offre un langage dans un cours. Ceci d'ailleurs est logique... sinon le langage est bien peu riche. Souvent ce qui se passe, c'est que le programme s'établit en prenant un sous-ensemble du langage qui vise certains paradigmes. On commence souvent avec du procédurale qui est plus « naturel » puisque hérité d'une pensée mathématique très pratiquée par les étudiantEs (enfin espérons :mg
    Faire du C++ en le limitant aux procédures, c'est pas très beau et certains objets apparaissent quand même. C'est génant pédagogiquement d'expliquer l'écriture « f.getline() » ou « s.c_str() ». On sent que les étudiants les plus borderline (pardon pour l'anglicisme) se sentent mal à l'aise et ne comprennent pas ce qu'on fait. On peut leur dire « laisser faire, on vous expliquera plus tard » mais c'est pas très pédagogique non plus. Donc tant qu'à faire du C++ amoindri à la procédure avec des dérives vers l'objet quand il le faut, il vaut mieux faire du vrai bon C et s'en tenir à ça. Au cours suivant de fournir les outils (analyse/conception et implémentation) du paradigme OO. Si on fait correctement du C (avec des types enregistrements bien faits, des pointeurs etc.) il n'y a pas de problème majeur pour apprendre le C++ selon moi. Hélas, ici même nous ne faisons pas ça pour des problèmes de stage dès la première année.

    Quand on sait qu'en plus nous imposons des contraintes à la Pascal pour garder une certaine discipline sur le code, on se demande pourquoi du C++. En tout cas, les étudiants se le demandent par la suite d'après leur feedback. Ce genre de réflexion sur la souplesse de C++, m'impose le même raisonnement avec Python qui est langage formidable pour qui sait déjà structurer sa pensée et travailler correctement. J'ai pointé plusieurs fois une des souplesses du langage qui est un calvaire pour des débutants en programmation.

    Bien sûr si on se place directement dans un contexte industriel, le problème est franchement différent. Le C++ n'a que peu de concurrent en fait. Peut être Java pour son utilisation soutenue, ou Ada (dans les domaines dans lesquelles je travaille particulièrement). Mais le couteau suisse du C++ est un atout formidable.

Discussions similaires

  1. VARCHAR & CHAR - comment savoir lequel choisir !?
    Par Thierry8 dans le forum Requêtes
    Réponses: 15
    Dernier message: 18/12/2005, 21h54
  2. Lequel choisir???
    Par t_om84 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/10/2004, 15h02
  3. Curseur et lock : Les différence & lequel choisir
    Par BilTCD dans le forum Access
    Réponses: 2
    Dernier message: 22/10/2004, 15h03
  4. [FEDORA] Lequel choisir entre Fedora i386 et x86 pour un xeon?
    Par Oberon dans le forum RedHat / CentOS / Fedora
    Réponses: 7
    Dernier message: 13/07/2004, 15h52
  5. [Conseil] Glut vs SDL, lequel choisir
    Par Mathieu.J dans le forum GLUT
    Réponses: 15
    Dernier message: 08/06/2004, 09h47

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