Inscription / Connexion Nouveau Sujet
Niveau enseignement
Partager :

Enseignement de l'algorithmique : quel logiciel/langage ?

Posté par
Algue-rythme
11-08-12 à 19:57

Bonjours à tous,

Une fois n'est pas coutume, c'est un élève qui vient ici violer votre sanctuaire, pour parler de la manière dont l'algorithmique est enseignée au Lycée.

Ce post me paraît indispensable, quelques semaines avant la rentrée il arrive tout à point pour pouvoir préparer les programmes de l'année en prenant compte de mes remarques (si elles vous ont convaincues, bien sûr, j'espère que ce sera le cas).

J'aimerais donner mon avis sur les supports utilisés dans le cadre de l'enseignement de l'algorithmique (logiciels ou langages).

Je pense que mon avis a beaucoup d'importance, sans vanité préconçue, à commencer par ce que je suis un élève (et que je vais subir des mois durant l'enseignement de vos pairs), et ensuite parce que j'adore l'algorithmie : c'est le domaine des mathématiques et de la programmation que je préfère.

J'ai souvent vu des postes récurrents sur ce forum, ou ailleurs sur internet, où des professeurs cherchaient à savoir quel était le meilleur support pour l'enseignement de l'algorithmie.

Systématiquement le débat revenait vers scratch et Algobox.

Je ne me prononcerais pas sur Scratch car je ne le connais pas assez pour le critiquer, mais il est fort probable que mes remarques s'appliquant à Algobox s'appliqueront elles aussi à Scratch.

Je déplore l'utilisation de ces logiciels, car ils sont bien loin de ce qu'est l'algorithmique, ils croient qu'en substituant une interface attrayante à la complexité apparente des langages de programmation les plus répandus on facilitera leur approche.

C'était plein de bonne volonté, et probablement parti d'une bonne idée, mais le résultat final est horrible.

On se retrouve avec un langage qui n'en est pas un, à la syntaxe lourde, verbeuse, sale, moche, encombrante et repoussante au possible.

Le relecture devient vite impossible pour peu qu'il y ai une ou deux boucles imbriquées avec quelques conditions, ce qui est un vrai comble !

Comment peut-on croire que (en Algobox) :

reponse PREND_LA_VALEUR 42

est plus clair que (en python) :

reponse = 42

Il faut éviter de prendre les élèves pour des abrutis, je pense qu'il est plus contraignant de relire un code source lourd avec des instructions en majuscule que de simplement retenir que le symbole = est celui de l'affectation (ce qui fort logique !).

Mêmes les langages plus compliqués ont une plus grande simplicité :

OCaml (il s'agit d'une déclaration + d'une affectation, de toute façon OCaml obéit au paradigme fonctionnel, ce qui l'empêche de modifier la valeur des variables à posteriori) :
let reponse = 42 in

OCaml (il s'agit d'une déclaration + d'une affectation, exploitant le paradigme impératif de OCaml permettant cette fois ci de modifier la variable à posteriori grâce à l'opérateur := ) :
let reponse = ref 42 in

C++ (il s'agit d'une déclaration + d'une affectation, sans la déclaration il faut retirer le int):
int reponse = 42;

Sans parler des instructions conditionnelles les plus élémentaires : elles sont bornées par des mots clés lourds et encombrants.

En temps normal les différents blocs sont naturellement mis en évidence par l'indentation (cette même indentation est obligatoire en Python, ce qui fait un argument de plus en faveur de ce langage). Dans la quasi totalité des autres langages les paires de {} suffisent amplement (quoi qu'il en soi pour l'élève la différence sera évidente grâce à l'indentation). Cependant OCaml et Pascal utilisent begin et end, choix critiquable selon moi, mais cela reste malgré tout préférable à des DEBUT_SI ou FIN_SI.

On attend des élèves de Lycée qu'ils aient des bases minimales en anglais, je ne crois pas que les mots clés while, if, else, for, etc... soit un obstacle. Quand bien même qu'on ne les comprend ils sont courts, donc faciles et rapides à retenir.

Dans ce cas, j'anticipe votre argument, comment l'élève peut-il se focaliser sur l'idée de l'algorithme (le but premier de son enseignement au Lycée, le langage n'étant qu'un outil permettant de le mettre en œuvre), lorsqu'ils est distrait par les particularités d'un langage ?

C'est très simple : la recherche de l'algo devrait TOUJOURS précéder le moment où il est effectivement implémenté, que ce soit sur calculette (bêrk), algobox (bêrk), ou sur un langage digne de ce nom. Lorsque l'élève est face au logiciel, c'est déjà trop tard. Soit il a l'algo sur papier à portée de main, soit il fonce tête baissé et n'arrivera pas bien loin (à moins d'être doué, sur des petits problèmes ça passe encore).

Connaissez vous le pseudo-code ? C'est assurément le meilleur moyen de mettre au point un algorithme avant de passer en salle machine pour l'implémenter.

Comme son nom l'indique, ce n'est pas un véritable langage normalisé, et si jamais il l'était, alors il ne le serait plus, par définition. Car c'est un moyen courant de désigner le fait de poser sur papier l'idée d'un algo dans sa langue en faisant fi du langage utilisé. Pour cette raison il existe autant de pseudo-codes que de gens qui le pratique, et des différents "niveaux" de pseudo-code, suivant si la résolution du problème est décrit en finesse (directement transposable dans le langage de programmation de son choix) ou "générique" (description sommaire de la méthode employée, idée générale).

Toute résolution de problème passe par les étapes suivantes (en les simplifiant au possible compte tenu de la difficulté du niveau Lycée, en réalité les étapes sont plus nombreuses ) :

- Analyse du problème, pour un retirer la substance (supprimer l'enrobage de l'histoire, on se fiche que Julie gagne de l'argent de poche, on veut juste savoir combien de fois il faut augmenter d'une constante ou d'un pourcentage une somme N pour qu'elle atteigne une somme M par exemple).
- On décrit simplement comment procéder (idée générale)
- On créait le pseudo-code correspondant (plus formel)
- On implémente le pseudo-code une fois VALIDE sur un logiciel ou avec un langage en TP en salle informatique

Ces étapes sont les plus élémentaires pour résoudre un algorithme : quiconque n'a pas réussi à inculquer ces notions a échoué.

Car en algorithmie l'important n'est pas de résoudre un problème mais de savoir comment résoudre un problème. Pour moi il n'est pas envisageable de faire de l'algorithmie sans employer cette méthodologie.

Voici des tutoriels qui expliquent en détail comment procéder :

http://www.france-ioi.org/algo/course.php?idChapter=552&idCourse=0&iOrder=0
http://www.france-ioi.org/algo/course.php?idChapter=552&idCourse=0&iOrder=1
http://www.france-ioi.org/algo/course.php?idChapter=552&idCourse=0&iOrder=2
http://www.france-ioi.org/algo/course.php?idChapter=552&idCourse=0&iOrder=3

http://www.france-ioi.org/algo/course.php?idChapter=551&idCourse=0&iOrder=0
http://www.france-ioi.org/algo/course.php?idChapter=551&idCourse=0&iOrder=1

A défaut d'accorder crédit à mon poste, accordez en au moins à ces liens.

Ce site est celui de France IOI, le site de l'association en charge de la sélection de l'équipe française pour les International Olympiads in Informatic (l'une des olympiades de science, comme les IOM en mathématique - sur le site Animath - ou les IOP en physique).

Il s'agit d'un prestigieux concours international d'algorithmie réservé aux jeunes de moins de 18 ans non bacheliers. Mais ne vous détrompez pas : le niveau y est très élevé (ici l'historique des problèmes à résoudre en moins de 4 heures http://www.ioi2011.or.th/tasks pour chaque jour de la compétition).

France IOI propose pour cela une plate-forme d'entraînement. Elle permet à ceux qui n'y connaissent rien d'acquérir en quelques mois des connaissances élevées (problèmes de graphe, etc...). Des cours alternent avec les problèmes, chacun doublé d'une correction qui en apprend plus que les cours eux mêmes (à laquelle on accède qu'en résolvant le problème). La progression par niveau permet à chacun d'avancer à son rythme dans le domaine des sujets à sa portée. Le forum d'entraide est là pour aider en cas de blocage.

Un chapitre entier est dédié à l'algorithmie au Lycée, à l'attention des professeurs pour leurs classes il a été élaboré avec pédagogie pour les lycéens, en langage Python. On code directement dans une fenêtre (pourvue de la coloration syntaxique adaptée), et on "soumet" son code, où un juge automatisé en ligne fait subir des tests à l'algorithme afin de vérifier qu'il est correct, auquel cas le problème est considéré comme résolu et un accès à le correction est proposé.

Voici le site : http://www.france-ioi.org/index.php
Voici quelques explications sur sur fonctionnement : http://www.france-ioi.org/algo/index.php
La progression par niveau : http://www.france-ioi.org/algo/chapters.php
La partie Lycée : http://www.france-ioi.org/algo/lycees_intro.php

C'est selon moi le meilleur moyen pour l'enseignement de l'algorithmie : j'aurais aimé qu'on me l'enseigne de cette manière (je l'ai d'ailleurs fait en autodidacte). Je sais que si j'avais commencé par algobox j'aurais été écœuré à jamais de ce qui ma maintenant ma passion, que dis-je, mon obsession (je me suis procuré le Cormen).

Voici quelques discussions de forum qui abondent dans mon sens.

Sur le site de Prologin, concours national d'algorithmique français pour les lycéens, on est d'accord sur la qualité d'algobox (les messages ont aucun intérêt, c'est juste pour appuyer mon argumentation et montrer que je ne suis pas le seul à penser ça) : http://www.prologin.org/node/1270

Sur le Programmeur Moderne, des passionnés de programmation et d'algorithmique plutôt jeunes (18 ans en moyenne), on a également abordé la question (messages toujours très constructifs et intéressants ici) : http://progmod.org/forum/sujet/393/lenseignement-de-la-programmation/

Voilà, tout ça pour vous encourager à utiliser France IOI (grâce à qui l'algorithmique est ma plus grande passion), et surtout pas Algobox. Il y a peu de chances que mes professeurs passent par là et en prennent compte, je subirais Algobox, je le crains, mais si j'ai réussi à vous convaincre j'aurais au moins l'impression d'avoir indirectement réussi à ne pas dégoûter certains élèves de l'algo, et, pourquoi pas, d'en faire leur passion.

Posté par
jamo Moderateur
re : Enseignement de l'algorithmique : quel logiciel/langage ? 11-08-12 à 20:24

Bonjour,

je trouve ton propos très intéressant, tu donnes ton avis en le justifiant, en l'expliquant, bravo !

Par contre, sans vouloir aller contre ce que tu as dis, je voulais tout de même donner aussi mon point de vue qui n'est pas le même.

Pour le choix du logiciel d'apprentissage de l'algorithmie, je précise tout d'abord que je n'en ai pas utilisé, mais j'ai quand même quelques avis.
Pour Scratch, je trouve que l'interface est trop enfantine, sans doute peu efficace si l'algo devient important.
Mais d'un autre côté, certains profs de primaire utilisent Scratch avec des élèves ! Et de plus, les algos sur lesquels les élèves de lycée ne sont jamais très gros ... donc pourquoi pas !
C'est à cause de ce côté trop enfantin que je privilégierait plutôt Algobox, plus proche d'un vrai langage.

Ensuite, passons aux langages de programmation.
J'ai d'ailleurs déjà abordé ce point dans le forum, et je m'étais dis que tant qu'à faire, pourquoi ne pas directement utiliser un langage de programmation !

Ah oui, je voulais aussi dire que tu sembles un élève plutôt intéressé par ce domaine, et que tu regrettes qu'on n'utilise pas des choses plus évoluées.
Mais attention, n'oublie pas que pour un élève comme toi, on en a 20 qui ne sont pas forcément doués, et pour qui le langage algorithmique ou un langage de programmation est du chinois, que c'est rébarbatif et inutile !

Je me pose souvent la question : pourquoi tant de langages de programmation ?
Beaucoup se ressemblent énormément, et même si certains ont des avantages et des inconvénients, j'ai quand même la sérieuse impression qu'il y en a trop !
Lequel serait idéal pour commencer ? Je ne sais pas, je n'ai pas la réponse, et je ne pense pas qu'elle existe.
Aujourd'hui, je connais plusieurs langages de programmation, et si demain je devais en apprendre un nouveau, cela ne serait pas difficile du tout.

En conclusion, ce que je voulais dire, c'est que préférer telle approche ou telle autre, c'est surtout une affaire de gout. Un langage va plaire et correspondre à une personne, mais pas à une autre.

Posté par
patrice rabiller
re : Enseignement de l'algorithmique : quel logiciel/langage ? 11-08-12 à 21:56

Bonjour,

Je partage totalement l'avis de jamo. Je suis sûr qu'il y a moins de 1% d'élèves qui s'intéressent à l'algorithmique et à la programmation.
Pour l'élève lambda de seconde, il faut commencer par des choses ultra simples, mais indispensables :
1) l'affectation (je ne partage pas ton point de vue concernant l'utilisation du signe égal pour l'affectation, mais je n'aime pas non plus la lourdeur d'algobox ...)
2) les structures conditionnelles (Si ... alors ... finsi et si ... alors ... sinon...finsi). Dans un premier temps on peut éviter les structures conditionnelles plus complexes.
3) les itérations (tant que...fin tant que ; répéter ... jusqu'à et pour...

Ensuite il faut donner des algorithmes tout faits et demander aux élèves de les décortiquer (en les faisant tourner à la main)

Ensuite, il faut leur donner des algorithmes à trous qu'ils doivent compléter

Ensuite il faut leur donner des algorithmes entiers à faire.

Parallèlement, il faut évidemment programmer ces algorithmes systématiquement dans un langage quelconque (ce n'est pas le plus important). Au début le professeur rédige entièrement le programme, puis peu à peu, les élèves deviennent de plus en plus autonomes. Le plus difficile n'étant pas de programmer mais de construire l'algorithme.

Voila, si on s'en tient aux programmes des classes de lycée, à quoi se limite l'apprentissage de l'algorithmique.

Maintenant, à partir de la rentrée prochaine, les élèves motivés de terminale S vont pouvoir faire de la vraie programmation en choisissant la spécialité ISN : informatique et sciences du numérique. L'objectif est d'aller beaucoup plus loin puisque le programme comporte 4 parties :

1) représentation de l'information (représentation binaire, opérations booléennes, numérisation, formats, compression ...)
2) algorithmique (au-delà du programme de math : tri, chemins de parcours d'un graphe, récursivité ...)
3) langages et programmation : programmation classique (le choix du langage est laissé libre mais beaucoup d'enseignants vont choisir Python ou Java) et programmation web (HTML, php, css )
4) architectures matérielles (éléments d'architecture, jeux d'instructions, transmission point à point, adressage sur un réseau,routage, programmation d'un mini robot...)

Le programme ne mentionne pas la notion d'objets, mais je ne vois pas comment on pourrait s'en passer ...

Au départ, cette nouvelle matière (car ce n'est pas de mathématique dont il s'agit) devait commencer dès la seoncde, mais pour des raisons budgétaires sans doute, elle n'est introduite qu'en terminale (et encore pas dans tous les lycées) : c'est mieux que rien !

Tu es plein de certitudes (normal quand on est jeune) et ton jugement devrait être plus nuancé, mais bravo pour ton enthousiasme !

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 00:46

salut

j'adhère aux propos

Citation :
C'est à cause de ce côté trop enfantin
... voire même débilisant car effectivement
Citation :
Il faut éviter de prendre les élèves pour des abrutis,


j'ai commencé avec une TI57 (à leds rouges sans mémoire autonome puis à une CASIO FX702P elle savait faire la différence entre ces phrases "A = 4" et la même phrse précédée d'un "F ou d'un WHILE ou ....
le premier = est une affectation, le deuxième un test et apprendre à lire c'est savoir faire la différence

et comme tu le dis
Citation :
Car en algorithmie l'important n'est pas de résoudre un problème mais de savoir comment résoudre un problème


toutefois on peut donner parfois la réponse :: je me souviens d'un ds d'algèbre en license qui portait sur l'arithmétique :: en fin d'un pb la n-ième question était "pouvez-vous trouver deux nombres x et y tels que x2 - y2 = ..." je ne sais plus quoi de ce genre :: j'avais répondu " oui je le peux" et j'avais donné,la (une) réponse ... j'avais programmé ma machine ... et ayant eu la totalité des points j'avais bien programmé ma machine ...

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 11:46

Jamo,

Citation :
Je me pose souvent la question : pourquoi tant de langages de programmation ?
Beaucoup se ressemblent énormément, et même si certains ont des avantages et des inconvénients, j'ai quand même la sérieuse impression qu'il y en a trop !


Ben oui, évidemment.

On est parti du Basic (oublions ce qui précède qui n'étaient pas de "vrais" langages de haut niveau) , puis on est passé par le Pascal, puis par le C.
Et puis grosse révolution avec C++, qui reprend le C mais en permettant la programmation orientée objet (ça c'est vrai que c'est une révolution) et puis on est reparti des langages Basic et Pascal(Delphi) mais en leur ajoutant aussi la "programmation orientée objet" et puis on est passé au C Sharp et puis ...
Et puis une multitude de boîtes de créer leur propre langage et ...

Avec à chaque changement de langage de mauvaises "bonnes raisons" invoquées pour justifier ces changements.

Alors, que tout un chacun peut facilement se rendre compte qu'on aurait pu, sans réelle difficulté, garder le langage initial (exemple le Basic) et le faire évoluer tout en gardant les compatibilités avec celui de base.

La raison fondamentale qui font multiplier les langages et en s'arrangant surtout pour qu'il n'y ai pas de compatibilité avec le passé et avec les autres langages est que les grosses boîtes informatiques s'auto génèrent ainsi du travail et le font payer très cher aux ploucs que nous sommes bien obligés de suivre à acheter sans cesse de nouveaux logiciels et des bécanes toupours plus "puissantes".
Rien à voir avec l'efficacité, juste un bon moyen de plumer les dindons à qui on ne laisse pas vraiment le choix.

Mais cela éloigne de la question posée.

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 12:58

tête à fou d'accord avec J-P ....

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 14:57

c'est aussi ce que j'attendais, entre les progrès technologique et l'amélioration/simplification/une meilleure ergonomie j'attendais autre chose que ces machines débiles que nous avons maintenant et qui nous abrutissent .... ainsi que tous ces langages pour attirer la clientele

Posté par
Togodumnus
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 15:17

Bonjour,

C'est marrant que tu cites Prologin, je connais le président de l'année 2011-2012 (puisqu'il collait dans ma classe, et il faisait... souvent de l'info).

J'ai eu l'occasion de voir un peu comment était Algobox. Et, comment dire... C'est vraiment décevant de voir qu'on enseigne l'algorithmique de cette façon. Je ne sais pas comment dire, ce n'est absolument pas naturel... Je comprends très bien qu'on n'enseigne pas de langage en tronc commun (en ISN, c'est différent). Les premiers programmes que j'ai fait sont des programmes type factorielle, puissance... En pseudo-code. C'est pas difficile de dérouler un tant_que ou un pour, et j'ai l'impression que c'est bien plus naturel. Quant au Python, je ne sais pas, je ne connais que très peu ce langage.

Bref, vive le pseudo-code pour débuter !

Posté par
Mariette Correcteur
re : Enseignement de l'algorithmique : quel logiciel/langage ? 12-08-12 à 21:27

bonsoir,

je suis depuis 2 ans la formation pour enseigner en l'option ISN, cette formation étant assurée par des profs d'info à la fac. Ben la réponse est claire : pour eux l'algo, c'est papier/crayon.

En pratique, avec mes élèves de seconde, j'utilise AlgoBox qui est certes très lourd, mais qui a l'avantage de cette lourdeur : par exemple, si on loupe l'initialisation, ça plante (à condition de choisir une variable qui doit être initialisée à autre chose que 0). Et puis le déroulement "pas à pas" avec le contenu des variables qu'on voit au fur et à mesure, ça parle à la grande majorité qui panique encore plus au mot "algorithme" qu'au mot "factorisation".
Sinon, je suis passée par LARP aussi (découvert grâce à jamo, merci encore !), visuel, qui passe bien, mais que je trouve (un peu) plus délicat à manipuler pour les élèves.

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 13-08-12 à 22:55

Je trouve les commentaires d'Algue-rythme très frais.

La transcription en langage de programmation, et ses tests, ne devrait
être que l'ultime étape du processus.. histoire de valider pour le plaisir
l'analyse qui a été faite préalablement.

L'algo c'est papier crayon ! en effet.
Et c'est comme ça qu'on l'enseignait déjà il y a 40 ans.
L'algo, c'est : analyse du problème, organigramme (organisation du traitement et/ou
organisation des données), et éventuellement pseudo code. Et normalement tout
est dit.

Je ne comprends d'ailleurs pas la difficulté que cela représente.

Un algo ce n'est jamais :
- qu'une déclaration/initialisation de variables;
- du traitement comme on sait le faire en maths;
- et une procédure, structurée de préférence, dans laquelle on retrouve
2 instructions essentielles (et seulement 2) le IF et le WHILE.

Enseignons le IF, enseignons le WHILE, apprenons à faire une représentation graphique
des traitements sous forme d'organigramme, et on aura appris aux
élèves de lycée à faire de l'algorithmie.

Posté par
tcpc
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 07:48

Citation :
Un algo ce n'est jamais :
- qu'une déclaration/initialisation de variables;
- du traitement comme on sait le faire en maths;
- et une procédure, structurée de préférence, dans laquelle on retrouve
2 instructions essentielles (et seulement 2) le IF et le WHILE.

Enseignons le IF, enseignons le WHILE, apprenons à faire une représentation graphique
des traitements sous forme d'organigramme, et on aura appris aux
élèves de lycée à faire de l'algorithmie.


Il est aberrant de voir des simplifications comme celles-ci. Comment expliquez-vous l'existence de chercheurs en Algorithmique (qui ne sont pas des mathématiciens) si cela est si simple d'après vous ? Pensez vous que les études de complexité des algorithmes (coût moyen, coût amorti, coût dans le pire des cas, etc.), de recherche de la meilleure structure de données pour un problème donné soient si simples et se contentent d'un IF et d'un WHILE ? Que dire également de l'existence de différentes approches telles que « diviser pour régner », de la récurrence, etc. ? Quid des classes de complexité, des problèmes NP-Complet, des notions d'automates, etc. ?

Bref, je veux bien que le programme d'Algorithmique au secondaire se limite au IF et WHILE (quoique c'est discutable) mais réduire l'Algorithmique à cela, c'est un peu fort.

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 10:18

tcpc :: j'approuve les propos de pgeod :: nous sommes au lycée et on s'adresse à des jeunes qui débutent et non pas à bac + vingt-douze ....

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 10:20

pgeod a juste oublié la boucle inconditionnelle For à côté de la boucle conditionnelle While ....

Posté par
tcpc
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 10:58

Citation :
Bref, je veux bien que le programme d'Algorithmique au secondaire se limite au IF et WHILE (quoique c'est discutable) mais réduire l'Algorithmique à cela, c'est un peu fort.


Citation :
Un algo ce n'est jamais :
- qu'une déclaration/initialisation de variables;
- du traitement comme on sait le faire en maths;
- et une procédure, structurée de préférence, dans laquelle on retrouve
2 instructions essentielles (et seulement 2) le IF et le WHILE.


Clairement pas.

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 11:07

ben pourquoi ?

Posté par
patrice rabiller
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 11:31

Je dirais qu'il manque quand même les instructions d'entrée/sortie (lire/écrire), parce que le but ultime d'un algorithme c'est de traiter les données (qu'elles soient saisies au clavier ou sur un capteur quelconque) et d'afficher les résultats (à l'écran, sur l'imprimante ou via un haut-parleur ou ...)
Sinon, fondamentalement, je ne vois pas ce qu'il manque ...

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 11:39

@carpediem.
Une boucle FOR i de 1 à 10 ... NEXT .. sans FOR

i = 0
While (i < 11)
  {instructions}
  i = i + 1
End while

@tcpc ben oui pourquoi ?

Aussi complexe que soit ton algorithme, ce sont toujours une succession
de IF et de WHILE. Le reste c'est un problème d'optimisation.

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 11:53

dsl.  l'initilisation c'est i = 1

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 12:21

pgeod,

Oui, comme un roman de Sheakespeare n'est jamais qu'une succession de mots qu'on trouve dans le dictionnaire.
Mais de là à ce que n'importe quel quidam puisse écrire ce type de roman ... avec cette qualité.

Certes, les algos du secondaires sont réduits à leur plus simple expression, mais essaie d'écrire un algorithme pour la "vraie vie", sans faille ou niche à cas particuliers, rapide et rigoureux dans un problème un poil complexe et tu verras que la difficulté n'est pas au degré où tu le penses.

Un des mots clé dans ce que j'ai écrit est "rapide"...

J'ai été confronté à des problèmes bien costauds à cause de cette rapidité parfois indispensable pour la réalisation de l'algo.

Algo parfois simple en apparence, où on pense s'en tirer avec quelques pages d'instructions basiques et quelques boucles imbriquées ... et tout est dans la poche.

Oui, sauf que le programme une fois compilé ...et enfin lancé, il met 0,2 seconde à s'exécuter (sur processeur performant). Le hic est que cet algo est sensé controler un processus dont la durée peut être 10 fois plus courte que le temps de déroulement de l'algo...

Et alors, c'est parti, il ne reste plus qu'à trouver les astuces pour que cela puisse quand même foncionner... et c'est là qu'on commence à transpirer.

Certes, en secondaire, il n'est pas question de se préoccuper de ce genre de détail et de plein d'autres non effleurés ici. Mais l'algothmie c'est vraiment autre chose que d'aligner 3 boucles que ce soit un for, un while ou autre case of ou ...

Remarque, que la vitesse d'exécution d'un algo étant parfois (souvent ?) une exigence du cahier des charges imposée par des contraintes souvent incontournablas, a terrassé plus qu'un analyste ...

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 12:43

@J-P Tout ceci est juste... mais à réserver pour les "pros" ou les "fans".
La question de départ est tout de même : Enseignement de l'algorithmique au lycée.

Et c'est justement parce que j'ai un peu de recul sur l'algorithmie dans la "vraie vie",
que je dis qu'il ne convient pas, pour l'apprentissage de la matière au lycée,
faire état de tous ces problèmes d'optimisation, ni de tous ces problèmes de
langage et de syntaxe, alors que les élèves sont déjà perturbés quand il leur
faut trouver 10 lignes d'un enchainement logique de programme.

Et si tu as également un peu de recul dans la "vraie vie" sur l'algorithmie,
je pense que tu dois pouvoir en convenir, compte tenu des difficultés que
réprésente, apparemment  au vue des topic ouverts sur la sujet sur l'île,
la compréhension de la matière en secondaire.

A quoi bon parler de relativité à un élève, s'il ne sait déjà pas ce qu'est
une vitesse.

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 12:49

pgeod : certe oui ... on peut toujours remplacer un for par un while ....

mais bon comme on l'a dit et que tu répètes dans ton dernier msg on s'adresse à des élèves "qui découvrent" et la structure itéraive sans conditionnement (qui est un des objectifs du programme du lycée) peut être présentée aux élèves ...

quelle que soient toutes considérations d'optimisation ou de performance ou de cahier des charges qui s'adressent aux professionnels ....

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 12:54

ainsi si f est une fonction et que l'on définit une suite par un+1 = f(un) et la donnée du premier terme

et que je demande à mes élèves d'écrire un algorithme qui me donne le k-ième terme de la suite après avoir entrer le terme initial et k je me moque de savoir si l'élève utilise un for, un while ou même une fonction récursive l'important c'est qu'il sache modéliser le processus avec un algo qui tourne ...

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 13:05

@carpediem

Je suis d'accord.
Un algo qui tourne.. c'est déjà une première grande étape et une grande satisfaction,
pour le prof comme pour l'élève, dans l'apprentissage du savoir.

C'est comme résoudre un problème de maths, trouver UNE solution c'est déjà
très satisfaisant, même si on n'a pas trouvé LA solution la plus élégante.

Posté par
Algue-rythme
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 13:20

@pgeod :

Regardes ces problèmes pour t'en convaincre :

http://www.france-ioi.org/algo/chapter.php?idChapter=58
http://www.france-ioi.org/algo/chapter.php?idChapter=96

En principe ça peut se faire avec Algobox (quelques tarés sur Prologin se sont amusés à coder un DFS [http://en.wikipedia.org/wiki/Depth-first_search si tu ne connais pas] avec, ça doit donc être possible... ).

Les algorithmes requis pour résoudre ces problème dépassent très largement le stade du secondaire, c'est certain, mais ils sont considérés comme des algorithmes "classiques" que tout les spécialistes du domaine sont censés connaître (ça serait aussi aberrant qu'un prof de math qui ne connait pas le théorème de Pythagore).

Car, et c'est là l'un des défis majeur de l'algorithmique, il ne s'agit pas seulement de trouver un algo qui donne la réponse au problème, mais un algo qui la donne rapidement (comme souligné par J.P).

>> Sinon, fondamentalement, je ne vois pas ce qu'il manque ..

Les tableaux. Sans tableau la quasi-totalité des problèmes te sont inaccessibles. Sauf si tu considères ça comme une variable évidemment...

Mais quoi qu'il en soi l'algorithmique ne se limite pas à ça. C'est un domaine vaste et complexe en perpétuelle évolution (reconnaissance vocale, cryptographie, simulations diverses) qui atteint parfois des niveaux de complexité si élevé qu'il faut considérer des méthodologie pour décrire un algorithme, des façons de procéder, car le considérer comme un enchaînement de IF et de WHILE ne suffit plus (algorithmes génétiques, algorithmes gloutons, programmation dynamique, récursivité, etc... ).

Voici 2 fonctions en C++ qui calculent le n-ième nombre de la suite de fibbonacci :

// Fonction renvoyant un entier positif et prenant en paramètre un entier positif
unsigned int fibo(unsigned int n)
{
     if (n <= 2)
          return 1; // Renvoie 1 si n inférieur ou égal à 2
     else
          return fibo(n-1) + fibo(n-2); // Sinon renvoie la somme des deux nombres précédents de la suite
}

La complexité de cette fonction est énorme : elle vaut grosso-modo le nombre d'or élevé à la puissance N. Autrement dit elle croit exponentiellement en temps. Avec ça tu es très vite bloqué en terme de temps d'exécution.

Voici maintenant une version de cette fonction en complexité linéaire :

// Fonction renvoyant un entier positif et prenant en paramètre un entier positif
unsigned int fibo(unsigned int n)
{
     // 3 entiers positifs initialisés (n3 est le résultat)

     unsigned int n1 = 0;
     unsigned int n2 = 1;
     unsigned int n3 = 0;

    for (unsigned int i=1; i<=n; ++i) // Pour i de 1 à n avec un pas de 1 en 1
    {
        // On calcule le résultat...
        n3 = n1 + n2;

        // ... et on décale les positions dans la suite !
        n1 = n2;
        n2 = n3;
    }

    return n3; // On renvoie le résultat !
}

Deux fonctions calculant le même résultat (une exception pour n = 0 cependant), mais la seconde plus rapide que la première.

Et ce n'est qu'un exemple classique !

Au faite, tu remarqueras que la première fonction ne fait pas emploi du WHILE, mais utilise la récursivité... aussi certains algorithmes qui peuvent paraître complexes peuvent se passer de son utilisation !

D'ailleurs, certains langage (comme Haskell et la plupart des langage fonctionnels pur), ne connaissent ni la boucle while ni la boucle for ! A la place ils utilisent la récursivité !

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 13:45

encore une fois on sort du cadre de ce topic qui est l'initiation à l'algo ....

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 13:47

@Algue-rythme

Et tout ça pour dire quoi ? Que tu t'intéresses au sujet ?
Ca on l'avait compris dès ton premier post.

Que tu connais la récursivité et des algorithmes pour résoudre
des problème qui dépassent très largement le stade du secondaire.
C'est bien.

Que l'un des défis majeur de l'algorithmique, n'est pas seulement de
trouver un algo qui donne la réponse au problème...
Peur-être.. suivant les domaines.

Mais ça ne répond pas à la question : Par quoi on commence pour
enseigner l'algorithmique et avec quels outils ? C'est ça la question.

Posté par
gasche
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 22:55

Bonjour,

Je me suis inscrit sur ce forum uniquement pour répondre à ce topic, car j'ai été surpris par une partie des choses qui s'y disent.

Pour moi l'intérêt de l'enseignement de l'informatique au lycée est de donner aux élèves des notions de programmation. Pas seulement de l'algorithmique comme sous-domaine spécialisé, mais du fait d'écrire un programme pour faire quelque chose de précis et qui marche bien.

Par ailleurs, il me semble que ce qui distingue fondamentalement la programmation et les mathématiques (telles qu'elles sont pratiquées aujourd'hui), c'est la possibilité d'un retour direct provenant d'un ordinateur. Un programme on l'écrit, on le teste, on sait dans la minute s'il est complètement faux ou pas (par contre on ne sait pas s'il est complètement juste). C'est une grande force qu'il me semblerait aberrant de ne pas utiliser pendant son apprentissage : je suis choqué qu'on puisse dire à de futurs enseignants que l'algorithme "c'est papier/crayon". Présenter le sujet ainsi est certainement une bonne manière de faire paraître le sujet anecdotique, inutile et sans grand intérêt: si c'est pour tout faire dans la tête, autant faire de belles mathématiques.

Je n'aime pas le concept de pseudo-code car il va dans la direction du "papier/crayon" justement. Un programme en pseudo-code qu'on ne peut pas tester n'a pas grand intérêt. Et si on se met à définir précisément un pseudo-code pour pouvoir l'implémenter, ce n'est plus un pseudo-code mais un langage de programmation (mais fabriqué de façon ad-hoc par une personne qui n'est pas spécialiste du sujet et donc sans doute de qualité discutable). Quitte à enseigner et utiliser un langage de programmation, autant en prendre un qui existe déjà, dont les défauts et les qualités sont bien connus et compris, et qui permettra aux élèves intéressés de faire autre chose que ce qui est couvert par le programme s'ils en ont envie (de la programmation graphique, des programmes utilisant un générateur de nombres aléatoires, des entrées/sorties de fichier, ou n'importe quelle autre fonctionnalité que vous avez oublié d'inclure dans votre pseudo-pseudo-langage).

Utiliser un vrai langage (par exemple Python ou OCaml) ne veut pas dire qu'on se met tout de suite à coder avant de réfléchir. Il y a une place pour la conception de l'algorithme et sa description informelle, non complète mais permettant de se fixer les idées. Mais cela peut très bien se faire simplement en langue naturelle (dans un contexte de classe, parfois à l'oral), avec éventuellement une structure qui ressort dans la représentation textuelle. C'est ça le "pseudo-code", fait comme ça c'est naturel, et il n'y a pas besoin à mon avis de concentrer son enseignement dessus -- tout comme on n'enseigne pas la rigueur aux élèves en leur faisant uniquement étudier les plans de preuve informels que font les mathématiciens qui attaquent un théorème difficile.

Enfin, pour moi le vrai problème de l'enseignement de l'informatique en terminale ce n'est pas un problème d'outils. On n'a jamais trop su quel était le meilleur langage à utiliser pour débuter la programmation, plein de gens ont commencé avec un BASIC horrible, et au final tout le monde s'en sort plutôt bien, comme si l'outil n'était pas si déterminant. C'est un problème de compétences : on demande aux professeurs de mathématiques (ou SI, ou...) d'enseigner la programmation, quand ce n'est pas leur domaine de compétences. Excepté quelques bonnes surprises (il y a toujours des professeurs doués en programmation par ailleurs, mais malheureusement ilemaths n'est pas représentatif du corps enseignant), l'expérience pratique ne sera pas au rendez-vous, et l'enseignement sera sans doute décevant. Pour enseigner la programmation on a besoin de professeurs qui programment pour de vrai, et je ne vois pas comment l'éducation nationale peut en inventer en l'espace de quelques années. Ça pourrait se faire sur le long terme mais il faudrait regarder le problème en face au lieu de faire comme s'il n'existait pas -- et par ailleurs la création d'une agrégation d'informatique serait peut-être aussi une bonne idée dans cette optique.

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 01-09-12 à 23:40

pour faire de "la bonne programmation" il faudrait de "bons langages" ...

ce qu'il y avait dans les années 80 mais modernisé sans que cela ne devienne par trop complexe ni rigide mais pas ces pseudo-langages (style algobox où l'on remplit des cadres par des instructions ...médiocrité intellectuelle, reflet de la médiocrité de notre éducation....)

j'ai commencé par un basic "horrible", du moins sans souplesse, peu rapide, peu de mémoire ....
puis il y a eu ces horribles machines "qui font tout" (contre lesquelles je me bats) et pris par d'autres centres d'intéret je l'avoue j'ai laché prise

et maintenant il y a un saut ...
j'ai regardé Python qui me semble vraiment bien ... mais je l'avoue c'est dur de s'y remettre ....

il serait temps que nos inspecteurs prennent leur responsablité, ce qu'ils n'ont pas fait depuis des années :: je précise que dans mon livre de 1e donc il y a .... un certain temps se trouvaient des algoritmes ... cela n'a pas duré longtemps ...et ça date ...

maintenant il faut que nos élèves en bouffent à tous les cours alors qu'ils ne savent même plus lire ....

Posté par
pompompom
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 01:55

> Mais ça ne répond pas à la question : Par quoi on commence pour
enseigner l'algorithmique et avec quels outils ? C'est ça la question.

On commence avec un vrai langage, déjà. Si possible disposant d'un interpréteur toplevel car c'est bon pour la pédagogie et que les élèves peuvent suivrent en live ce que leur dit de faire le ou la prof, puis voir les résultats directement.

À bien-sûr, cela suppose d'utiliser un ordinateur*. Donc pour enseigner l'algorithmique, ça sera bien de la faire au CDI par exemple. N'oubliez pas que dans computer science il  y a computer, c'est pas pour rien et un papier/crayon ne servira à rien si non en complément d'une machine.

En plus, les élèves pourront essayer de faire des ptits trucs chez eux pour s'amuser, ils auront juste à se procurer l'implémentation du langage choisi.

* : sous GNU/Linux naturellement.

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 09:55

La question ne portait pas sur l'informatique à l'école mais sur l'introduction à l'algorithmie en Secondaire, c'est fondamentalement différent.

Le but est, je suppose, de développer l'esprit logique et de réflexion des élèves.

Pour cela l'algorithmie (à faible difficulté pour le Secondaire) peut être un bon outil.

Normalement, pour atteindre ce but, il n'y a pas vraiment besoin d'un ordi ou de l'apprentissage d'un langage informatique.

Il faut bien entendu comprendre l'esprit de quelques notions de base, comme des instructions conditionnelles (Si ... alors ... sinon) et les notions de boucles et quelques autres.

Papier, crayon, réflexion et ... flow-chart (comme on dit en anglais), qui est infiniment plus visuel que n'importe quel autre moyen.

Cela devrait suffire ...

Mais cela impliquerait, que le prof soit capable de comprendre la logique de chacun des élèves (et ce n'est pas forcément gagné pour certains) et cela implique aussi que les élèves arrivent à comprendre et à admettre que leur travail ne répond pas toujours au problème posé. (et cela c'est loin aussi d'être gagné).

Pour éviter ces problèmes, il faut alors traduire la réflexion (flow-chart) en un "langage" assimilable par un quelconque logiciel et le faire "tourner", on vérifie ainsi que le résultat est ou non celui attendu et coupe les ailes aux discussions prof-élèves sur la validité de la solution (bien que ...)

Cela ne répond pas à la question de savoir quel logiciel, ni quel support choisir ... d'autant plus qu'il en existe une inutile multitude, tous ayant leurs qualités et leur défauts.

Posté par
pompompom
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 11:41

> Normalement, pour atteindre ce but, il n'y a pas vraiment besoin d'un ordi ou de l'apprentissage d'un langage informatique.

Si clairement. Sauf si c'est uniquement de l'analyse des algorithmes mais à tous vous écoutez, ce n'est pas du niveau du secondaire donc on oublie.

> Il faut bien entendu comprendre l'esprit de quelques notions de base, comme des instructions conditionnelles (Si ... alors ... sinon) et les notions de boucles et quelques autres.

Non, on peut définir les algorithmes autrement. Certains langage n'ont même pas de structure de boucle ou de si..alors..sinon et il est pourtant possible d'implémenter un algorithme avec. Donc un algorithme ne s'exprime pas forcément avec ça. Par exemple en assembleur, je n'ai pas ces structures. Puis encore, un algorithme peut être décrit en terme de fonctions ou de machine abstraite. Rien à voir avec des boucles ou des structure conditionnelles classiques. Cette vision des algorithmes est trop restreinte.

Le problème qui vent de l'argument du prof qui doit comprendre la logique de l'élève n'est pas fondamentalement grave. Ils sont débutants et ils n'iront pas a priori vous sortir des bouts de codes super astucieux et idiomatique. Personne n'ira coder une fonction récursive, ou s'amuser à faire des fonctions d'ordre supérieur pour mapper ou zipper ou ces trucs là. À moins d'avoir un élève qui a déjà beaucoup d'expérience, on comprendra toujours la logique naïve supposée du débutant.


Moi je dis ça pour vous les profs. En septembre ça sera Python chez moi car je suis sûr qu'au moins les élèves ne trouveront pas ça barbant. Avec un truc comme AlgoBox, je suis sûr de perdre la grosse moitié au cours de l'année, quoi que je les connais pas encore.

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 15:02

pompompom,

Tu tégares et pas qu'un peu.

On parle bien d'une approche de l'algorithmie dans le secondaire et pas d'autre chose.

On n'essaie pas d'enseigner la rélavité générale en secondaire pour approcher les problèmes de la gravitation.

Papier - crayon - flow chart.
Tout le reste (au niveau Secondaire) ne devrait pas exister sauf pour les motifs que j'ai évoqués.

Mais libre à qui veut de penser autrement.

Posté par
gasche
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 16:43

L'interactivité permise par l'utilisation d'un ordinateur est une chance extraordinaire. Ça rend la matière vivante et plus facile à enseigner -- tant que les élèves sont motivés. Pour moi c'est un atout principal à mettre en valeur dans l'enseignement, et pas le petit détail qui facilite les corrections comme tu sembles le penser. Utiliser "papier, crayon et flow-chart", c'est passer à côté de cet avantage.

L'informatique est un domaine rempli d'autodidactes. J'ai appris à programmer "tout seul" au lycée et je connais beaucoup de gens qui sont dans ce cas. À mon avis la raison pour laquelle ce phénomène est si répandu est justement cette interactivité qui facilite l'apprentissage, et la perspective de résultats concrets (un de mes premiers programmes a été un générateur de phrases aléatoires, pas très difficile à programmer et très amusant).

Par ailleurs j'ai aussi des doutes sur les flowchart comme outil ultime pour l'écriture de programmes. Ça marche très bien dans certains domaines (le traitement du signal (Max/MSP, PureData...) ou l'électronique de bas niveau), mais c'est nettement moins convaincant dans d'autres. Les langages à flowchart utilisent souvent des conventions graphiques (les ronds c'est pour ça, les carrés pour ça) qui ne sont au final ni plus simples ni plus faciles à retenir qu'une syntaxe textuelle équivalente. En tant qu'outil de brouillon pour décrire certaines idées pourquoi pas, mais si on veut en faire la syntaxe d'un langage implémenté ça me paraît entrer dans le cadre des outils fait maison qui ne sont au final pas terribles.

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 17:15

Utiliser "papier, crayon et flow-chart", c'est passer à côté de cet avantage.

C'est dans cette partie "papier, crayon et flow-chart", qu'on a besoin d'esprit logique et de réflexion.

Citation :
Par ailleurs j'ai aussi des doutes sur les flowchart comme outil ultime pour l'écriture de programmes. Ça marche très bien dans certains domaines (le traitement du signal (Max/MSP, PureData...) ou l'électronique de bas niveau),


Certainement pas. Le flow chart est très visuel et permet souvent une écriture aisée des programmes si on veut aller jusque là (ce qui n'est pas impératif en Secondaire) ... et aussi un debuggage très largement facilité... une fois le programme écrit.

Et certes qu'il y a quelques conventions de symboles usuels dans les flow-chart ... Mais ce n'est pas vraiment très compliqué ... surtout si on s'en tient à l'algorithmie de base comme en Secondaire.

Les flow charts permettent de très bien visualiser les boucles imbriquées et autres pièges ... alors que si on ne veut pas se perdre dans un programme un peu touffu et écrit sans cela ... et qui ne fonctionne pas du premier coup, on est vite embarqué à repérer toutes les accolades pour voir ce qui est dans quoi et si on en loupe une on tourne en rond ... et puis on recommence ...
Pareil, si on demande, par après, des modifications au programme, le flow chart facilite grandement ces modifications tellement c'est "visuel".

J'ai quelques bonnes bases sur l'écriture des programmes (entre autre dans le domaine de l'imagerie médicale où il vaut mieux ne pas se planter) ... et il ne m'est jamais venu à l'idée de mal travailler ... c'est à dire programmer sans d'abord analyser le problème par flow-charts...

Mais chacun son truc.


Posté par
gasche
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 17:47

> J'ai quelques bonnes bases sur l'écriture des programmes
> (entre autre dans le domaine de l'imagerie médicale où il
> vaut mieux ne pas se planter) ... et il ne m'est jamais
> venu à l'idée de mal travailler ... c'est à dire programmer
> sans d'abord analyser le problème par flow-charts...

Il y a une différence entre utiliser une représentation diagrammatique pour concevoir et réfléchir (pratique très répandue dans l'industrie : diagrammes de bases de données, diagrammes de hiérarchies de classes, ou même en entreprise les diagrammes de description de processus, etc.) et vouloir donner à cette représentation le niveau de détail nécessaire pour en faire un programme exécutable.

Des scientifiques russes sont allés au bout de cette démarche en concevant un langage à base de diagrammes prévus pour pouvoir représenter la structure de programmes écrits dans des langages existants (C, Oberon, Python...), chaque case pouvant contenir une quantité arbitraire de code dans le langage sous-jacent. Il s'agit de DRAKON qui t'intéressera peut-être : http://en.wikipedia.org/wiki/DRAKON

Je veux bien croire qu'on puisse utiliser des techniques de ce genre en milieu scolaire, mais il reste à prouver que ça marche mieux qu'utiliser le langage sous-jacent directement (quitte à utiliser des diagrammes dans la phase de conception de certains algorithmes). Je m'attends à ce qu'au final ça ne fasse pas de grande différences, mais il faudrait des études empirique sur le sujet pour avoir les idées claires.

Posté par
Tiwaz
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 19:47

Citation :
Il y a une différence entre utiliser une représentation diagrammatique pour concevoir et réfléchir

Ce n'est pas ça justement l'algorithmique : concevoir des méthodes pour traiter de façon systématique des données.

Citation :
Je veux bien croire qu'on puisse utiliser des techniques de ce genre en milieu scolaire, mais il reste à prouver que ça marche mieux qu'utiliser le langage sous-jacent directement (quitte à utiliser des diagrammes dans la phase de conception de certains algorithmes).

Si on suis ton raisonnement faudrait donc coder qu'en assembleur puisque au final n'importe quel langage de programmation finit par être compilé/interprété en assembleur, donc en écrivant directement le programme en assembleur on est sur d'avoir la maîtrise totale sur ce qui est exécuté...

Quand Euclide a formulé son algorithme pour calculer le pgcd il ne se soucié pas de savoir si son algo allé être implémenté en C, Java, Python, ou autre.
D'ailleurs l'algorithmique n'a pas pour seule finalité de faire des maths ou d'écrire du code, une recette de cuisine peut se voir comme un algorithme avec en entrée les ingrédients, les étapes de la préparation et en sortit un plat cuisiné.

Posté par
gasche
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 20:14

Citation :
Si on suit ton raisonnement il ne faudrait donc coder qu'en assembleur


Je n'ai jamais dit ça et je ne comprends pas pourquoi tu déformes mon propos ainsi. Écrire des bouts programmes C reliés entre eux par des flèches et des boîtes (au lieu d'être disposés ensemble par des instructions de contrôle et de l'indentation) n'est pas fondamentalement plus haut niveau qu'écrire un programme C directement, et la quantité de choses à apprendre est la même. Dans le cas du passage à l'assembleur on a un langage beaucoup plus bas niveau et moins structuré, donc ça fait une grosse différence. Je pense qu'il vaut mieux utiliser un langage qui ne segfault pas et qui met en avant des constructions plus structurées par défaut. (Après il y a beaucoup de gens qui ont commencé avec C comme premier langage et qui n'en sont pas morts, encore une fois le professeur et les documents pédagogiques utilisés ont peut-être plus d'importance que l'outil choisi).

Citation :
Quand Euclide a formulé son algorithme pour calculer le pgcd, il ne se souciait pas de savoir si son algo allait être implémenté en C, Java, Python, ou autre.


Je te réfère à l'argumentaire de Jules Dowek et Jean-Pierre Archambault, auteurs d'un ouvrage d'"Introduction à la science informatique":

( http://www.framablog.org/index.php/post/2011/09/18/manuel-science-informatique-commentaires )

Citation :
Il en va de même pour la programmation. Elle est avec l'algorithmique, la théorie de l'information, l'architecture et les matériels l'un des quatre grands domaines de l'informatique, constituant une clé de voûte où les quatre arcs qui structurent l'informatique se rejoignent, A ce titre elle est déjà incontournable. Elle permet de comprendre ce qu'est l'informatique, de percevoir sa « nature profonde », de s'en imprégner. Pour s'approprier des notions (fichier, protocole de communication, « verrou mortel »…), rien de tel que d'écrire des « petits » programmes.

Cela vaut également pour l'apprentissage des autres disciplines. Encore faut-il que les élèves sachent programmer ! La programmation est un élément de cursus informatique apprécié des élèves, car elle les place dans une situation active et créative, dans laquelle ils peuvent eux-mêmes fabriquer un objet. On constate en effet avec l'ordinateur une transposition des comportements classiques que l'on observe dans le domaine de la fabrication des objets matériels. À la manière d'un artisan qui prolonge ses efforts tant que son ouvrage n'est pas effectivement terminé et qu'il fonctionne, un lycéen, qui par ailleurs se contentera d'avoir résolu neuf questions sur dix de son problème de mathématiques (ce qui n'est déjà pas si mal !), s'acharnera jusqu'à ce que « tourne » le programme de résolution de l'équation du second degré que son professeur lui a demandé d'écrire, pour qu'il cerne mieux les notions d'inconnue, de coefficient et de paramètre. Ces potentialités pédagogiques de la programmation, qui favorisent l'activité intellectuelle, sont parfois paradoxalement et curieusement oubliées par des pédagogues avertis (qui, par ailleurs apprécient les vertus de l'ordinateur et d'internet, outil pédagogique).

De plus, la programmation est une excellente école de la rigueur, de la logique. Vraiment, pourquoi s'en priver ?

Posté par
pgeod
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 21:04


Je plussoie à la proposition de J-P et je trouve la remarque de Tiwaz
sur l'algorithme d'Euclide et la recette de cuisine très à-propos.  

Je pense effectivement que l'enseignement de l'algorithmie en secondaire
doit se concentrer, en premier lieu, sur l'apprentissage des seuls outils logiques
en rapport avec les objectifs qui sont ceux du programme du lycée, permettant de
concevoir un processus de traitement des données.

Dire, comme le rapporte Mariette que les profs d'info à la fac considèrent que pour eux
"l'algo, c'est papier/crayon" est sans doute caricatural pour plus d'un des intervenants
précédents, mais cela fixe bien les idées.

ET ce n'est pas parce que certains passionnés sont passés directement au langage de
programmation avec succès que la démarche intellectuelle ou méthodologique est la meilleure.
Dans les écoles d'informatique justement, on insiste sur l'analyse et la modélisation
du problème sous forme logique, avant même de passer à écriture du programme en langage machine,
avant même d'évoquer les problèmes physiques ou matériels ou les problèmes d'optimisation.

Qu'on veuille ensuite, pour la beauté ou pour l'intérêt du sujet, transcrire cette modélisation
des traitements (et des données pour ceux qui font de l'informatique de gestion) en langage
informatique, n'est pas antinomique; c'est une prolongation du geste qui peut avoir
valeur pédagogique.

Mais il faut savoir reconnaître les priorités. Savoir modéliser, même sommairement,
même un problème simple, est un apprentissage qui peut être utile dans d'autres domaines
d'activité que l'informatique. L'algorithmie n'est pas un domaine réservé à l'informatique.



  

Posté par
Tiwaz
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 21:44

@gasche Oui, je suis certainement allé trop loin en conjecture, désolé. Je réagissait sur le terme "langage sous-jacent" et le fait de toujours détailler plus les algorithmes pour se rapprocher de l'implémentation réelle du programme. Alors effectivement j'en convient, dans le cadre du développement d'un logiciel il faut tenir compte des moyens à disposition lors de la conception pour pas se retrouver coincé ou avec des solutions peu adaptées aux outils employés. Mais au lycée pour des élèves qui pour la majorité n'auront aucune connaissance de la programmation, l'algorithmique doit dans un premier temps rester à un degré d'abstraction plus élevé et ne pas se soucier des spécificités techniques lié à tel ou tel langage de programmation.

Posté par
gasche
re : Enseignement de l'algorithmique : quel logiciel/langage ? 02-09-12 à 21:59

Le problème dans ce raisonnement ("c'est plus facile de ne pas apprendre à programmer") est que je ne vois pas quel serait l'intérêt des élèves pour l'algorithmique. Après les langues mortes (qui ont auprès des élèves les succès que l'on sait), on invente les langages informatique morts, qui ne permettent pas de parler avec un ordinateur. Vous allez faire comment pour intéresser les gens ? Leur expliquer qu'Euclide, c'était un vrai dur, et il faisait avec calame/parchemin ? Leur vanter les mérites des recettes de cuisine (.. enseignées par un prof de maths) ? Leur expliquer que la capacité à "modéliser des problèmes" leur sauvera la vie plus tard ?

Je ne veux pas dire qu'il faut tomber dans l'excès inverse en appâtant les élèves avec des "vous saurez écrire des jeux vidéos". Mais faire tourner un petit programme qu'on a écrit c'est quand même quelque chose d'unique qui fait la différence entre une matière rébarbative enseignée par des incompétents et quelque chose de nouveau, créatif et intéressant. À mon avis cette différence remplace à elle seule tous les hypothétiques avantages pédagogiques du "pseudo-code", et je suis désolé de voir que vous n'êtes pas d'accord.

Je connais pas mal de gens qui ont fait de l'algorithmique au lycée, aucun qui se soit contenté du pseudo-code ou même qui ait mis l'accent sur cette aspect de son apprentissage. J'ai passé beaucoup de temps à aider des collégiens et lycéens à apprendre à programmer en autodidactes par forums web interposés, et je n'ai jamais eu l'impression qu'après "if" et "while" ils n'avaient plus d'espace de cerveau disponible. J'ai donné des notions de complexité algorithmique à une partie de ces gens-là, et il me paraît évident qu'ils n'y auraient pas attaché d'importance s'ils n'avaient pas, simultanément, l'expérience pratique de la programmation.

(Plus technique: je pense que l'argumentation sur "même en école d'ingénieur on insiste sur les prérequis et la modélisation du problème" fait une confusion entre la conception de systèmes logiciels complexes, qui demande effectivement des efforts de modélisation préalable, et l'écriture de petits programmes jouets pour se familiariser avec la programmation, où l'effort de modélisation est moindre et on peut souvent se passer d'une version écrite formalisée. Tout comme en histoire, en français ou en biologique, on apprend à faire des plans détaillés pour des dissertations, mais ça vient seulement après qu'on a appris à écrire des réponses d'un ou deux paragraphes à une question plus simple.)

Posté par
J-P Posteur d'énigmes
re : Enseignement de l'algorithmique : quel logiciel/langage ? 03-09-12 à 10:25

gasche,

Le but, en Secondaire, n'est pas ou ne devrait pas être de "se familiariser avec la programmation, où l'effort de modélisation est moindre et on peut souvent se passer d'une version écrite formalisée." mais bien de développer l'esprit logique et de réflexion par l'analyse de problèmes simples (puisque en Secondaire).

Le but, à mon sens, dans le Secondaire est de tenter d'améliorer l'analyse et pas celle de parfaire la programmation.

On a trop tendance à confondre Analyse et Programmation (à cause du fait que certains sont analyste-programmeur), mais ce sont deux "métiers" bien différents.

Dans le Secondaire, sans prétention d'apprendre un "métier", loin s'en faut, c'est bien l'approche analyse qui devrait primer.

Malheureusement, pour les raisons évoquées dans mes messages précédent, il est bien difficile de ne faire que cette partie utile qu'est l'analyse et on est presque obligé de passer à l'écriture du programme pour le faire "tourner".

Ceci, ne concerne évidemment pas les études Secondaires dans des filières dédiées à l'informatique, cela c'est une autre histoire.

Posté par
pompompom
re : Enseignement de l'algorithmique : quel logiciel/langage ? 03-09-12 à 22:51

Je comprends J-P, mais regardons l'exemple suivant :

pseudo-code :

Tant que (x > y)
    Faire:
        x = x + 42
        Afficher x
    Fin
Fin

Python :

while x > y:
    x += 42
    print(x)

Mise à part une syntaxe différente, il n'y a pas de changement fondamental (ni avec un autre langage aussi classique) vous remarquerez.
Donc tant qu'à faire autant utiliser ce vrai langage qui existe et qui permettra aux élèves de s'amuser un peu avec durant leur temps libre si l'envie leur en prend. Pourquoi s'en priver puisqu'au final on atteindra le même but et sans que les élèves aient plus à apprendre ? (enfin on considère que les mots anglais "while" et "print" sont acquis en terminale, quand même).
C'est vraiment dommage !

Personnellement, si j'étais en terminale je n'irais certainement pas prendre cette spécialité informatique si je savais qu'on n'y faisait que écrire du faux code sur des feuilles, vraiment.

C'est aussi une question d'interactivité. J'aime savoir que les élèves apprécient mes cours, mais hélas en maths c'est pas le cas souvent. Je vois dans cet enseignement la possibilité d'enfin donner un cours pas comme les autres, un cours qui va enfin me permettre d'enseigner des choses que les élèves trouveront sympa,* grâce à l'utilisation d'un véritable langage qu'il pourront expérimenter à la maison.

Second avantage : je ne veux pas être harcelé par tout le monde pour savoir comment on écrit du pseudo code. Grâce à un vrai langage, je dis aux élèves de lire la doc et me voilà tranquille ! (je plaisante un peu bien-sûr).

Posté par
carpediem
re : Enseignement de l'algorithmique : quel logiciel/langage ? 03-09-12 à 23:16

je suis d'accord avec pour le "vrai langage" informatique plutôt que ces simulacres de langages...



et quelques mots d'anglais ne sont pas insurmontables et l'occasion de faire le lien avec les disciplines linguistiques ...

c'est de plus l'ocasion d'apprendre/travailler la méthode, la structure et l'ordre et l'organisation et l'occasion de voir qu'écrire proprement à un intéret en particulier lorsque le programme bugue....

Posté par
helpaistos
le langage 19-11-12 à 10:15

Je vous propose de regarder  ce livre

http://macros.edebal.fr/

Il  apprend à programmer en utilisant le JavaScript
On utilise l'environnement de développent de Google dans le Cloud
Rien à installer il faut juste se créer un compte chez Google
Des tutoriaux nous prennent la main dés le début et les chapitres sont illustrés de nombreux exemples



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !