Précédent   Forum du club des développeurs et IT Pro > Général Développement > Langages de programmation
Langages de programmation Forum général sur les langages de programmation, sur la POO, opinions, choix, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/12/2007, 19h16   #121
publicStaticVoidMain
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 509
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
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 : 488
Points : 488
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 !
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 20h04   #122
alex_pi
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 !


Citation:
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 à 20h14.
  Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 20h13   #123
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 979
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 979
Points : 18 179
Points : 18 179
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

Citation:
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 20h22   #124
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 647
Points : 5 647
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.

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

Citation:
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 21h06   #125
alex_pi
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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...
  Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 21h21   #126
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 979
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 979
Points : 18 179
Points : 18 179
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 21h35   #127
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 647
Points : 5 647
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 03h05   #128
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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.
Citation:
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 :
Citation:
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
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 03h18   #129
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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.
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 13h50   #130
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 647
Points : 5 647
Citation:
Sur l'idee globale en ce qui concerne le C : c'est tres tres proche
de la machine.
La nous somme d'accord.


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

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

Citation:
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++.

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

Citation:
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 13h57   #131
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 979
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 979
Points : 18 179
Points : 18 179
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 14h08   #132
Thierry Chappuis
Expert Confirmé Sénior
 
Avatar de Thierry Chappuis
 
Homme Thierry Chappuis
Enseignant Chercheur
Inscription : mai 2005
Messages : 3 481
Détails du profil
Informations personnelles :
Nom : Homme Thierry Chappuis
Âge : 36
Localisation : Suisse

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

Informations forums :
Inscription : mai 2005
Messages : 3 481
Points : 5 303
Points : 5 303
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++

+
Thierry Chappuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h33   #133
Mat.M
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 453
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 : 4 453
Points : 5 874
Points : 5 874
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
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h36   #134
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 979
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 979
Points : 18 179
Points : 18 179
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 18h25   #135
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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 !!
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 18h35   #136
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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 ^_^
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 20h28   #137
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 647
Points : 5 647
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

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

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

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

Citation:
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 20h37   #138
Jean-Marc.Bourguet
Expert Confirmé Sénior

 
Inscription : novembre 2005
Messages : 4 970
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4 970
Points : 5 647
Points : 5 647
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.
Jean-Marc.Bourguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 21h30   #139
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 979
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

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

Informations forums :
Inscription : décembre 2005
Messages : 9 979
Points : 18 179
Points : 18 179
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
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 22h46   #140
Garulfo
Inactif
 
Inscription : juillet 2005
Messages : 1 958
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juillet 2005
Messages : 1 958
Points : 2 209
Points : 2 209
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.
Garulfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h03.


 
 
 
 
Partenaires

Hébergement Web