Utilisateur:Jean-Loup/Apprendre la programmation à Wikiversité

Une page de Wikiversité, la communauté pédagogique libre.

Apprendre à programmer à Wikiversité[modifier | modifier le wikicode]

Avez vous appris à programmer en lisant de savants volumes ou en suivant des conférences?.. Pas moi.
De plus, j’ai l'impression très nette que les étudiants d'informatique des augustes universités ayant pignons sur rue n'apprennent pas comme ça non plus. Oh, bien sur il vont aux conférences, ils consultent les livres de cours. Ça les aide, c’est sur, ils n'obtiendraient pas leurs diplômes autrement, mais ce n’est pas vraiment comme ça que ceux qui accrochent, ceux qui y prennent goût et ceux qui deviennent des as apprennent à programmer.

Une petite idée[modifier | modifier le wikicode]

Ceux-là apprennent en suivant une petite idée. Ils ont derrière la tête de vagues projets de programmes super sympas qu’ils aimeraient bien bidouiller... pas la moindre idée au départ de comment s'y prendre, mais ça doit pouvoir se faire.

Alors ils se sont attaqués à un bouquin de programmation trouvé au hasard qui avait l'air intéressant. Ils ont feuilleté un article ou deux dans des revues spécialisées. Ils ont eu bien du mal à en percer le jargon mais les titres semblaient un peu apparentés à leur rêves. Ils ont installé un compilateur sur leur ordinateur perso et ils ont écrit de petits exercices, puis ils ont copié des exemples intéressants sur le ouèbe, les ont améliorés.. et ils sont devenus des mordus.

Les accros[modifier | modifier le wikicode]

Pas bien difficile de devenir accro de la programmation; c’est une des activités créatrices les plus satisfaisantes qu'on puisse trouver. D'accord, c’est un sacré boulot et une façon complètement différente de penser, mais quel plaisir quand on voit enfin le résultat à l'écran!

Frederick Brooks le décrit bien dans Le Mythe du mois-homme:

Le programmeur comme le poète, manie des abstractions voisines de la pensée pure. Il construit des cathédrales dans les airs, à partir de l'air lui-même, par le pouvoir de son imagination.

Programmer c’est dur c’est sur, mais c’est créatif, satisfaisant, et le produit peut être utile à bien des gens. Alors, que le plaisir soit de se défouler intellectuellement ou de trouver sa place dans une société de pairs, ou les deux, peu importe.

Les autres[modifier | modifier le wikicode]

Les autres, ce sont ceux qui ne sont pas du tout accros. Il y en a beaucoup dans les cours d'informatique. Ils font ça parce qu’il faut bien le faire pour obtenir ce sacré diplôme. On va aux conférences, aux travaux pratiques, c’est le seul moyen de ne pas échouer.

Apprendront-ils la programmation?.. eh bien, oui, certains du moins: Il y a déjà ceux d'entre eux qui y prendront goût et deviendront accros à leur tour, mais bien d'autres n'y prendront jamais goût. Ils souffriront, apprendront les mots et les gestes, suffisamment pour pouvoir en parler en connaissance de cause, passer les examens. À la sortie ils prendront place dans une équipe de développement de logiciel et rempliront leurs fonctions. Ils ne seront peut-être pas inventifs, ou passionnés, mais dans les grandes équipes, souvent c’est mieux de ne pas être passionné et l'important c’est de suivre les règles, pas d’être inventif. On leur souhaite une bonne carrière.

Et Wikiversité alors?[modifier | modifier le wikicode]

Les universités en dur délivrent des diplômes qui conduisent aux carrières. Pas Wikiversité.

Alors, qui va participer à Wikiversité pour apprendre l'informatique ? Je ne voudrais pas trop généraliser, mais j'imagine que ce seront déjà des mordus ou en chemin de le devenir. Des gens de tous âges qui sont attirés par l'informatique et veulent l'explorer à fond. Des gens qui se rendent compte que le chemin vers le cœur de l'informatique passe par la programmation.

Alors, si ce sont déjà des mordus, qu'est-ce que Wikiversité peut leur offrir ? Ou si ce sont des curieux sérieux ou de sérieux curieux, comment leur faire découvrir ce plaisir ? Car c’est de ça qu’il s'agit: les participants étudiants-enseignants sont des férus de l'art de la programmation ayant atteint différents niveaux d'expertise. Ils veulent partager et faire découvrir à d'autres leur découverte et leur source de joie.

Apprentissage adapté à Wikiversité[modifier | modifier le wikicode]

Le principe d'apprentissage pratique est une des forces de Wikiversité. La pratique est aussi essentielle à l'apprentissage de la programmation, alors mettons les travaux pratiques en premier.

La théorie est bien sur essentielle, mais que la théorie soit introduite par les exemples, et des exemples de code motivants faisant partie de programmes complets et fonctionnels. Cela marchera bien mieux que dans les universités en dur, où la théorie est d’abord mise en avant, puis illustrée par des fragments de code qui paraissent souvent artificiels.

Apprendre par plaisir[modifier | modifier le wikicode]

Mettons le jeu au centre de l'apprentissage, et la difficulté vaincue, et la conscience de progresser, et le plaisir de penser qu'on se débrouille comme des chefs.

Apprentissage non linéaire[modifier | modifier le wikicode]

Les notes de cours, les conférences, les bouquins suivent tous une progression linéaire:
On écrit un premier programme "Hello World!", puis tout de suite viennent les sections sur les mots clés, les types, les opérateurs, les constantes et variables, les boucles, les structures conditionnelles, les fonctions, les classes et objets, et ça continue. Tout un monde de jargon et de définitions qui rivalise en puissance soporifique avec les anesthésiques les plus puissants de la pharmacopée contemporaine.

La barbe!
Apprenti ou pas, on veut écrire des programmes qui remuent, qui font des choses intéressantes. Les types disponibles, les fonctions, les boucles, etc.. oui, c’est très utile. On les apprendra quand on en aura besoin pour faire faire à l'ordinateur ce qu'on veut. On est impatient, on ne veut pas attendre la cinquième semaine de cours pour apprendre à utiliser les méthodes ou les fonctions, ou les classes. On en a besoin tout de suite.

Les cours de programmation à Wikiversité peuvent briser ce carcan démotivateur de la linéarité:
Dans les travaux pratiques, présentons des programmes complets et attrayants, bien sur très simples dans les premiers temps, accompagnés d'un texte explicatif qui, lui, fait référence aux types primitifs ou structures de boucles, etc. soit directement, soit dans des pages théoriques sur Wikiversité ou Wikilivre ou ailleurs.

Peu importe qu'un programme de début fasse appel à plusieurs structures qui apparaîtraient plus tard dans une progression linéaire classique. N'apprenons pas linéairement, commençons par une vue d'ensemble forcément floue et incomplète des éléments disponibles à la construction de programmes. Petit à petit, en travaillant sur d'autres programmes, certaines zones de l'image deviendront plus nettes et plus précise et la vue d'ensemble s'étendra et s'éclaircira.

Apprentissage actif et interactif[modifier | modifier le wikicode]

Des exemples de code complets et captivants, des explications théoriques bien présentées, ce serait bon, mais ce n’est pas suffisant. N'oublions pas que l'imagination de l'apprenti programmeur tourne à cent à l’heure, il veut créer ses propres programmes.

À Wikiversité, étudiants et enseignants sont sur le même pied. Tout le mode est étudiant, tout le monde est enseignant. Si le débutant crée un autre exemple qui couvre les mêmes domaines, s'il en est fier, qu’il le publie.

N'aillant pas la profondeur de connaissances d'un programmeur expérimenté, le débutant a plus de chances de commettre des erreurs de conception ou de style. Il a bien des chances de passer à côté d'idiomes simples et élégants, mais quelqu’un le lui dira, les pages de discussion sont là pour ça, on y expliquera les problèmes de code et on y montrera des solutions de rechange. Restera seulement soit à modifier le code originel, soit à y ajouter un petit commentaire faisant référence à la discussion.

Mais on peut être sur qu'avant de publier un exemple, un participant va le peaufiner. On a sa fierté, quoi!

Apprenons à gérer la complexité[modifier | modifier le wikicode]

Tôt ou tard (en fait très tôt) on se heurtera à la complexité... C’est incroyable comme un programme grandit et devient vite impossible à gérer! On se dira bien alors qu’il doit exister des techniques pour rendre le code plus facile à écrire et sa maintenance ou modification plus facile. On sera prêt à passer à l'étape suivante, celle de la réflexion sur le génie logiciel, la modularité, les principes de programmation structurée et ceux de la conception et programmation orientée objet, les patrons de conception... un nouveau monde.

Ne brûlons pas les étapes. Une considération systématique du développement et du génie logiciel viendra plus tard, quand on aura déjà acquis les bases d'un ou deux langages de programmation. Cependant un programmeur expérimenté va choisir, en écrivant le plus simple des programmes, les idiomes les plus aptes à favoriser l'intelligibilité et fiabilité du code et à rendre plus aisées la maintenance et les extensions potentielles du logiciel.

Sur Wikiversité les pages de discussion sont là pour introduire des solutions alternatives et pour justifier, ou débattre des choix de conception, de style ou d'idiomes. Ces discussions dépasseront parfois la compréhension des apprentis, mais même ainsi elles auront un effet pédagogique bénéfique. Elles apporteront la réalisation que ces choix existent et qu’ils sont importants, que les notions de fiabilité du code et de sa maintenance sont primordiales.