Archives de catégorie : Transmission

Des questions à poser aux anciens de votre promo

Je donne actuellement des cours au développement web à des élèves en BTS (SIO et SN), dans le cadre de formation continue (en GRETA). J’ai appris que mes élèves du BTS SIO allaient rencontrer d’anciens élèves du GRETA, et cela m’a rappelé la manière dont s’était passée une rencontre similaire, lorsque j’étais moi même étudiant en BTS, il y a environ 25 ans. Je me souviens que les étudiants que nous étions ne savaient pas trop quelles questions poser, et que du coup ces rencontres s’étaient révélées peu instructives.

Ne sachant pas trop comment mes étudiants allaient gérer cette rencontre avec des anciens du GRETA, je leur ai proposé une série de questions à adresser à leurs interlocuteurs, questions que voici :
  • avec quel langage travaille-t-il actuellement ? (PHP, Javascript, autre)
  • avec quel framework (jQuery, Angular, React, NodeJS, autre…)
  • avec quel poste de développement (Windows, Linux, si Linux, lequel ? Debian, Ubuntu, autre?)
  • travaille-t-il avec un gestionnaire de version, si oui lequel (Git, Subversion ?)
  • avec quel IDE (Netbeans, Eclipse, PHPStorm, autre?)
  • quelles sont les compétences qui lui ont fait défaut à son arrivée sur le marché du travail ?
  • les recruteurs lui ont-ils fait passer des tests ? Si oui, de quel type (QCM, autre) ? Etait-ce difficile ?
  • Quelles compétences sont attendues par les recruteurs actuellement, selon lui ?
  • sur quel type de projet travaille-t-il actuellement ? Application métier à usage interne de l’entreprise, ou application destinée à être visible sur le web ?
  • s’agit-il d’application web, d’application mobile, si c’est du mobile, s’agit-il d’une application native, ou hybride ?
  • s’il s’agit d’appli web, doit-il dans ses développements gérer des problèmes de compatibilité entre navigateurs ? Si oui, comment s’y prend-il ?
  • développe-t-il côté back (PHP,  NodeJS, autre..) ou côté front (Javascript, framework tel que jQuery, Angular 1 ou 2, ReactJS, etc…), ou les deux ?
  • dans quelle structure travaille-t-il (société de services, client final ?)
  • est-il indépendant, salarié, en CDD ou en CDI ? 
  • s’il est dans une société de services, travaille-t-il au siège de la société, ou est-il détaché chez un client de la société ?
  • travaille-t-il sur un projet au « forfait » ou est-il en mode « régie » ?
  • quelle est la taille de l’équipe dans laquelle il travaille ?
  • son équipe utilise-t-elle une méthodologie agile (Scrum, autre..) ? Si oui, demandez-lui de vous expliquer comment se déroule un « sprint »
  • s’il travaille en société de services, ou même chez un client final, quels sont les avantages selon lui de ce type de structure ? et les inconvénients ?
  • à quel niveau de salaire pouvez-vous prétendre, selon lui, en arrivant sur le marché du travail ?

Oui je sais, j’ai peut être exagéré, mais il vaut mieux avoir l’embarras du choix, que le choix de l’embarras, pas vrai ? En tout cas, cela m’a bien amusé de préparer cette série de questions. Zut, l’heure tourne et j’ai encore un cours à préparer… bon allez, j’y retourne !

 

De bons bouquins pour s’initier à la programmation

J’ai mis à profit la période estivale pour lire pas mal de bouquins, et j’ai découvert quelques pépites dont j’ai envie de vous parler aujourd’hui. Je ne parlerai pas ici des quelques bouquins que j’ai lus pour mes besoins professionnels (ça fera peut être l’objet d’un autre article), mais plutôt des bouquins destinés aux personnes – jeunes ou moins jeunes – qui souhaitent s’initier à la programmation. Oui je sais, c’est une vieille marotte chez moi (j’ai déjà parlé de ce sujet dans de précédents articles), mais en plus de mes activités de développeur, j’enseigne aussi la programmation (essentiellement à des adultes). Je considère que cela fait partie de mon travail d’étudier comment mes confrères abordent cette discipline particulière qu’est l’enseignement de la programmation, cela me permet de m’améliorer en tant que prof.

Je vais donc vous parler de 3 livres, un en français et deux en anglais.

Commençons par le livre en français :

« Apprendre à programmer en Python (pour jeunes débutants de 7 à 97 ans) », de Frédéric Laroche (publié aux éditions Ellipses en 2015).

Je dois dire que j’ai été séduit par certains aspects de ce livre, aux illustrations sympas (de Gilles Macagno), et qui fourmille d’anecdotes. L’auteur a souhaité privilégier un style de programmation procédurale (plutôt qu’objet) pour que les exemples restent accessibles au plus grand nombre. C’est un choix qui se tient, mais j’avoue que j’ai été décontenancé par le premier chapitre, destiné à planter les bases du langage Python. Je trouve que l’auteur va souvent trop vite, et je me disais en lisant ce chapitre qu’un lecteur complètement néophyte pourrait se retrouver assez vite largué. En revanche, une personne ayant déjà quelques bases de programmation, en Python ou sur un autre langage, devrait pouvoir s’en sortir. Attention, le reste du livre est carrément génial. Au travers de jeux connus et moins connus, l’auteur livre un beau travail de pédagogue et j’ai pris un grand plaisir à le lire. C’est vraiment un bouquin généreux et sympa, et malgré le chapitre d’intro que je trouve un peu bancal, je vous le recommande.

Un autre livre, qui m’a procuré un grand plaisir de lecture, c’est celui-ci :

« Get Programming with Javascript« , de John R. Larsen, aux éditions Manning. Il est paru cet été, et j’ai sauté sur l’ebook dès sa parution. Pour le coup, d’un point de vue pédagogique, c’est un sans faute. Je trouve la présentation des fondamentaux de Javascript très progressive et cette progression est très réfléchie. Chapitre après chapitre, l’auteur construit un jeu de rôle au sein d’une page web, et l’enrichit de nouvelles fonctionnalités tout en présentant de nouveaux concepts de programmation. J’ai vraiment pris un grand plaisir à le lire, et je me prends à rêver que ce livre soit traduit en français, pour qu’il puisse toucher un lectorat plus large chez nous.

Le troisième livre que j’ai bien apprécié, c’est celui de Syed Omar et Faruk Towaha, paru chez Packt en janvier 2016 :

« Javascript Projects for Kids »

Le livre propose tout d’abord une intro à Javascript qui est sympa, mais de construction assez classique. Vous y trouverez aussi une introduction à jQuery qui est intéressante, mais les différents projets présentés ensuite ne s’appuient pas nécessairement sur jQuery, ce qui n’est d’ailleurs pas dérangeant. Il faut souligner que les chapitres sont quasiment tous indépendants, et présentent des projets écrits dans des styles souvent très différents. En fait, ce livre c’est un peu « l’auberge espagnole » du Javascript, mais il est généreux, fourmille de bonnes idées et les projets présentés sont sympas à réaliser. Je donnerais une mention spéciale au chapitre 9.3 (Dissecting Hangman) dans lequel les auteurs ont utilisé un graphique SVG pour dessiner leur pendu, et AngularJS pour masquer ou faire apparaître les différentes parties du pendu en fonction des mauvaises réponses (via la directive Angular « ng-show »). J’avoue que je n’avais jamais envisagé jusqu’ici de combiner Angular avec du SVG, et je me mets l’idée « de côté » car je la trouve sacrément futée. Attention, ce livre ne fournit pas d’introduction à Angular, du coup si vous ne connaissez pas ce framework, vous aurez peut être du mal à comprendre le code présenté dans ce chapitre du « pendu », mais ça peut être aussi un bon moyen de découvrir Angular, après tout…

Voilà… trois livres très différents, mais tous passionnants, car tous écrits par des auteurs passionnés, j’espère qu’ils vous procureront autant de plaisir qu’ils m’en ont procuré.

A noter que j’ai découvert un autre bouquin chez Manning qui s’intitule « Hello AppInventor!« , de Paula Beer et Carl Simmons (livre paru en 2014).  Je ne l’ai pas encore lu, faute de temps, mas il est sur le haut de ma pile, j’espère que je vais réussi à le lire rapidement. Pour ceux qui ne connaissant pas, AppInventor est un projet initié par Google et maintenu par le MIT. Cette application reprend les principes de Scratch, mais elle est destinée à développer des applications pour les tablettes et smartphones Androïd. Ca a l’air vraiment cool.

Allez, bonne rentrée à tous !!  😉

 

Pour les followers : mon Tweet

 

 

Apprendre comment apprendre

Comment apprend-on ? Comment notre cerveau fixe-t-il de manière durable les concepts, les idées, les techniques que nous étudions quand nous suivons un cours ? Que se passe-t-il justement quand une notion que nous pensions acquise se révèle finalement complètement floue, et nécessite d’être réétudiée ? Pourquoi l’étude de nouvelles notions semble si facile pour certains, et si difficile pour d’autres ? Comment lutter efficacement contre cette fichue procrastination… et c’est quoi au juste, la procrastination ?

Nous avons tous des idées plus ou moins préconçues sur la manière dont notre matière grise fonctionne, mais finalement nous ne savons pas grand chose de cette drôle de machine qui est aux commandes de notre corps, et de notre personnalité.

A l’heure où tant de ressources sont accessibles en ligne pour se former sur tout un tas de sujets, il est grand temps que nous nous intéressions de plus près à ce drôle de pilote qu’est le cerveau.

Heureusement, des avancées majeures ont été réalisées ces dernières années, dans la compréhension de notre cerveau, et des mécanismes en jeu durant l’apprentissage. Des chercheurs renommés prennent aujourd’hui la peine de communiquer, notamment via internet, sur l’état des recherches en cours, et nous aident à y voir plus clair dans toute cette matière grise (jeu de mot lourdingue, désolé :).

Si vous m’avez lu jusque là, c’est que le sujet vous intéresse, OK… alors voici une sélection de vidéos et de cours que je trouve passionnants.

Tout d’abord, parlons de la procrastination. Si vous êtes sujet à ce phénomène, sachez que vous n’êtes pas le seul, et il faut absolument que vous regardiez la conférence TED de Tim Urban « Inside the mind of a master procrastinator » (sous-titre disponible dans plusieurs langues, dont le français). Avec beaucoup de drôlerie et d’intelligence, Tim Urban dédramatise le sujet, et nous aide à comprendre comment se créent ces dérapages qui nous mettent la tête dans le sac, alors même que nous avons des échéances à tenir et pas de temps pour le superflu.

Si Tim Urban nous explique la procrastination, pour apprendre à lutter efficacement contre ce phénomène, rien de tel que le cours de deux experts en neuro-sciences, Barbara Oakley et Terry Sejnowski. Ce cours, accessible gratuitement sur coursera.com, s’étale sur 4 semaines. Il   s’intitule Learning how to learn. Passionnant de bout en bout, il nous présente les dernières avancées en ce qui concerne la compréhension que les chercheurs ont du fonctionnement du cerveau. Les deux chercheurs se sont attachés à nous expliquer les mécanismes en jeu lors des périodes d’apprentissage. Comment fixer durablement les idées, comment lutter contre la procrastination, quelles sont les méthodes d’étude inefficaces qu’il faut éviter ? Vous trouverez dans ce cours les réponses à ces questions, et à bien d’autres.

Peut être êtes-vous, comme moi, intéressés par les mécanismes d’apprentissage en jeu chez les enfants, et notamment chez les tous petits. Alors il faut que vous suiviez le blog de Nouhad Hamam. Ce dernier anime un blog, une newsletter et un meetup où il expose clairement de quelle manière on peut stimuler l’envie de découvrir et d’apprendre, chez les enfants. Pour suivre les travaux de Nouhad Hamam, le plus simple est de vous enregistrer sur son portail : Hach The Kids.

Concernant l’apprentissage, et en particulier les difficultés d’apprentissage, il faut bien comprendre qu’il n’y a pas de fatalité et qu’une pédagogie adaptée peut faire des miracles. Encore faut-il vouloir s’en donner les moyens, et donner aux enfants foi en leurs propres capacités. C’est cela que Carol Dweck nous conte lors d’une magnifique session TED de 2014 qu’elle avait intitulée : The power of believing that you can improve.

 

 

 

La transmission du savoir

Le magazine Télérama, dans son numéro de cette semaine (n° 3459, du 30 avril au 6 mai 2016), consacre un dossier spécial sur la transmission, dossier qui s’intitule « Savoirs, Valeurs, Langue, veut-on encore transmettre ? ».

Dans ce même dossier, une phrase du philosophe Bernard Stiegler m’a particulièrement interpellé :

« Un savoir n’est pas seulement une information, mais la transformation de celui qui sait par ce qu’il apprend. « 

Je trouve cette idée très forte, et surtout très juste. Je sais pour me l’être appliqué à moi même à plusieurs reprises, que le processus de formation (ou dans mon cas d’auto-formation) peut transformer profondément votre schéma de pensée. Je ne suis par exemple plus le même développeur qu’il y a 20 ans, ni le même développeur qu’il y a 10 ans. A chaque étape, l’étude d’un ou plusieurs langages de programmation (SQL, Ruby, PHP, Javascript, etc…) a profondément transformé ma manière de penser l’architecture des applications que j’avais à développer.

Deux processus s’entre-croisent ici, qui me passionnent vraiment : l’acquisition et la transmission du savoir.

L’acquisition du savoir est un processus de longue haleine, qui passe par des phases répétées et entremêlées d’étude théorique et de pratique. Une petite phrase attribuée aux Shadocks, vue aujourd’hui sur le portail de Google décrit assez bien une partie de ce processus d’apprentissage :

« En essayant continuellement on finit par réussir. Donc, plus ça rate, plus on a de chance que ça marche ».

Le processus d’apprentissage, c’est un peu ça, il faut essayer, se ramasser, réessayer, se ramasser encore, sans relâcher son effort, jusqu’à ce que « ça marche ». Car le cerveau est un incroyable rebelle, qui donne parfois l’impression de travailler contre l’apprenant.

En tant que formateur moi-même, notamment sur des langages informatiques (PHP, SQL, Javascript..), et occasionnellement (mais de plus en plus rarement) sur des disciplines artistiques, je sais d’expérience que certaines notions peuvent sembler évidentes à certains élèves, alors que d’autres vont être, au moins pour un temps en résistance. C’est alors au formateur de trouver les analogies, les accroches, les voies détournées qui vont permettre de dénouer les tensions, de faire sauter les blocages.

Je dois dire que chacune des formations que j’ai dispensées ces dernières années a été une expérience unique. Unique par le fait que chaque groupe d’élèves est différent, et qu’au sein de chaque groupe les apprenants ont des profils souvent très différents, avec des attentes elles aussi très différentes. C’est alors un véritable challenge que de trouver le dénominateur commun entre ces personnes, de trouver le vocabulaire et les concepts qui vont « faire mouche » et faire que chacun va « trouver son compte » et sortir satisfait de la formation. Ca marche le plus souvent, mais ce n’est jamais gagné d’avance, et c’est un bon exercice d’humilité.

Finalement, même si je ne m’en rends pas compte sur le moment, je sors chaque fois un peu transformé par ces sessions de formations. Les difficultés que je rencontre quelquefois dans la transmission de la connaissance m’obligent à chercher de nouvelles pistes, à revoir ma manière d’expliquer, à élaguer souvent, pour ne conserver que le message essentiel. Comme me l’a dit très justement un jour un développeur, en lisant un dossier technique trop détaillé  :

« trop d’information tue l’information ».

Beaucoup de formateurs, croyant le plus souvent bien faire, tombent dans le travers de vouloir donner trop d’informations. Malgré l’expérience, il m’arrive encore quelquefois de faire cette erreur. La difficulté pour le formateur, c’est de détecter à quel moment il atteint le seuil de saturation au delà duquel le cerveau des apprenants va littéralement disjoncter. Si ce seuil est atteint, les apprenants se retrouvent en stress, les cerveaux se mettent en résistance, et le formateur passe complètement à côté de ses objectifs. C’est un véritable challenge de savoir détecter ce seuil de saturation, particulièrement au sein de groupe d’élèves de niveau hétérogène.

Je réalise que cela faisait bien longtemps que je n’avais pas relevé la tête du guidon pour prendre le temps d’écrire un petit article. C’est marrant, ça fait du bien 🙂 Je pense que je reviendrai plus souvent. Et si j’essayais d’écrire un article par semaine, pour changer…

Bon alors, euh… à bientôt !! 🙂

 

Apprendre la programmation aux enfants (again…)

Eh oui, en cette rentrée de septembre ensoleillée, je reviens sur un sujet qui me tient particulièrement à coeur, à savoir : enseigner la programmation aux enfants.

Je me demandais notamment s’il existait dans la littérature contemporaine de bons bouquins susceptibles de permettre à des enfants ou à des adolescents de s’initier à la programmation. J’emploie le terme « contemporain » sciemment car dans les années 80, et même au début des années 90, on trouvait de bons livres d’initiation, s’appuyant sur les langages BASIC ou Pascal. Et c’est d’ailleurs avec des ouvrages de ce genre que je me suis formé à la programmation, comme beaucoup de développeurs de ma génération.

Mais aujourd’hui, les langages BASIC et Pascal ne sont plus d’actualité. On peut d’ailleurs le regretter, car il s’agissait de langages particulièrement bien adaptés à l’enseignement. Mais bon, c’est comme ça… Les langages qui ont le vent en poupe aujourd’hui, ce sont des langages comme PHP, Javascript, Python ou Ruby. Et ma foi, ils sont aussi très bien, à condition de savoir adapter l’apprentissage aux capacités des enfants que l’on souhaite initier.

Pour en revenir à mon sujet du jour, j’ai déniché 3 bons bouquins en anglais, chez le même éditeur (NoStarch.com), dont un a été traduit en français et est disponible chez Eyrolles (il s’agit de « Python for Kids« ).

Les 3 ouvrages en question sont les suivants :

J’ai commencé par lire le livre de Bryson Payne, après avoir assisté à l’un de ses webinars. J’ai apprécié les idées proposées dans son livre, notamment son utilisation de la « tortue », une petite librairie Python qui permet de tracer des graphiques très simplement, un peu à la manière d’une ardoise magique (vous savez ce jeu indémodable qui consiste à tracer des formes au moyen de 2 roulettes). Pour la petite histoire, cette « tortue » était à l’origine un des composants d’un langage de programmation de plus haut niveau, le LOGO (cf. Wikipédia pour plus d’infos sur ce sujet).

Ce qui m’a dérangé dans le livre de Bryson Payne, c’est qu’il va très vite (trop vite à mon goût) vers des exemples assez complexes, qui pourraient décourager le lecteur si sa connaissance du langage Python est trop superficielle. En revanche ses exemples sont assez emballants, et il y a beaucoup de bonnes idées à puiser dans ce livre. Comme son sous-titre l’indique, ce livre est destiné à aider des parents qui voudraient enseigner la programmation à leurs enfants. Mais pour tirer pleinement parti de ce livre, les parents ont intérêt à bien maîtriser le langage Python, sinon ils risquent d’être perdus face à certains raccourcis pris par l’auteur.

A l’inverse, le livre de Jason R. Briggs, Python for Kids (livre qui est disponible chez Eyrolles en français), démarre de manière plus progressive. La première partie de son livre est peut être plus rébarbative, du fait qu’il prend le temps de présenter les bases du langage Python (il manquerait peut être de temps en temps un exemple amusant pour casser la monotonie de l’ensemble). En revanche, dès que Jason R. Briggs s’attaque à l’utilisation de la tortue, il m’emballe vraiment car ses explications progressives sont très accessibles, et très pertinentes, et c’est un plaisir de le suivre. Un adulte pourra aider un enfant à piocher dans ce livre les éléments intéressants adaptés à son niveau de compréhension. Un adolescent pourra sans aucun doute se débrouiller seul avec ce livre, s’il se forme en autodidacte.

Voici un exemple de programme Python exploitant la fameuse tortue graphique, pour générer des formes géométriques amusantes (exemple emprunté au livre « Teach your kids to code »).

import turtle
t = turtle.Pen()
for x in range(100):
	t.circle(x)
	t.left(90)

Et voici une prise de cliché de l’environnement Python, avec l’image en cours de réalisation :

turtle_python_exemple

Ces deux livres (« Python for Kids » et « Teach your kids to code ») me semblent très complémentaires. Mais je recommanderais le premier pour les bases solides qu’il apporte au lecteur, et le second comme complément pour le réservoir d’idées amusantes qu’il propose.

Le livre « Javascript for Kids », de Nick Morgan, est lui aussi très emballant. Je suis en train de le lire, mais comme je manque de temps, je risque de mettre encore quelques semaines avant de le terminer. J’aime beaucoup son approche très progressive, ses exemples simples et pertinents, son effort aussi pour – dans certains cas – prendre du recul par rapport au programme à implémenter (en proposant par exemple un pseudo-code en langage naturel décrivant l’objectif à atteindre, avant de le coder réellement en Javascript). Bref c’est un livre qui mérite qu’on s’y attarde, et qui mériterait lui aussi d’être traduit en français (peut être que les éditions Eyrolles sont déjà sur le coup, en tout cas je le souhaite).

Une question vous taraude peut être à l’issue de cet article : « alors… Python ou Javascript ? »

Franchement, j’adore Javascript, mais il me semble que Python a quelques atouts dans sa manche pour l’enseignement de la programmation aux enfants. Avec en premier lieu un shell complet incluant un éditeur avec coloration syntaxique, une librairie graphique intégrée (tkinter) qui permet de générer des graphiques très simplement (animés ou non), une librairie « turtle » intégrée dans la version standard de Python pour jouer avec la tortue… Bref, tout est fait dans Python pour faciliter l’apprentissage.

Avec Javascript, c’est un peu plus compliqué. On peut jouer avec de différentes manières, et en premier lieu on peut commencer par l’utiliser dans la console de son navigateur préféré, mais dès que l’on souhaite développer des choses sophistiquées, il faut ajouter des connaissances sur le HTML, le DOM, l’API Canvas du HTML5 (pour la génération de graphiques), choisir un éditeur de code, etc… Bref, l’écosystème de Javascript est un peu hétéroclite, et du coup un peu plus complexe que celui de Python. Du coup, je recommanderais l’apprentissage de Javascript plutôt à des adolescents (peut être à partir de 12 ans), alors qu’avec Python, il me semble que l’on peut démarrer plus jeune, plus facilement (peut être à partir de 8 ans).

J’ajoute que ces 3 livres me semblent également très bien pour initier des adultes à la programmation.

Voilà, j’espère que ce petit article vous aura intéressé, et surtout qu’il vous donnera envie de découvrir ces livres, ces auteurs, et peut être d’initier des enfants à la programmation au travers de ces très bons langages que sont Python et Javascript.

Sur ces bonnes paroles, je vous souhaite une très bonne rentrée. 🙂