Présentation
Anabole est enregistrée comme organisme de formation auprès de la Préfecture de Paris.

L'objectif des cours que je donne en informatique est de faire comprendre aux étudiants que programmer, c'est certes savoir piloter une machine, mais c'est surtout savoir manipuler les aspects formels de notre langage. Je tente de démontrer cela à travers deux points de vue :
- philosophique et logique
- historique
Les exemples que je fournis sont immédiatement illustrés par une mise en oeuvre "sur papier" ainsi que dans un logiciel comme Processing.
J'insiste beaucoup sur l'aspect "sur papier" car il me semble fondamental que les techniques de programmation soient acquises indépendamment de la machine, même si je reconnais que le plus stimulant est de voir tourner le programme...
 
Aspects philosophiques
J'appuie le cours essentiellement sur des extraits des ouvrages suivants :

-Sur la logique et la théorie de la science, Jean Cavaillès, Vrin, 1947 (écrit lorsque ce résistant était en captivité entre 1942 et 1943)

-Gödel, Escher et Bach, Douglas Hofstadter, InterEditions, 1985

-Le langage, textes choisis par Pascal Ludwig, Flammarion, 1997.

J'essaie de sensibiliser les étudiants au fait que la programmation met à l'épreuve des notions énoncées en philosophie depuis plusieurs siècles.

"Tout dans la nature se produit conformément à des règles - aussi l'exercice de nos facultés : tel l'entendement [...]. La logique est la connaissance par soi de l'entendement et de la raison d'après la forme." Kant, cours de logique.

Je restreins tout de même le champ à la linguistique.

N'étant cependant pas une professionnelle de ces sciences humaines, je suis consciente de prendre parfois quelques libertés.
 
Aspects historiques
Cette fois, je fais référence à deux autres ouvrages :

-Une histoire de l'informatique, Philippe Breton, Le seuil 1990

-Le langage électronique, Irving Adler, Marabout université, 1961.

Les travaux qui vont engendrer l'informatique sont ceux de Boole (1815-1864). Ce logicien et mathématicien anglais a mis au point une algèbre qui ne manipulait non plus des nombres mais des propositions. Les éléments de base de cette algèbre sont d'une extrême simplicité : on peut énoncer une proposition, sa négation, effectuer des "ET" et des "OU" entre des propositions.


Environ cent ans plus tard, Shannon, mathématicien lui aussi, publie une thèse à partir des travaux de Boole qui met en œuvre une algèbre des circuits dont je présente les fondements.

Je montre ensuite un panorama des différents langages de programmation qui ont émergé depuis. Cela me permet d'introduire les principes actuels mis en oeuvre dans les logiciels les plus courants.

 
Méthode
Un concentré de génie logiciel et une grosse pincée de bon sens.

La méthode que je recommande est en trois points :

-"ce qui se conçoit bien s'énonce clairement." (Boileau)
En fait, je renverse la proposition : il faut énoncer le plus clairement possible et en peu de mots ce qu'on veut faire. Cela oblige à décomposer étape par étape les actions et permet "d'accoucher" d'une conception.

-dire le non-dit
Pour éliminer au maximum les bugs.

-tester "sur papier"
Si la conception fonctionne indépendamment de la machine, il y a de fortes chances qu'elle marche une fois codée... En tout cas, les problèmes à résoudre ne seront que liés au vocabulaire de la machine.

Techniques

J'expose les techniques principales de programmation en insistant sur la notion et les manipulations de variables.

-variables
-opérateurs
-structures de contrôles (les "si" et les "boucles")
-structures de données (les listes, les tableaux)
-les commandes et fonctions
-langage orienté objets (objet / attributs / événements / méthodes)


-commenter, commenter, commenter, commenter, commenter
 
Mise en oeuvre
La création d'un programme interactif couvre toutes les notions abordées dans le cours et permet de valider ou d'interroger les principes qui ont été présentés.

Des exercices de difficulté croissante sont proposés lors de la formation qui dure environ 10 demi-journées.

En général, l'outil que je préconise est Processing, mais j'ai parfois utilisé javascript ou Flash.

A l'issue du cours, les mini-projets réalisés peuvent être présentés lors d'un rendu.

Ce que je souhaite, c'est que les étudiants ne considèrent pas la logique comme une forme vide dissociée de tout objet, qu'ils en découvrent les propriétés pour en jouer à la manière de Lewis Caroll :

"Il était Grilheure ; les slictueux toves
Gyraient sur l'alloinde et vriblaient ;
tout flivoreux vaguaient les borogoves ;
Les verchons fourgus bourniflaient."