Le terme théorie est effectivement peut être mal choisi, mais je crois que le terme "conceptualisation" n'est pas plus adapté car... trop restrictif.
Une grosse part de ce que je plaide que les débutants apprenne tient, effectivement, de concepts, mais cela va néanmoins un peu plus loin dans le sens où il me semble intéressant qu'il connaissent aussi une ou plusieurs manière de représenter un algorithme:
Je ne parle pas du flow chart, qui n'est pas adapté à la programmation structurée, si ce n'est pour l'ASM, ni du pseudo code car je suis effectivement d'accord avec le fait que, si c'est pour écrire du "faux code", autant en écrire tout de suite du vrai
Mais je parle en revanche du nassi-schneiderman, malgré tout le mal que certains peuvent en penser ou du Jackson qui est particulièrement intéressant lorsqu'il s'agit de "déblayer le terrain" pour une gestion de ruptures, par exemple.
Le tout sans oublier la "règle de base" pour la récursivité : "toujours tester le cas de base"
Je peux t'assurer que la mise au point d'un algorithme cohérent avant de se lancer sur le clavier n'est
jamais une perte de temps:
A partir du moment où tu utilise "la bonne méthode" (j'aime particulièrement le nassi-schneiderman, parce qu'il permet de représenter l'ensemble des concepts utilisés en programmation strucutrée séquentielle
) pour le représenter et que tu as déjà vérifié qu'il était correct (en "jouant" à te faire "aussi bête qu'un processeur"), je peux te garantir:
- que la traduction en code source est automatique (j'ai même un projet en cours qui tend à permettre à l'ordinateur de générer du code source automatiquement sur base d'une logique introduite par l'utilisateur )
- que la première compilation réussie (comprend: après avoir viré les inévitables fautes d'attention) permettra d'obtenir le résultat attendu.
Tu gagnera donc énormément de temps à l'étape qui t'en fait classiquement perdre le plus: le débuggage, et la phase de tests unitaires se transformera en "pure formalité" dans le sens où elle ne te servira plus qu'à vérifier que tous les aspects ont été pris en compte
Ca, c'est pour la partie "séquentielle" des différents langages.
Lorsque l'on aborde un langage OO, il me semble opportun d'y ajouter quelque concepts (composition Vs agrégation, héritage, polymorphisme, substituabilité, etc), quelques règles / principes ou loi (parmis lesquels Demeter et Liskov) et, si possible, une "méthode quelconque" permettant de représenter les relations entre les différents types d'objet (hein
, quoi
j'ai parlé d'UML
)
Le fait est que, tôt ou tard, il seront confrontés au besoin de "garder une trace" de leurs algorithme ou des relations qui existent entre leurs classes, voire, même, qu'il devront pouvoir... communiquer sur le sujet avec d'autres personnes (soit parce que ces personnes leur transmettent justement des algorithme ou des diagrammes de classes, soit pour permettre aux gens de "savoir ce qui est fait")
Mais comme cet ensemble de "règles" (le mot est un peu fort, mais je n'en trouve pas d'autres
) ne pourra que les aider à assurer une qualité supplémentaire dans leurs développements futurs, autant les leur donner "le plus tôt possible"
Nous sommes bien d'accord sur le fait que cette prose ne vaut que pour ceux qui envisagent d'apprendre... un langage de programmation, indépendamment des autres disciplines envisageables, pour lesquels on trouve aussi une série de "choses" qu'il est intéressant de connaitre indépendamment de la technologie utilisée
Mais, avant de l'implémenter, il faut... le créer (ou le copier)...
Je te renvoies à ma prose qui suit une réponse à white_tentacle il y a quelques messages: il ne faut pas donner plus de pouvoir au langage ou au compilateur qu'ils n'en ont réellement
La théorie des langages et de la compilation est, certes très intéressante (du moins pour ceux qu'elle intéresse), mais, effectivement, totalement inutile pour qui n'utilisera jamais bison et flex (ou outils similaires)
Il ne sera jamais mauvais d'expliquer les différentes étapes que suit un compilateur, mais cela rentre beaucoup plus dans le cadre de... l'apprentissage du langage et, quoi qu'il en soit, ca rentre souvent dans la catégorie de "la culture générale, pour mémoire"
Je le répète, je ne dit absolument pas qu'il faut assommer l'étudiant avec l'ensemble de la théorie se rapportant de près ou de loin (et surtout de loin, d'ailleurs
) aux langages de programmation: cela deviendrait rapidement barbant et n'aurait aucun intérêt.
Je l'ai déjà dit, il ne sert à rien d'arriver avec les algorithmes de tri à bulles, de tri par insertion, de A* et de dijkstra ou avec les différents DP existants et d'assommer l'étudiant avec...
Par contre, comme le but de l'apprentissage de ces pré requis est, justement, de lui "apprendre à réfléchir" et que la meilleure manière d'y arriver est, encore, de le "bombarder d'exercices", il est des plus intéressant de le mettre face à des situations qui le mèneront à... les découvrir par lui-même (juste avant de lui dire le nom de l'algorithme ou du DP
)
Ce en faveur de quoi je plaide, c'est que l'on apprenne à l'étudiant à réfléchir à la logique qu'il veut transmettre à l'ordinateur grâce à n'importe quel langage.
Je plaide pour qu'il finisse par réfléchir de manière systématique à
A partir du moment où il a pris l'habitude de se poser la question et, surtout, d'y apporter une réponse "estimée correcte", l'apprentissage d'un langage se fait finalement beaucoup plus simplement et peut se limiter à:
- quelques règles de grammaire et de syntaxe
- quelques mots clé
- quelques particularité du langage
- quelques fonctions existantes dans le langage
Partager