I. AL

AL est un langage éducatif conçu pour les plus jeunes (à partir de 10 ans) mais s'adressant plus généralement à tout débutant désireux d'apprendre la programmation.

AL est conçu comme un langage d'introduction aux langages professionnels. Il simplifie certains aspects et syntaxes. AL est au C / Java / Python ce que Logo est au Lisp.

Il donne également la possibilité d'explorer un large panel de mécanismes, donnant l'opportunité aux développeurs chevronnés d'explorer des terrains qui ne sont pas forcément disponibles dans tous les langages.

Ses IDE, Algoid et AlgoIDE, ont été conçus pour être simples à installer et à utiliser ; ils incluent en un seul logiciel : l'IDE, le langage, le debugger, le stepper, les librairies de haut niveau dont celle permettant de créer ses premiers jeux vidéo.

Algoid est également l'environnement parfait pour faire ses premiers pas. Tout y est sécurisé, les accès aux ressources de l'ordinateur ont étés limités afin que le système ne puisse pas être endommagé.

I-A. Principe

AL est fondé sur un constat simple. Il existe aujourd'hui un très grand nombre de langages de programmation destinés à l'apprentissage, mais :

  • soit ils sont simples, mais se cantonnent à un seul paradigme (comme le SmallBasic ou le très célèbre Logo) ;
  • soit ils sont très complets, mais leur installation, leur syntaxe, leurs idiomes et leur mise en place sont difficiles à acquérir et à comprendre.

AL tente de réconcilier ces deux opposés en proposant une syntaxe simple (20 mots clés) tout en étant multiparadigme.

L'organisation des paradigmes est pensée pour être aussi progressive que possible ; d'abord par les structures impératives, puis l'utilisation des fonctions et du fonctionnel. AL introduit ensuite l'objet et grâce à la MOP, des notions d'orienté aspect.

De plus AL est un langage de haut niveau. Toutes les considérations, tel que le typage, les pointeurs, le garbage collector, sont à la charge du langage.

I-B. Syntaxe

La syntaxe AL a été imaginée pour être la plus proche possible des standards utilisés par les professionnels. C'est-à-dire les langages issus du C.

  • Parce qu'apprendre une nouvelle syntaxe prend du temps, autant en apprendre une qui soit la plus proche de ce qui est utilisé dans l'industrie.
  • Parce que cette syntaxe est concise, moins de mots à taper sur de petits écrans, comme les smartphones.

On pourrait reprocher à la syntaxe C d'être rebutante et difficile à appréhender par les plus jeunes. Mais il n'est pas certain que de remplacer des accolades par des mots clés comme begin / end facilite réellement l'apprentissage d'un langage. Ce sont les mécanismes du langage et les aspects de bas niveau qui représentent une vraie difficulté.

Pour faciliter cette approche, AL dispose de différentes simplifications.

- La structure de contrôle Loop a été rajoutée à l'ensemble disponible en C. Cette structure permet d'introduire les boucles sans nécessairement connaître les conditions et l'incrémentation comme l'oblige la structure for :

loop
Sélectionnez
loop (10) {
  // répète 10 fois
}

- La syntaxe est conçue pour être mnémotechnique ; toutes les structures se déclarent de la même façon et ont la même logique, seuls les mots clés changent :

structures
Sélectionnez
set n = 0 ;

set f = function () {} ;

set o = object () {} ;

set a = array {} ;

- Toutes les structures sont anonymes de façon à simplifier leur imbrication et leur utilisation.

anonymes
Sélectionnez
set o = object () {
  
  set p = object () {

    set f = function () {} ;

  } ;  

} ;

o.p.f() ;

- L'exemple ci-dessus montre une autre simplification du langage. En AL, les classes ne sont pas définies mais ce sont les objets qui le sont. Chaque objet référence son prototype, ce qui lui permet d'être cloné n'importe où dans un programme.

prototype
Sélectionnez
set q = new;

- Le point-virgule, bien que conseillé, est rendu optionnel.

- Le typage est implicite, mais les opérateurs déterminent le transtypage local, limitant ainsi les ambiguïtés (comme c'est le cas du + en JavaScript) :

Opérateur par type
Sélectionnez
set a = "7" + "7" // = 14
set s = 7 .. 7 // = "77"

I-C. Concepts avancés

Pour les plus chevronnés, voici l'idiome clé du langage AL.

AL est régi par l'idiome suivant :

  • en AL, tout est expression, même array, function et object ;
  • or, en AL, toute expression est un objet ;
  • donc AL dispose de : meta-array, meta-function et meta-object (MOP).

AL offre donc la possibilité de modifier toute structure déjà définie.

Bref, AL est un langage d'apprentissage qui n'est pas réservé aux plus jeunes. Il peut accompagner l'apprentissage d'algorithmes complexes.

II. Intérêt d'Algoid

II-A. Multiplate-forme

Deux IDE sont disponibles pour apprendre à programmer en AL : Algoid sur plate-forme Android et AlgoIDE sur desktops (Windows, MacOS, Linux et Raspberry Pi).

Ils sont conçus comme le langage AL, simples mais complets.

II-B. Fonctionnalités

Ces deux IDE mettent à disposition un éditeur avec coloration syntaxique, auto-complétion et code-snippets.

Ils offrent également un debogueur, un explorateur de portée et un mode d'exécution pas à pas. Ces derniers sont des outils indispensables à la compréhension du cheminement d'un programme au travers du code source.

Image non disponible
Debogueur
Image non disponible
Explorateur de portée
Image non disponible

AlgoIDE debogueur et explorateur de portée

II-C. Fun

Algoid s'inspire du projet Logo. Il permet aux débutants, à partir de fonctions simples et d'un référentiel relatif, de mouvoir la petite tortue.

Une fois les notions de base acquises, comme les boucles, les branchements, les fonctions et les objets, il est possible de masquer la petite tortue et de programmer ses premiers jeux vidéo.

Algoid met à disposition une librairie graphique 2D simplifiée :

Image non disponible
Breakout
Image non disponible
Space invaders

Note : une librairie axée sur les sprites et permettant la gestion des animations et du son est en cours de réalisation.

II-D. Installation

Algoid et AlgoIDE sont des applications écrites en Java et donc très simples à installer et portables.

II-D-1. Android

Algoid est une apk Android. Pour la télécharger il suffit de se rendre sur le play store à l'adresse suivante.

II-D-2. Windows / MacOS / Linux

AlgoIDE est le portage de l'app android sur PC. Il est exécutable comme applet directement depuis un navigateur web à l'adresse suivante (rien à installer autre que Java).

Pour une utilisation offline, algoIDE est également disponible sous forme de jnlp Java WebStart à l'adresse suivante. Il suffit de double-cliquer pour la lancer, comme toute application standard. Les applications WebStart ont pour avantage de toujours maintenir à jour la version du logiciel si l'ordinateur est connecté à Internet.

II-D-3. Raspberry Pi

Une version optimisée d'AlgoIDE est maintenant disponible sur le Pi Store à l'adresse suivante.

Le programme d'installation se charge de tout.

II-D-3-a. Soft-Float

Si vous possédez une distribution Soft-Float de Raspbian, l'installation nécessitera celle de l'openJDK :

open-jdk
Sélectionnez
sudo apt-get install openjdk-7-jre

Une fois le JRE ou le JDK installés, il vous suffit de télécharger le jar ici, puis de le lancer avec la commande suivante :

lancement AlgoIDE
Sélectionnez
java -jar AlgoIDE-release.jar

II-E. Portabilité

Seul l'IDE et l'environnement d'exécution ont été réécrits entre les plates-formes Android, desktop et Raspberry Pi, ce qui signifie que les programmes ont le même comportement d'une plate-forme à l'autre. Seuls les événements dus aux périphériques sont différents. Lors du portage d'un script entre Algoid et algoIDE, il faut veiller à modifier les événements.

Par exemple, algo.onTouch devient algo.onDrag sur PC, algo.onTap devient algo.onClick, etc.

II-F. Performances

AL a pour but d'être ludique et quoi de plus ludique que de créer ses propres jeux vidéo ? Les jeux sont des programmes gourmands en calculs et bien que développé dans le langage Java, AL a été optimisé pour afficher des performances similaires aux autres langages interprétés.

Le benchmark suivant a été réalisé en comparaison à JavaScript et à Python sur un Mac :

Image non disponible

Note : afin d'améliorer davantage les performances, un analyseur sémantique est à l'étude.

Ces performances permettent d'imaginer toute sorte de programme dont le calcul est central, tel un mini-moteur 3D, par exemple :

Image non disponible
cube 3d
Image non disponible
splines 3d

III. Matériels pédagogiques

III-A. Communautaire

À l'heure où tout l'Internet s'invite dans nos foyers, sur nos ordinateurs, nos tablettes et notre smartphone, il serait dommage qu'un logiciel éducatif ne tire pas parti de cette abondante connectivité.

Algoid met en place différents outils communautaires pour faciliter les échanges entre les participants : un forum, accessible depuis l'application, permet d'échanger du code source entre l'IDE et les pages en un seul clic. Le forum est accessible à cette adresse.

Des outils de partage par mail, Facebook ou Google+ sont également disponibles via la plate-forme de partage Android.

Un blog sur Google+ permet également de suivre l'évolution du logiciel. À cette adresse-ci.

III-B. Tutoriels

AL dispose aussi d'une documentation complète en français et en anglais ici.

Des tutoriels sont également disponibles ici.

Ces tutoriels et exercices ont été inspirés par les travaux de Docteur Stéphane Ducasse, auteur de nombreux livres dont Squeak: Learn programming with Robots.

Ils font l'objet d'une traduction et d'une mise en page pour le site developpez.com qu'il n'est pas nécessaire de présenter ici.

En voici la liste (mise à jour régulièrement).

III-B-1. Partie I : Apprendre la programmation avec la tortue

III-B-2. Partie II : Programmation structurée

En cours de rédaction.

Pour accélérer la documentation, le projet Algoid recrute. Alors si vous avez un peu de temps à consacrer à de la rédaction, correction ou traduction, n'hésitez pas à me contacter sur CyaNn74 (at) gmail (dot) com

IV. Remerciements

Je tiens à remercier toute ma petite famille qui ferme les yeux sur ma geek attitude et me pardonne mon manque de présence… Du moins parfois.

Tout particulièrement mon fiston Tony de 12 ans qui m'a inspiré cette belle aventure le jour où il m'a posé la question suivante : « Papa, c'est quoi la programmation ? »

Je tiens également à remercier M. Stéphane Ducasse de m'avoir autorisé à m'inspirer de ses travaux et de ses exemples extrêmement bien choisis.

Un grand merci au Dr. Didier Besset et à Jérôme Layat, qui ont été d'un grand soutien durant ce long projet.

Merci également à toute l'équipe du forum developpez.com pour leurs lectures patientes, leurs corrections (plus que patientes) et leurs encouragements très appréciés. Tout particulièrement Feanorin et Thierry Leriche Dessirier pour leur relecture technique avisée et f-leb pour ses promptes corrections orthographiques.

Vos retours nous aident à améliorer nos publications. N'hésitez donc pas à commenter cet article sur le forum : Commentez

V. Annexes

Voici certains des codes sources des illustrations de ce tutoriel.

La rosace :

rosace
CacherSélectionnez
set poly = function (size, n) { 
    loop (n) { 
        algo.go (size); 
        algo.turnLeft (360 / n); 
    } 
}; 

ui.showAlgo(); 

loop(20) { 
    poly (70, 10); 
    algo.turnLeft (360 / 20); 
} 

Note : les codes sources ci-dessous sont assez longs, c'est pourquoi ils sont masqués. Pour les voir, cliquez sur la petite double-flèche Image non disponible à droite de la zone de code.

Le jeu Breakout :

breakout
CacherSélectionnez

Le jeu Space invaders :

space invaders
CacherSélectionnez

Celui du moteur 3D spline :

3d
CacherSélectionnez

Tous ces codes d'exemples sont directement accessibles depuis l'application. Les algorithmes présentés s'étendent des plus simples aux plus complexes (comme les jeux présentés ici).