-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrapport_2014-2015.html
448 lines (361 loc) · 19.9 KB
/
rapport_2014-2015.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
<!DOCTYPE html>
<!-- from http://bost.ocks.org/mike/sankey/ -->
<html>
<head>
<meta charset="utf-8">
<title>Rapport 2014-2015 -- MicroAlg</title>
<meta name="description" content="Langage et environnements dédiés à l’algorithmique.">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="keywords" content="microalg, algo, algorithme, algorithmique, lisp, langage, environnement" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="emulisp/emulisp_core.js" type="text/javascript"></script>
<link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="web/style.css" />
<script type="text/javascript" src="web/ide_injections.js"></script>
<script type="text/javascript" src="web/parenedit.js"></script>
<link type="text/css" href="web/parenedit.css" rel="stylesheet" />
<script type="text/javascript" src="web/showdown.js"></script>
<script type="text/javascript" src="web/showup.js"></script>
<link type="text/css" href="web/showup.css" rel="stylesheet" />
<script src="http://d3js.org/d3.v2.min.js?2.9.1"></script>
<script src="http://bost.ocks.org/mike/sankey/sankey.js"></script>
<link rel="icon" href="visuels/logo_microalg.ico" />
<style> // for the Sankey diagram
#chart {
height: 500px;
}
.node rect {
cursor: move;
fill-opacity: .9;
shape-rendering: crispEdges;
}
.node text {
pointer-events: none;
text-shadow: 0 1px 0 #fff;
}
.link {
fill: none;
stroke: #000;
stroke-opacity: .2;
}
.link:hover {
stroke-opacity: .5;
}
</style>
</head>
<body class="microalg">
<div class="navbar">
<a href="./">Accueil</a> :
<a href="#top">Haut de page</a>
</div>
<div id="my-body"></div>
<script type="text/markdown">
# Rapport MicroAlg 2014-2015
## Introduction
2014-2015 est la première année scolaire où MicroAlg a été utilisée. Une
promotion de 36 élèves préparant le BTS SIO (Brevet de Technicien Supérieur,
Services Informatiques aux Organisations) a travaillé U22 (algorithmique) en
utilisant ce langage et les environnements qui lui sont associés.
Je remercie très sincèrement cette promotion qui a su donner des retours très
intéressants au fur et à mesure de l’année, et qui a su être patiente lorsque
des problèmes (rares) sont survenus.
[Cette page](http://galerie.microalg.info/profgra:peda:progression_2014_2015)
donne un aperçu de la progression pédagogique mise en place lors de cette
année scolaire.
Le reste de ce document est constitué :
* de l’[avis du concepteur](#lavisduconcepteur) ;
* de l’[avis des cobayes](#lavisdestudiants) (exploitation du questionnaire
passé aux étudiants) ;
* d’une [conclusion](#conclusion).
## L’avis du concepteur
### Complétude
Le langage va encore évoluer, s’enrichir (mais pas trop), mais aujourd’hui le
minimum vital est là. D’une part le langage est complet
<a href="http://fr.wikipedia.org/wiki/Turing-complet" class="wp">au sens de Turing</a>
puisqu’un interpréteur <a href="http://fr.wikipedia.org/wiki/Brainfuck" class="wp">BF</a>
a été écrit en MicroAlg (voir [ici](https://github.com/Grahack/bf.malg/)).
D’autre part je le considère comme complet pour enseigner les bases de l’algorithmique
(variables, conditions, boucles, listes).
Il manque cependant une sortie graphique (géométrie, tortue, jeux), qui
devrait être réalisée dans les prochains mois via
<a href="http://processing.org/" class="offi">Processing</a> (Java et JS).
Je remercie encore ici Alex Burger et Jon Kleiser, les principaux géants dont
les épaules portent MicroAlg.
### Concepteur ?
Concepteur est un bien grand mot. Les grands principes avaient été réfléchis
bien avant l’implémentation (langage en français et simple, facilité pour se
mettre au travail…), mais certains points importants n’avaient pas été
anticipés. Je veux parler des points suivants :
* Positif ou négatif, je ne sais pas encore
* [MicroAlg est un Lisp](#microalgestunlisp)
* Positifs
* [Ses parenthèses sont colorées](#sesparenthsessontcolores)
* [Instructif même pour les initiés](#instructifmmepourlesinitis)
* [Le pseudo-aléatoire est reproductible](#lepseudoalatoireestreproductible)
* Négatifs
* [Les messages d’erreur](#lesmessagesderreur)
* [La gestion des nombres non entiers](#lagestiondesnombresnonentiers)
La rencontre avec l’imprévu était prévue. Comme il est très difficile de tenir
un cahier des charges d’un projet informatique, une sur-analyse aurait été une
perte de temps. Au fur et à mesure des retours de collègues ou d’étudiants,
les informations ont aidé à prendre des décisions.
#### MicroAlg est un Lisp
Au départ prévu pour être embarqué dans le langage
[Tcl](http://fr.wikipedia.org/wiki/Tool_Command_Language), il a finalement été
embarqué dans [PicoLisp](http://picolisp.com/). En effet, suite à
[une expérience](http://profgra.org/lycee/calcul.html) concluante dans le
navigateur et parce que j’avais une furieuse envie de me servir de PicoLisp,
je me suis dit que la syntaxe simplissime de Lisp serait un point fort.
On a donc la syntaxe universelle décrite [ici](http://microalg.info/doc.html#syntaxe).
Le revers de la médaille est l’écriture d’expressions mathématiques. En effet,
pour encoder `2x+1`, il faut taper `(+ (* 2 x) 1)`. Quelque part, c’est
casse-pieds, mais le revers du revers de la médaille est que ça force
l’apprenant à bien comprendre l’architecture de l’expression.
#### Ses parenthèses sont colorées
Le but de l’incorporation des parenthèses colorées était bien sûr d’aider à
la compréhension du programme, mais je n’avais pas anticipé la puissance de ce
qu’on pouvait appeler un « détail » visuel.
Voir les détails [ici](http://microalg.info/doc.html#trucs-syntaxe).
#### Instructif même pour les initiés
Même si un apprenant a déjà beaucoup programmé sur son temps libre, il y a peu
de chances qu’il ou elle ait déjà goûté à un Lisp (c’est tout de même arrivé
une année en SIO). Cela permet de repérer ceux qui savent programmer mais qui ne
comprennent pas en profondeur ce qu’ils font. Le travail qu’il leur reste à
faire avec MicroAlg me semble être très bénéfique pour compléter leur aisance
avec le code.
De plus, d’un point de vue de l’organisation des séances,
les activités ne sont pas terminées trop vite. Une trop grande
hétérogénéité ne sera jamais gommée entièrement, mais elle pourra être
atténuée.
#### Le pseudo-aléatoire est reproductible
Dans [le premier exercice](http://galerie.microalg.info/profgra:peda:listes:listes_1#tirage_de_des)
utilisant les nombres pseudo-aléatoires, les élèves avaient tous un résultat
qui m’était familier. En effet, avec PicoLisp, il faut initialiser explicitement
la graine du [générateur](http://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9rateur_de_nombres_pseudo-al%C3%A9atoires)
de nombres pseudo-aléatoires (avec [`seed`](http://www.software-lab.de/doc/refS.html#seed)).
Du coup, ils avaient vraiment tous le même résultat.
La prise de conscience de cette « limitation » a été un enchantement. En effet :
* c’est un moyen de vérifier que les exercices sont bien faits (par le prof ou
entre apprenants) ;
* c’est une entrée pour parler du concept de tirages pseudo-aléatoires.
Du coup, des travaux ont été engagés fin avril :
* Tenter de rapprocher les versions C et Java de PicoLisp dans leurs résultats
des commandes [`rand`](http://www.software-lab.de/doc/refR.html#rand) et
[`seed`](http://www.software-lab.de/doc/refS.html#seed) (voir les discussions
[ici](http://comments.gmane.org/gmane.lisp.picolisp.general/5184) et
[là](http://comments.gmane.org/gmane.lisp.picolisp.general/5199)).
Finalement, cela semble plutôt vain puisqu’il y a plusieurs versions C de
PicoLisp, ces différentes versions ne gérant pas les entiers de la même
façon, il serait difficile de les réconcilier sur `rand` et `seed`.
* Tenter d’imiter les versions C et Java avec EmuLisp (la version JavaScript de
PicoLisp) concernant ces deux commandes. En effet, la primitive utilisée pour
les tirages au sort (`rand`) utilisait directement
[`Math.random()`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random).
Finalement vain puisque les versions C et Java ne se réconcilieront pas.
Une meilleure stratégie serait d’implémenter un petit générateur simple, comme
<a href="http://en.wikipedia.org/wiki/Lehmer_random_number_generator#Parameters_in_common_use"
class="wp">MINSTD</a>.
Un autre chantier aura été d’implémenter un moyen de donner la liste des
valeurs que les appels à `Entier@` ou `Nieme@` vont retourner.
Ces modifications arriveront avec la version 0.3.15 de MicroAlg.
#### Les messages d’erreur
Un gros point négatif, détaillé [ici](http://microalg.info/doc.html#messagesderreur).
Reste une amélioration possible en utilisant les exceptions (quand elles seront
implémentées dans EmuLisp, la version JavaScript de PicoLisp).
#### La gestion des nombres non entiers
Un autre point négatif, mais moins gros. Seules les implémentations utilisant
JavaScript gèrent les nombres non entiers (avec les
<a href="http://fr.wikipedia.org/wiki/Virgule_flottante" class="wp">nombres flottants</a>).
## L’avis des étudiants
Vers la fin de l’année scolaire, un questionnaire éléctronique a été passé
aux étudiants (via [Google Forms](https://www.google.com/intl/fr_fr/forms/about/)).
Sur 36 étudiants, 31 ont répondu. Les données brutes seront bientôt publiées.
Voici quelques [statistiques](#quelquesstatistiques)
et quelques [phrases intéressantes](#quelquesphrases).
### Quelques statistiques
#### Répartitions et moyennes
Voir [le résumé fourni par Google Form](rapport_2014-2015.pdf) (au format .pdf).
#### Diagramme de flux
En gardant quelques questions parmi les trente sept, on peut construire ce
diagramme de Sankey.
Les données n’étant pas encore prêtes, voici à quoi ça va ressembler :
<div id="chart"></div>
Voir [l’article Wikipedia](http://fr.wikipedia.org/wiki/Diagramme_de_Sankey)
expliquant ce type de diagrammes, et
[la page qui m’a servi de modèle](http://bost.ocks.org/mike/sankey/).
### Quelques phrases
**Note** : pour gagner en lisibilité, les fautes d’orthographe ont été
corrigées.
Quels sont, selon vous, les points positifs de MicroAlg ?
* Simple pour débuter car c'est français
* Bon outil pour appréhender les bases de l'algorithmique voir même en tant qu'introduction à la programmation. Les instructions sont claires, la documentation sait aider les âmes en peine.
* Pouvoir faire de l'algorithme avec un langage français. Accessible à tous. Gratuit.
* Commandes en français , facile d'accès ( compréhension )
* Je ne connais pas les autres langage, je ne peux donc juger sur cette seule expérience.
* La facilité / logique d'utilisation, le fait qu'il soit en français (plus simple pour le début).
* En français
* Les commandes en français et de façon claires
* Le français, plus facile de comprendre les commandes. Son accessibilité à tous.
* C'est un langage de programmation en français ce qui facilite la compréhension, surtout lorsqu'on a du mal dans les langues, elle permet donc d'étudier la logique de l'algorithmique et non pas d'abord passer par la compréhension des termes anglais.
* Laisse une ouverture plus créative que les logiciels Algobox
* Pour tout novice ne connaissant pas l’algorithmique, MicroAlg est intéressant puisqu'il permet de faire découvrir et développer les compétences de chacun en Algorithmique.
* Le premier gros point est le langage en français.Les tutoriels si on ne se souvient plus d'une commande.La coloration des parenthèses pour savoir s'il nous en manque.
* Facile à prendre en main, pas besoin de maîtriser l'anglais.Les noms de commandes sont faciles à identifier et à retenir.
* facile pour comprendre l'algorithmie
* Son gros avantage, c'est en français. Pour certains allergique du codage en anglais (j'ai un peu de mal en anglais) cela permet de comprendre la fonction sans décrypter son utilisation via des traduction des fois bizarres je pense. Le second, les parenthèses, malgré un système de couleurs basique, cela est très utile et corriges souvent des programmes entiers.
* MicroAlg est en français, ce qui permet de mieux comprendre pour des personnes qui ont un faible niveau bilingue
* Très proche de l'algo papier et donc assez intuitif.
* Il faut s'habituer à la syntaxe pour les opérations au début (calculs).
* Le français pour les néophytes en programmation permet de retenir facilement les mots clefs.
* En français, accessible à tous
* Simplicité de compréhension (français), facilité de prise en main (simple).
* C'est en français.
* Mieux structuré par rapport à Python.
* C'est un langage qui est facile d'utilisation. J'ai trouvé que d'apprendre l’algorithmie avec ce langage à été facile pour comprendre de part le langage en Français et les nombreux tutoriels mis à notre disposition.
* Le fait qu'il y est les tutos c'est pratique. Les commandes sont en français c'est bien, mais ça veut pas dire que c'est plus facile à utiliser.
* La langue qui rend l'écriture du code plus simple et intuitif
* C'est en français donc c'est plus facile de comprendre les commandes
* Il est simple à prendre à main, en français, les parenthèses permettent de bien s'y retrouver dans son code.
* Simple pour débuter du fait que le langage soit en français.
* Le fait que ce soit en français.
Quels sont, selon vous, les points négatifs de MicroAlg ?
* Parenthèses, inversion de la syntaxe lors de calculs
* Sur le plan professionnel, il aurait été plus valorisant de faire du python, pour trouver des stages etc..
* Différents des autres logiciels d algorithmie.
* Pas encore assez connu ( utile à la vie de tout les jours )
* Certaines formulations de commandes ( commande arg1 arg 2). Le fait que le langage ne soit pas encore connu.
* Les parenthèses autour des phrases...
* Trop chargé, pas assez clair dans la syntaxe.
* Je n'en ai pas en tête, le seul regret et de n'avoir pas utilisé d'autre logiciel pour l'algorithme
* Le français ne permet pas de rendre le langage mondial.
* Un langage que pas grand monde connait, qu'on ne peut pas mettre dans un CV (Dans un CV nous pouvons normalement mettre Python)
* Lien avec la programmation. Difficile de s'approprier le langage au départ.
* MicroAlg n'est pas utilisable en tant que langage pour les Entreprises. Sinon rien à signaler.
* La difficulté à comprendre le langage au tout début. La syntaxe de certaine commandes.
* Très bien pour de l'algorithme niveau lycée mais pour notre BTS en informatique il serait important d'utiliser un langage universel dont l'on puisse se servir dans toutes les entreprises
* Je ne programme pas trop je peut pas trop parler de point négatif. Mais si je devrais expliquer certains détails cela serait les erreurs incompréhensibles , malgré leur maigres nombres. De plus, lorsque l'on travaille sur Scite, j'utilise la technique dite du "décalage de la parenthèse". Le problèmes est qu'un exercice sur scite ce décompose en plusieurs parties, et que entre chacune de ces parties on est obligés de trafiquer du code (ce qui n'est pas énormément gênant) pour afficher que ce que l'on veut.
* Parfois de la confusion, lorsque l'algorithme est trop long, avec les parenthèse même si toutefois elles définissent bien les éléments.
* Il faut s'habituer à la syntaxe pour les opérations au début (calculs).
* L'écriture des codes assez fastidieuse lorsque l'on fait beaucoup de langage autre (verbosité).
* Tous nouveau donc pas beaucoup d'exemples et solutions disponibles.
* Pas toujours claire (trop de texte), message d'erreur incompréhensible.
* C'est duuuur! Lourd parfois la structure, au début pas trop compréhensible
* La galerie, trop difficile à utiliser
* Certaines commandes sont difficiles d'utilisations.
* Il faut un certain temps pour comprendre MicroAlg et même au bout d'un an, c'est comme ci j'avais rien compris.
Et bien d’autres vers la fin du [résumé](rapport_2014-2015.pdf) (au format .pdf).
## Conclusion
En conclusion, l’aventure a assez bien commencé et va continuer.
**Mais MicroAlg a besoin de vous !**
MicroAlg attend vos contributions,
[qui que vous soyez](http://microalg.info/doc.html#contribuer) !
À bientôt.
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</script>
<script>
var scripts = document.getElementsByTagName('script');
var target_elt = document.getElementById('my-body');
for (var i = 0; i < scripts.length; i++){
var script = scripts[i];
if (script.type != 'text/markdown') continue;
var md = script.innerHTML.replace(/^\s<!--*/, '')
.replace(/-->\s*$/, '');
var markup = new Showdown.converter().makeHtml(md);
target_elt.innerHTML = markup;
}
</script>
<script type="text/javascript">
var margin = {top: 1, right: 1, bottom: 6, left: 1},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var formatNumber = d3.format(",.0f"),
format = function(d) { return formatNumber(d) + " TWh"; },
color = d3.scale.category20();
var svg = d3.select("#chart").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var sankey = d3.sankey()
.nodeWidth(15)
.nodePadding(10)
.size([width, height]);
var path = sankey.link();
d3.json("rapport_2014-2015.json", function(energy) {
sankey
.nodes(energy.nodes)
.links(energy.links)
.layout(32);
var link = svg.append("g").selectAll(".link")
.data(energy.links)
.enter().append("path")
.attr("class", "link")
.attr("d", path)
.style("stroke-width", function(d) { return Math.max(1, d.dy); })
.sort(function(a, b) { return b.dy - a.dy; });
link.append("title")
.text(function(d) { return d.source.name + " → " + d.target.name + "\n" + format(d.value); });
var node = svg.append("g").selectAll(".node")
.data(energy.nodes)
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
.call(d3.behavior.drag()
.origin(function(d) { return d; })
.on("dragstart", function() { this.parentNode.appendChild(this); })
.on("drag", dragmove));
node.append("rect")
.attr("height", function(d) { return d.dy; })
.attr("width", sankey.nodeWidth())
.style("fill", function(d) { return d.color = color(d.name.replace(/ .*/, "")); })
.style("stroke", function(d) { return d3.rgb(d.color).darker(2); })
.append("title")
.text(function(d) { return d.name + "\n" + format(d.value); });
node.append("text")
.attr("x", -6)
.attr("y", function(d) { return d.dy / 2; })
.attr("dy", ".35em")
.attr("text-anchor", "end")
.attr("transform", null)
.text(function(d) { return d.name; })
.filter(function(d) { return d.x < width / 2; })
.attr("x", 6 + sankey.nodeWidth())
.attr("text-anchor", "start");
function dragmove(d) {
d3.select(this).attr("transform", "translate(" + d.x + "," + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")");
sankey.relayout();
link.attr("d", path);
}
});
</script>
<script>
$().showUp('.navbar', {
upClass: 'navbar-show',
downClass: 'navbar-hide'
});
</script>
<script type="text/javascript">
var $_Tawk_API={},$_Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/5583e0d1cea5d22b4acfee51/default';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>
</body>
</html>