Tag Archives: informatique

Informatique (sans ordinateur), partie 1

Pendant les vacances, avec mon fils, on s’est amusé à faire les premières activités proposés dans le manuel Informatique Sans Ordinateur, disponible sur http://csunplugged.org/ (où plusieurs activités complémentaires peuvent être téléchargées, mais en anglais seulement). Pour des raisons personnelles, mon fils est de plus en plus amené à utiliser l’ordinateur à l’école. Et je dois avouer que ça me gêne de la voir manipuler un outils qu’il ne maîtrise pas vraiment (je renvoie d’ailleurs à un billet de Dr Goulu qui disait la même chose au début de l’année). Que les choses soient claires : je ne prétend pas non plus maîtriser l’informatique ! Mais comme je l’ai déjà raconté sur ce blog, à son âge, je codais mes premiers jeux (souvent en recopiant des codes en BASIC), et j’ai l’impression que manipulant les ordinateurs depuis presque 30 ans m’a permis d’avoir un peu de recul, en tous les cas plus que lui. Et je dois avouer que le manque de culture en informatique de la génération entre la mienne et celle de mon fils me surprend. Bref, comme je l’avais dit dans un précédant billet, ça me dérange qu’une génération autant amenée à utiliser l’outil informatique en sache aussi peu à ce sujet. Aussi, quand j’ai découvert ce petit programme d’activités le mois dernier, j’ai eu envie de tenter l’expérience.

Au départ, je pensais proposer les activités à mon fils et à ma fille (qui a 8 ans) mais cette dernière était plongée dans des dessins quand on a débuté, et je n’ai pas réussi à la faire décrocher. Pour ceux qui veulent tenter l’expérience, il y a une logique dans les activités, et je pense qu’il serait dommage se rater les premières. Bref, je n’ai pas re-proposé à ma fille de se joindre à nous. Mais on verra aux prochaines vacances….

Le document propose une douzaine d’activités (davantage si on traîne sur http://csunplugged.org/activities). La première partie (que je vais évoquer ici) porte sur la représentation de l’information.

  • section 1 : le système binaire

La première activité est vraiment bien faite. On apprend la base 2, l’écriture en 0 et en 1, les codes ASCII, et les notions de 32 et 64 bits. Histoire d’illustrer, je vais coder un peu (sur ordinateur cette fois) pour expliquer comment ça fonctionne.

> base2=function(x,n=8){
+ Base.b=rep(0,n)
+ ndigits=(floor(logb(x,base=2))+1)
+ for(i in 1:ndigits){
+ Base.b[n-i+1]=(x%%2)
+ x=(x %/% 2)}
+ plot(0:1,0:1,xlab="",ylab="",
+ axes=FALSE, xlim=c(0,n),ylim=c(0,1),col="white")
+ for(i in 1:n){
+ polygon(i-1+c(.1,.1,.9,.9),c(.1,.9,.9,.1),lwd=2,
+ col=c("white","red")[1+(Base.b[i]==1)])}
+ return(Base.b)}

On découpe des bouts de cartons, et on les juxtapose, de manière à écrire des nombres.

Regardons par exemple le nombre 17. Rouge pour un 1, et blanc pour un 0.

> base2(17)
[1] 0 0 0 1 0 0 0 1

Le premier jeu est d’écrire quelques nombres, pour se familiariser. Ensuite, on voit que c’est même facile de faire des opérations de base. Par exemple, si on multiplie par 2, c’est facile : on décale vers la gauche, et on rajoute un carré blanc, tout à droite

> base2(17*2)
[1] 0 0 1 0 0 0 1 0

Amusant, non ? On peut aussi faire des additions, par exemple, 12 s’écrit

> base2(12)
[1] 0 0 0 0 1 1 0 0

et si on somme 12 et 17, on obtient

> base2(12+17)
[1] 0 0 0 1 1 1 0 1

où on raisonne comme en base 10. En fait, dans cet exemple, on retrouve que 0+1=1+0=1 et que 0+0=0 (oui, il n’y a pas de retenue dans cet exemple). Ensuite, on utilise une décomposition en nombre de l’alphabet pour coder des lettres (A-1, B-2, C-3, etc), puis rapidement, on passe aux codes ASCII, C’est très ludique ! Je dois avouer qu’on en a profité pour faire une digression par les codes secrets, mais j’en reparlerais une autre fois. Bref, cette première activité nous a emballé !

  • section 2 : pixeliser et dessiner.

Suite logique de l’étape précédente, on a ensuite évoqué la pixellisation. Cette activité me parlait beaucoup, car c’est précisément ce que je faisais quand j”avais l’âge de mon fils (ou presque). Sur le MO5 de la maison, il y a avait essentiellement deux jeux, sur cassettes: un jeu de voitures, et super tennis. Au tennis, les personnages étaient assez simples avec 4 positions possibles: l’attente, le service, le coup droit, et le revers. Ensuite, la figure était juste translatée (on avait déjà évoqué ce point il y a quelques mois).

Mais autant ça me parle énormément, autant je me suis demandé ce que ça pouvait dire aujourd’hui, car les images sont incroyablement lissées… On a pris une image sur mon ordinateur, et on a zoomé, zoomé…

… en vain. On ne voit plus vraiment les pixels sur les dessins. C’est dommage ! Heureusement, j’ai fini par trouver quelques exemple pour illustrer ce concept (finalement assez théorique) de la pixellisation. Je ne me sentais pas très à l’aise pour parler de lissage avec mon fils. Ce sont des choses que j’explique à l’occasion à mes étudiants, et ça me gêne que mon fils de 11 ans sache plus de choses que mes étudiants. En fait, ce dilemme m’a tiraillé tout au long de nos activités, pour être honnête… D’un côté, ce sont des exercices pour enfants de primaire, et de l’autre, ce sont des choses que certains étudiants en formation universitaire de mathématique se devraient de maîtriser.

Pour revenir un peu à l’activité, c’était amusant, et ça annonçait un peu le principe de la compression (qui viendrait avec la prochaine activité). Mais trouver une tasse, et une image de Saturne en coloriant des cases, ça a vite lassé mon fils. On a fini par abandonner sans vraiment finir l’activité. Cela dit, j’ai découvert par la suite qu’il y avait des activités amusantes en ligne, sur http://csunplugged.org/activities, avec en particulier une discussion sur les traits et les cercles (en anglais seulement)

  • section 3 : compresser et zipper

Cette activité était…. surprenante. On a joué avec des algorithmes de compression, type LZ77 utilisé pour zipper des fichiers. Le principe est assez amusant…. Par exemple. dans la phrase

on retrouve des blocs de lettres. Alors l’idée (difficile à suivre si on se limite aux indications données) est que si on a plus de 2 lettres qui se répètent, on peut faire un pointage.

On va alors remplacer le second bloc par de l’information expliquant aller chercher l’information,

Aussi, la phrase devient

Autrement dit, on lui dit de reculer d’un certain nombre de caractères, et d’utiliser un bloc de caractères, d’une certaine longueur. Amusant non ? En plus, on peut utiliser une écriture récursive, et remplacer par des lettres non encore définies. Comme le joli exemple suivant

On recule de 2 lettres, et on prend un bloc de 3 lettres. Amusant non ? C’est facile à faire, et on peut facilement lire un fichier compressé. Par contre, compresser soit même un texte est plus compliqué ! On s’est longtemps interrogé sur la marche à suivre, car l’aogorithme est mal expliqué. Manifestement, on part de la gauche, et si on retrouve un bloc de 2 caractères déjà lu (ou plus), on pointe dessus. Manifestement, selon ce qu’on y lit, on peut passer de 2500 caractères à 500. C’est dommage que la compression en question ne soit pas mentionnée. Par contre, on imagine bien que plus le texte est long, plus on va retrouver des blocs déjà vus. Et l’idée d’illustrer par un poème est brillante !

On s’est bien amusé pendant cette activité, on a fait des essais, mais on ne sait pas si ce qu’on fait est “optimal“. Cela dit,  m’a donné envie de lire davantage, d’autant que plusieurs articles évoquent ce point (et que la notion d’information et d’entropie se cachent derrière, mais on va la voir dans quelques sections).

  • section 4 : gérer les erreurs et l’exemple des codes barres

On a ensuite une activité réellement amusante, sur la gestion des erreurs. Ça commence par un petit tour de magie et l’écriture binaire…. On considère la grille suivante (avec les cartes utilisées dans la première activité: une face rouge, une face blanche)

Les couleurs ont étés mises au hasard… on a constitué une grille 5×5 en posant les cartes au hasard (ce sont les cartes sur le tapis bleu). Pour ceux qui sont autour… c’est le truc du tour de magie. Maintenant, je lasse mon fils retourner une carte au hasard, sur le tapis bleu (en fait, je pense qu’il peut retourner celle qu’il veut)

Pendant qu’il la retournait, je n’ai pas regardé, et il va falloir maintenant retrouver quelle carte a été retournée… En fait, le truc pour la retrouver, c’est que les cartes à droite, et en bas, ont été mises de telle sorte que le nombre de cartes rouges par ligne, et par colonne soit pair !

En plus, si deux cartes avaient été retournées, j’aurais aussi pu les retrouver. Amusant non ? L’idée est vraiment géniale…. Ensuite, on apprend à vérifier les codes d’identité bancaire ou de code ISBN, pour les livres. Oui, le code qui figure sur les livres, au dos.

Bon, le soucis est que sur ce code barre, il y a manifestement un problème, car le code généré n’est pas le bon. En fait, le code ISBN qu’on va utiliser est le suivant

> isbn=1466592591
> checkcode=function(n){
+ l=as.character(n)
+ while(nchar(l)<10) l=paste("0",l,sep="")
+ a=substr(l,1,9)
+ y=as.numeric(substr(l,10,10))
+ x=as.numeric(unlist(strsplit(a,"")))
+ s=sum(x*(10:2))
+ z=11-(s%%11)
+ return(z==y)
+ }

Sur notre code à 10 chiffres, le dernier chiffre va servir à vérifier si les premiers sont bons, ou pas. Tout est expliqué dans la définition du International Standard Book Number sur Wikipedia. C’est presque simple, à condition de maîtriser le reste de la division par 11 (comme le montre le code précédant)

> checkcode(isbn)
[1] TRUE

On a pris quelques livres dans la bibliothèque, et je lui demandais de me dicter le code…. C’était assez amusant comme exemple… Mais mon fils a voulu essayer un nombre au hasard… et il a trouvé un code ISBN du premier coup…. Bon, il avait une chance sur 12.

> mean(Vectorize(checkcode)(trunc(1e10*runif(1000000))))
[1] 0.08327
  • section 5 : jeu du “devine le chiffre auquel je pense” et système binaire

La dernière section a été de loin la plus intéressante ! On effleure l’information (au sens de Shannon) et le logarithme (en base 2)… J’avais évoqué des idées similaires dans un vieux billet, justement, suite à un jeu avec les enfants. On voit en particulier la construction par arbre de la méthode dichotomique… Par exemple, si je pense à un nombre (entier) entre 0 et 7, la méthode pour trouver le nombre, la plus efficace, est la suivante :

Ce qui est amusant, c’est qu’on retrouve la décomposition en base binaire des nombres,

avec d’abord 2² puis 2¹ et enfin 2⁰. Amusant, non ? On a ensuite fait un test (et ma fille est venu se joindre à nous). On a commencé par “choisir un nombre entre 1 et 100” puis “choisir un nombre entre 1 et 1000“, à tour de rôle. On a vu qu’il fallait environ 7 coups pour réussir avec 100 chiffres possibles, et une dizaine avec 1000. Sans parler de logarithme, on a vu qu’il fallait chercher les exposants de 2 pour attendre 100, ou 1000.

Mais le plus intéressant, c’est que j’ai commencé, pour montrer qu’on divise en deux, à chaque fois. Je commençais avec “plus grand que 50 ?” puis “plus grand que 25 ?” puis “plus grand que 12 ?” etc. Mon fils a opté pour une stratégie plus étrange, en commençant par couper au milieu “plus grand que 50 ?” puis (directement) “plus grand que 5 ?“. En fait, en jouant plusieurs fois, je me suis rendu compte que sa stratégie pouvait être (en quelque sorte) optimale, car sa sœur ne prend visiblement pas des nombres de manière uniforme entre les deux bornes: elle a tendance à prendre des petits ou des très grands nombres. Sur une partie, il a ainsi être plus rapide que ma stratégie soit-disant optimale, en gagnant en 5 coups. On a ensuite eu une longue discussion sur ce que pouvait être la stratégie optimale. C’était vraiment une discussion intéressante… qui s’est poursuivie avec l’activité suivante, de classement et de tri. Mais on en reparlera bientôt !

Quand on voit les ressources qui traînent en ligne, je ne comprends pas que l’enseignement de l’informatique en primaire ne soit pas obligatoire : c’est incroyablement ludique ! Bref, on s’est vraiment bien amusé avec ces activités, et on a appris plein de choses. Bon, peut être que le fait d’être resté autour de -30°C ces derniers jours n’a pas vraiment permis de proposer d’alternatives…

Hackers (par Steven Levy)

Ce soir, j’ai pris un peu de temps (au lieu d’avancer le corrigé pour mon examen) pour finir les dernières pages qui me restaient de L’Ethique des Hackers, traduction en français de Hackers: Heroes of the Computer Revolution, par Steven Levy. Et je vais prendre un peu de temps pour en parler ici, parce que ce livre m’a captivé (et poussé à en acheter d’autres car je suis resté sur ma faim, mais on en reparlera plus loin).

Avant de commencer, pour être honnête, je dois avouer que le style m’a un peu dérouté (surtout au début) et j’ai un peu regretté de ne pas l’avoir acheté en anglais. Le style m’a fait pensé à Tom Holland, par exemple, qui romance énormément l’Histoire. Par moment, on a des doutes, et on se demande s’il n’en fait pas un peu trop, en prêtant à ses personnages des propos fictifs, et imaginés. Mais d’un autre côté, cette humanisation permet de suivre davantage, et de rester accroché tout du long !

La première section est assez incroyable. Surtout pour moi qui connaît peu de choses sur les ordinateurs. Elle parle des hackers de Boston dans les années 60. C’est d’ailleurs fascinant de noter (ça reste vrai assez longtemps dans le livre) que le mot hacker est très souvent associé à hacker de matériel. Autrement dit, les hackers ne font pas du code, ils font avant tout de la soudure, du câblage, et du hardware. On comprend vite pourquoi le Tech Model Railroad Club du MIT – un peu exotique quand on y pense – était au cœur de cette bande ! J’étais content de retrouver des histoires que pouvait raconter André, un informaticien que je côtoyais quand je travaillais à l’INSEE, et qui avait connu l’époque des cartes perforées, et des gros algorithmes pour manipuler un fichier de recensement avec plusieurs dizaines de millions d’enregistrements. Car malgré tout, Levy parle un peu de code et d’algorithme, et surtout de collaboration : les codes sont libres, l’information doit circuler. Bref, Levy parle de choses qui me parlent énormément… Le seul reproche sur cette période est qu’il y a peu de photos.

Par exemple, j’ai découvert l’importance de Spacewar, jeu que l’on voit longuement évoqué… mais je me demandais en permanence: mais à quoi ça peut ressembler un jeu de fusées en 1960 (la seule photo est celle représentée au dessus) ? Eh bien, ça ressemble à ça…

Décevant, non ? un peu je trouve… La première partie est vraiment instructive, mais les étudiants de Boston passent pour des fous, autant prévenir. En fait, j’ai nettement préféré la seconde partie, correspondant aux années 70, sur la côte ouest cette fois, où on quitte le MIT pour Berkeley. D’ailleurs, en lisant cette partie, j’ai regretté de ne pas avoir eu le temps d’aller au Computer History Museum cet été, lorsque nous étions à San Francisco (il va falloir y retourner !).

Dans cette partie, on commence à parler de micro-informatique, de BASIC et de FORTRAN. Et de philosophie de l’informatique. J’y ai découvert la lettre de Bill Gates, datant de 1976 (il a alors tout juste 20 ans) qui pose des questions dont il est question dans tout le livre, sur la propriété des codes, sur les droits d’auteurs… autant de concepts qui me sont totalement étrangers, comme tous ceux qui passent sur le blog doivent noter. Je ne comprends pas quand quelqu’un met des © sur ses graphiques, ou quand quelqu’un me demande la permission d’utiliser mes codes dans ses notes de cours… J’avais eu une discussion avec Marin sur mon utilisation d’images sur mon blog (cela dit, j’ai supprimé mes images de Tintin) mais j’avoue que c’est un sujet qui me dépasse et que je ne comprends pas. Et en ce sens, lire sur le Homebrew Computer Club par exemple m’a permis de mieux comprendre ma philosophie vis à vis de l’informatique… J’ai appris à quel point le logiciel libre (je parle de logiciel, mais dans les années 70, on parle autant de hardware que de software) est au cœur de l’histoire de l’informatique (car plus qu’une histoire de hackers, c’est une histoire de l’informatique que livre Levy). Et au milieu de cette effervescence des années 70, en Californie, des gens comme Bill Gates sont des marginaux,

Toute la seconde partie du livre est réellement fascinante, autour de Steve Wozniak (entre autres) et du libre. La troisième partie est autour des jeux vidéos, et c’est un sujet qui me passionne moins, donc je passerais (même si j’ai appris plein de choses, et que la discussion sur la propriété et les licences commence réellement autour des jeux, on pensera aux pages sur les copies de PacMan pour ordinateurs, inspirés par les versions arcade).

Un bémol est qu’il s’agit de l’histoire américaine de l’informatique. Certes, cela englobe une grande partie de l’histoire, mais quitte à lire sur les logiciels libres, et sur la philosophie des hackers (ce qui Levy appelle éthique), j’aurais bien aimé voir apparaître des gens comme Linus Torvalds voire Eric Raymond. Cela dit, on a déjà 500 pages, et je dois avouer que j’ai appris plein de choses. Mon père m’a fait découvrir l’informatique dans les années 80, je me souviens avoir tapé du BASIC pour faire des jeux, et j’ai découvert l’informatique avant l’époque des logiciels propriétaires. Et je suis content d’avoir appris beaucoup de choses sur cette époque où les propos tenus par Bill Gates étaient les propos que peu de gens tenaient… J’ai aussi aimé lire un livre où le mot hacker n’était pas connoté négativement (je m’étais déjà énervé dans un précédant billet).

Bref, j’ai dévoré cette Ethique des Hackers (il faut dire qu’il fait froid en ce moment à Montréal, et que j’ai tendance à préférer le métro à mon vélo… ce qui me laisse plus de temps pour lire), et je vais probablement continuer, avec Where Wizards Stay Up Late sur l’histoire de l’internet… à suivre donc.

Pour la petite histoire, j’ai pris un coup de vieux le week-end dernier, quand j’ai voulu revoir (avec mon fils) War Games de John Badham (qui date de 1983). Le film m’avait beaucoup impressionné lorsque je l’avais vu, par son caractère science fiction (je pense que la réflexion sur l’utilisation de l’ordinateur m’avait alors échappé). En le revoyant, 30 ans après sa sortie, j’ai eu du mal à expliquer à mon fils ce qu’était une disquette (la 8 pouces, dans le film… même moi je n’ai pas connu ça), ou le bruit que faisait quand on se connectait sur internet… tiens, d’ailleurs, je ne vais pas bouder mon plaisir,

Surtout, dans le film, on y voit qu’un hacker est avant tout un hacker de matériel… tout comme le livre de Levy,

Bref, plusieurs expériences qui m’ont donné envie de me replonger dans l’histoire de l’informatique, pour en savoir plus ! A suivre donc !

Génération hackers ?

Je suis régulièrement effaré lorsque j’entends les parents d’ami(e)s de ma fille (la petite dernière) s’extasier que leur enfant arrive à dévérouiller “tout seul !” leur téléphone cellulaire. Le coté auto-célébration de son rejeton, je connais depuis plus d’une dizaine d’années (et je pense en avoir fait aussi ma part), mais c’est plutôt le commentaire “ah vraiment, cette génération sait tellement bien utiliser l’informatique… tu te rends compte, elle a seulement 3 ans !“.

Il serait temps de rétablir une vérité historique: je commence à me faire vieux, mais pourtant, quand j’étais à l’école primaire, on avait des cours d’informatique. Ce n’était pas comme aujourd’hui, où mes enfants ont toujours eu un ordinateur au fond de la salle (dès l’école maternelle, soit à l’age de 2 ans en France), qui servait à faire défiler des photos, ou à aller chercher des informations sur internet. De mon temps, on n’avait pas un ordinateur dans chaque classe, mais il y avait une salle informatique avec des MO5 (qui venaient de sortir). Et par informatique, j’entends par là que l’on apprenait à taper des lignes de code (on n’avait pas internet, oui, j’ai connu ces ages reculés). Ce n’était pas bien méchant: il y avait le logo, mais surtout le Basic (c’était dans le cadre du plan informatique pour tous). De manière surprenante, on était actif devant un écran, en produisant des choses !

Je me souviens avoir fait mes premiers jeux à l’age de mon fils (lui a 10 ans, mais j’étais peut-être un peu plus vieux, maintenant que je découvre les dates exactes en tapant ce billet, je vois que ma mémoire me joue des tours). Souvent, on recopiait des lignes de codes, mais quand même ! Comment se fait-il que l’aspect programmation ait été complètement enlevé des écoles, pour ne parler que d’applications ? et le plus souvent sous une forme ultra rudimentaire, pour ne pas dire mauvaise. Par exemple, je suis régulièrement effaré que mon fils n’ait pas la moindre notion de sécurité informatique (et je ne parle pas de mise en garde avant de créer une page sur Facebook… ce qui serait la moindre des choses) ! Il rentre régulièrement de l’école, m’expliquant que des copains lui ont parlé d’un nouveau site de jeux. Mais il faut s’inscrire, créer un compte, etc. L’autre jour, en discutant un peu avec lui des mots de passe, on a compris qu’il pourrait être amusant de créer un site, où les gens entreraient leur adresse électronique, et un mot de passe. Et que le mot de passe permettrait surement de se connecter sur leur adresse électronique (oui, il s’est rendu compte qu’il utilisait toujours le même mot de passe). Il pourrait alors faire des bonnes blagues en envoyant des messages à leur place ! (il a 10 ans, ses blagues sont encore relativement innocentes). On a eu une longue discussion au début de la semaine de relâche, et je me rends compte qu’il ne manque pas grand chose pour en faire un vrai hacker (j’entends par là le sens que l’on trouve sur wikipedia, “un hacker est quelqu’un qui aime comprendre le fonctionnement d’un mécanisme, afin de pouvoir le bidouiller“; il est dommage que dans l’imaginaire collectif – j’entends par là ce que l’on peut lire dans les journaux – le hacker soit aussi mal perçu, alors que c’est juste quelqu’un de curieux… la curiosité est devenu un bien mauvais défaut).

Après avoir longuement hésité (et parce que je ne trouvais pas de camps de jour qui proposait d’apprendre à faire de l’informatique), je me suis lancé: mon fils va faire du R. Lui est content car il réclame souvent à pouvoir “faire des trucs” sur l’ordinateur, et moi car j’ai l’illusion qu’il va apprendre des choses qui pourraient lui servir un jour (au moins à comprendre comment fonctionne un ordinateur). Et autant que faire se peut, j’essaye de séparer les activités familiales de ce qui pourrait s’approcher du travail. En fait, je pensais acheter python for kids (et en profiter pour découvrir un langage que j’aurais du apprendre voilà 10 ans). Mais le livre est en anglais, et mon fils n’est pas très à l’aise. Bref, je me suis lancé dans R for kids (par moi même)L’objectif était d’apprendre à faire des dessins  (un peu dans l’idée du logo je pense). De comprendre qu’un dessin était une succession de formes de base. J’ai commencé (pendant le cours d’escrime de mon fils) à taper quelques fonctions simples (carré, trait, triangle, disque, point, etc), et à coder les principales couleurs (pour qu’il les tape en français). Tout est caché dans la fonction

source("http://freakonometrics.free.fr/RforKIDZ.R")

Ensuite, on s’est lancé. Le point de départ est de faire un dessin ! Oui, c’est plus simple. Ensuite, on va définir des points, en donnant leur coordonnées à partir de la grille de fond

fond()

pour créer la grille de fond, et pour les points

A=c(0,0)
B=c(4,12)
C=c(0,12)
D=c(2,15)

On peut d’ailleurs visualiser ces points (pour vérifier qu’ils sont bien placés)

point(A)
point(B)
point(C)
point(D)

Puis on fait les figures.

carre(A,B,"gris")
polygone(C,B,D,couleur="rouge")

(dans la première version, je n’avais pas pensé faire une fonction spécifique pour les triangles) Ensuite, on rajoute un drapeau,

E=c(2,18)

pour le sommet du mat, puis pour le reste

trait(D,E,"noir",ep=2)
F=c(2,16)
point(F)
G=c(6,17)
point(G)
polygone(E,F,G,couleur="jaune")

Ce n’est pas du code, ça…. Ben, un peu quand même…. surtout quand on a vu qu’on pouvait translater une figure,

h=15
A=c(0+h,0)
B=c(4+h,12)
C=c(0+h,12)
D=c(2+h,15)
E=c(2+h,18)
carre(A,B,"gris")
polygone(C,B,D,couleur="rouge")
trait(D,E,"noir",ep=2)
F=c(2+h,16)
G=c(6+h,17)
polygone(E,F,G,couleur="jaune")

Et hop, on a deux tours.

Je pense que c’est là le cœur de la programmation: comprendre qu’il y a une forme de base, et qu’après, on ne fait que répéter. Ensuite, au centre, on a fait le mur, et on a mis les créneaux, là encore, en comprenant que c’était la même figure, translatée plusieurs fois…

A=c(4,0)
B=c(15,8)
carre(A,B,"gris")

A=c(5,8)
B=A+1
carre(A,B,"gris")

et puis on répète

A=c(7,8)
B=A+1
carre(A,B,"gris")

A=c(9,8)
B=A+1
carre(A,B,"gris")

etc…

(on a vu au passage que si on ne compte pas utiliser un point, on peut donner son nom à un autre) Enfin, pour faire le mur et la porte, on a vu qu’on avait le choix: Le plus simple (après de longues négociations discussions) a été de faire un rectangle, puis de faire un trou carré, et un cercle (en blancs).

A=c(13,8)
B=A+1
carre(A,B,"gris")

A=c(8,0)
B=c(12,4)
carre(A,B,"blanc")

C=c(10,4)
disque(C,2,"blanc")

Pas mal ? Bon, maintenant, ça me gêne un peu. Parce que je ne suis pas un bon codeur, et je vais apprendre de mauvais réflexes à mon fils (ou mes enfants, car ma fille a fini par participer, mais on verra plus tard ce qu’elle a fait).

Le plus marrant, c’est qu’on a vu comment faire un film: on a construit une voiture (assez sommaire, j’en conviens, les ingénieurs pesteront surement en voyant notre boite à chaussures avec deux roues).

dessin=function(x){
fond()
A=c(2+x,2)
B=c(6+x,4)
C=c(3+x,2)
D=c(5+x,2)
carre(A,B,"vert")
disque(C,.75,"noir")
disque(D,.75,"noir")
}

(c’est moi qui est codé la fonction, on verra ça plus en détails une prochaine fois). Et ensuite, on l’a faite se translater, de la gauche, vers la droite: on commence par taper

dessin(0)

puis

dessin(1)

et

dessin(2)

etc… en allant vite, on crée du mouvement…

Amusant, non ?

Ma fille, elle a opté pour un dessin plus traditionnel… le fameux “maison avec arbre et arc en ciel”,

Voilà ce qu’on a pu faire en quelques heures… Je pense qu’on pourrait faire mieux, et je suis ouvert à toutes suggestions: sur la façon d’apprendre à coder, sur l’interface (on utilise R-studio: on code dans la fenêtre de gauche, on utilise l’icône “run” et le dessin s’affiche à droite), sur d’éventuelles applications amusantes, ou des expériences menées par des instituteurs qui veulent apprendre les bases de l’informatique à leurs élèves. Je trouve énormément de ressources en anglais, comme le livre python for kids dont je parlais au début (ou les sites dédiés aux jeux que l’on code soi-même, en python, comme inventwithpython.com/, qui me font penser à ce que je faisais quand j’étais petit), mais je pourrais citer le scratch. Car si la France semble avoir été pionnière en 1980, je ne vois plus grand chose ces temps-ci, en français… Mais je ne sais peut-être pas bien chercher dans la communauté francophone.