A corto :
CITATION
Les langages de haut niveau permettent de développer rapidement sans passer par les phases de conception et d'architecture des applications (plus ou moins simple)
Je crois qu'on ne voit pas ça de la même façon

: en apprenant à programmer avec un langage de bas niveau, on passe son temps à régler des problèmes de programmation et d'implémentation. En programmant avec des langages de haut-niveau, on se repose sur des classes, et on a l'esprit libre pour penser architecture 8).
CITATION
car il oblige à architecturer vos idées
Je n'ai jamais dit qu'un langage de haut niveau dispensait d'architecturer. Au contraire !

Encore une fois, mon propos (résumé) est le suivant :
"Un langage de haut-niveau débarasse le programmeur de tout un tas de tâches superflues qui peuvent l'induire en erreur, et lui permet de se concentrer sur l'architecture et sur la résolution des problèmes".
CITATION
Et puis c'est en forgeant que l'on devient forgeron.
Si vous vous contentez de faire des opinels, vous ne ferez jamais une épée.
:!: Tu aurais pu mettre [TROLL] autour de ce commentaire, ça m'aurait évité d'y répondre...
[TROLL]
Parce qu'au fond, tu reproches au programmeur HB++ de se reposer sur une librairie de classes et d'ignorer ce qu'il y a en dessous ? Tu lui reproches de se la jouer facile avec un langage qui fait tout pour lui ? Tu lui reproches de fermer les yeux sur les mystérieux mystères de PalmOS et de tout ce qu'il peut nous apporter, et nous apprendre ?
Alors va au bout ! Ne te repose pas sur cette librairie de fonctions qu'est PalmOS ! Ne te la joue pas facile avec les commodités du C ! Ouvre les yeux sur les mystères de la machine ! Code en assembleur et adresse directement le hardware !
Si vous vous contentez de faire des épées, vous ne ferez jamais de sabres lasers !
[/TROLL]
A Patrice :
CITATION
Parce qu'apprendre l'algorithmique c'est très bien mais ce n'est pas de la programmation, c'est juste une branche des mathématiques. Et que la "vraie" programmation elle doit concilier les mathématiques avec le concret des machines qui sont à notre disposition. Les deux sont indispensables au développeur.
Alors ne crois-tu pas que les langages de programmation doivent se rapprocher au plus près des mathématiques et d'un modèle formel de la machine ? Entre un LISP ou un ML et C, lequel est le plus proche des mathématiques ?
Tu sembles souligner une dichotomie entre, d'une part, le concret de la machine, et les mathématiques - ce qui selon toi justifie l'enseignement de C par rapport aux langages de haut-niveau, puisqu'il ne faut pas délaisser le côté machine.
Il me semble que dès lors qu'un programme est écrit dans un langage pour lequel est diponsible un modèle d'exécution formel (Les familles de LISP ou ML en ont, la plupart des langages sans pointeurs peuvent en avoir, bien qu'ils sont complexes et rarement efficacement utilisables), le gap entre sa sémantique ("les mathématiques") et l'implémentation ("le concret de la machine") peut être facilement comblé. En témoignent les performances excellentes des compilateurs LISP ou ML.
Il est vrai que sur ce point deux approches sont possibles :
- Le programmeur écrit ce que l'ordinateur doit faire. Auquel cas, le langage de programmation doit permettre d'aller dans "le concret de la machine", et il est bon que le programmeur connaisse ce concret.
- Le programmeur
décrit ce que l'ordinateur doit faire. Auquel cas, le langage de programmation doit permettre au programmeur de s'exprimer à un très haut niveau, en utilisant le plus d'abstractions possibles, de manière à ce que le compilateur puisse au mieux comprendre ce qu'il doit produire.
Je pense que ta conception de la programmation correspond à la première approche, et que la mienne correspond à la seconde.
Je pense également (mais c'est mon humble avis), que l'avenir de la programmation est dans la deuxième approche, et que dans un monde :P idéal :P, un programmeur ne doit pas avoir à se soucier de ce qui se passe dans la machine.
D'un point de vue purement pédagogique, crois-tu que devoir se soucier de tous les détails d'implémentation (par exemple, comment représenter un graphe, des ensembles) permet aux étudiants d'avoir une pensée "mathématique" ? J'en doute.
Quand un algorithme tient en dix lignes de Scheme (ou de Caml, ou de Haskell), en utilisant des fonctions de haut niveau, des ensembles, des vecteurs, et quand son équivalent en C en fait quatre-vingt et utilise à tout bout de champ des boucles, des structures et des champs de bits pour représenter les ensembles, lequel des deux est le meilleur support à la réflexion de l'étudiant ?
CITATION
Apprendre la programmation, c'est aussi apprendre ça.
Je ne suis pas d'accord sur deux points.
- D'abord, nous parlons d'apprendre l'algorithmique, pas la programmation, et tu as toi même souligné la différence. Mon expérience m'a appris qu'il est souhaitable de dissocier les deux, de manière à ce que l'étudiant ne confonde pas l'un pour l'autre, et que l'un ne soit pas un obstacle à l'apprentissage de l'autre.
J'ai deux profils en tête.
* Profil 1 : l'étudiant excellent en mathématique, très fin lorsqu'il s'agit de raisonner sur des graphes, de démontrer des propriétés sur un algorithme, etc. mais nul en programmation, à qui on est malheureusement obligé de mettre des mauvaises notes parce qu'il n'arrive pas à formuler ses idées en C.
* Profil 2 : l'étudiant qui confond "améliorer un algorithme" avec "améliorer une implémentation". Ceux là sont les "gourous" qui optimisent comme des malades une implémentation C (parfois avec de l'assembleur) d'un algorithme pourri.
- Ensuite, ta volonté d'embrasser dans une seule pensée le fonctionnement entier de la machine, du microprocesseur à ton programme, est certes louable, mais selon moi dépassée. Un intellectuel de la renaissance pouvait prétendre tout saisir des mathématiques de son époque, un mathématicien d'aujourd'hui doit se spécialiser. De même, jusque dans les années 1990, le champs de l'informatique était suffisament restreint pour qu'une même personne puisse se faire une idée complète du fonctionnement de sa machine, depuis le programme écrit dans un langage de haut niveau jusqu'à l'architecture du micro-processeur. Désormais, le fonctionnement des processeurs est suffisament complexe (contraintes de cache, d'interlocking, de pipelining, de canaux d'exécution parallèles) pour qu'on accepte que seuls les concepteurs de compilateurs doivent s'en soucier. Je pense que nous sommes entrés dans une époque où il n'est plus raisonnable pour un programmeur non système de se soucier des détails d'implémentation. Tous les programmes seront bientôt écrits dans des langages aux librairies de fonctions extrêmement riches et évoluées, et l'implémentation de ces librairies sera affaire de spécialistes.
Je vais prendre un autre exemple "pédagogie"... Les étudiants apprennent la gestion des fichiers, les structures de données, l'implémentation des algorithmes de tri, de recherche, etc. Ensuite, on leur dit : "C'est toute cette théorie qui a fait naître les moteurs de bases de données - qui bien entendu ont bénéficiés de milliers d'amélioration et de recherche très spécialisée". Et avec notre bénédiciton, l'étudiant peut par la suite utiliser les libs mySQL dans ses projets.
Je ne vois pas pourquoi il serait interdit d'apprendre à un étudiant le fonctionnement de l'allocation mémoire, de lui expliquer comment fonctionne un garbage collector, et de lui dire avec notre bénédiction, "Tu peux maintenant utiliser Boehm ou un langage avec garbage-collection et allocation automatique".
A moins que tu ne vois une différence fondamentale entre les deux ?
A SteC:
CITATION
Ces derniers temps, la plate-forme passait dans le rouge car une seule requête mal écrite (parcourant toute la hiérarchie pour un objet non indexé) consommait énormément de CPU. Il suffit de seulement une vingtaine de requêtes de ce type pour faire 'tomber' des quadri-pro équipé de 4 Go de RAM Choqué
Tu le dis toi même : le problème ne vient pas du langage de programmation utilisé mais d'une mauvaise implémentation / d'un mauvais choix de structures de données.
Un mauvais programmeur C ou un mauvais programmeur d'un langage de haut niveau aurait pu faire la même erreur. Cela ne plaide pas en la faveur du C, mais soutient juste qu'il est nécessaire de renforcer l'enseignement de l'algorithmique par rapport à celui de la programmation.

Je ne vais pas m'y risquer, mais on pourrait même aller jusqu'à dire que C est coupable, puisqu'il détourne les étudiants de la compréhension des algorithmes.
CITATION
Beaucoup de programme en C fonctionne bien dans 95% des cas et plantent lamentablement lors d'une suite d'actions non prévues lors du développement et des tests ! Même en faisant attention et en ayant une grande expérience, le risque de plantage lié à la memoire est bien supérieur en C qu'en Basic.
Ce qui est assez amusant, c'est qu'il est maintenant parfaitement bien accepté de ne plus laisser au programmeur le choix des instructions machines pour son programme, et de déléguer ce choix au logiciel (le compilateur). Par contre, la communauté est très divisée sur la question de la l'allocation mémoire : beaucoup pensent qu'elle doit être encore laissée au programmeur, et que la déléguer au logiciel (le garbage collector) est une abberration. Alors que la perte de performances n'est pas significative, et que les gains en fiabilité sont importants.
Quelqu'un a-t-il une explication à cela ?
CITATION
Rien a faire de savoir que tel ou tel truc a change entre PalmOS 3.5 et 4.1.2, je veux que ca marche!
Oui, C fait abstraction des différences de CPU entre machines, mais pas des différences d'OS - c'est un autre avantage des langages de haut-niveau, puisqu'ils encapsulent dans leurs librairies de classes les différences entre OS ou versions de l'OS.