Scrivener, un traitement de texte non linéaire.

machchine-a-ecrirePour rédiger un document scientifique de quelques pages, l’idéal est de disposer d’un traitement de texte permettant un formatage immédiat dans un style agréable à lire, ainsi que la création, l’insertion et la modification intuitive, rapide et confortable de figures, dessins, équations, et courbes ayant un aspect professionnel, sobre et esthétique.

J’avoue n’avoir jamais trouvé un logiciel, ni même une combinaison de plusieurs logiciels, qui réponde à ces critères au niveau d’exigence correspondant à mes attentes, mais c’est un sujet que je ne développerai pas dans ce billet. Aujourd’hui, je vous présente un traitement de texte dédié à la conception et la réalisation de documents comportant des dizaines, voire des centaines de pages recelant des milliers d’informations, de concepts, d’idées, de descriptions, etc.

De tels documents sont constitués de très nombreuses briques documentaires, entendez par là de petits morceaux de textes à différents stades de maturité, allant d’une simple idée ou observation jusqu’à une partie finalisée du document en cours de réalisation. La force de Scrivener est de permettre d’organiser ces briques documentaires dans une structure arborescente, c’est à dire constituée de dossiers pouvant contenir des briques documentaires et des dossiers pouvant eux-même avoir une structure arborescente.

Chaque élément (brique documentaire ou dossier) peut être facilement déplacé à l’aide de la souris. On peut lui associer des notes, commentaires, étiquettes, un résumé, une couleur. Il est possible de sélectionner un ou plusieurs dossiers et/ou briques documentaires dont les contenus s’affichent les uns à la suite des autres sous la forme d’un document continu pouvant être lu et modifié. Cette « vue » particulière d’une partie du contenu en cours de rédaction est préservée lorsque le l’utilisateur quitte l’application.

Cette fonctionnalité, qui change complètement la manière de travailler, n’existe pas (jusqu’à plus ample informé) dans les traitements de textes classiques tels que Word et OpenOffice. Ce qui s’en rapproche le plus dans Word est la possibilité de « replier » des chapitres et sections pour ne rendre visibles que certaines parties du document. Mais la « vue » ainsi créée est malheureusement perdue lorsqu’on quitte l’application. Par ailleurs, Word permet de visualiser l’arborescence des sections d’un document, mais la réorganisation de ces sections ne peut se faire qu’avec des « copier / coller » laborieux.

Scrivener permet de produire le document final sous différents formats, tels que pdf, word, et les deux principaux formats de livres électroniques, Epub et Kindle. C’est lors de cette étape dite de « compilation » qu’est réalisée la mise en forme définitive d’après un modèle définit par l’utilisateur.

En revanche, il faut bien admettre que les possibilités offertes par Scrivener pour l’édition de chaque brique documentaire sont très limitées au regard de celles de Word ou même d’OpenOffice. Scrivener est encore loin de répondre complètement à mes besoins en matière de rédaction de documents scientifiques, mais c’est ce que j’ai trouvé de mieux pour la prise de notes, le suivi, et la rédaction progressive de rapports dans le cadre de projets de recherche. Il est à mon avis tout aussi adapté à la réalisation de supports de cours et autres documents pédagogiques, ainsi que de mémoires et rapports d’étudiants.

Projets à la carte pour l’enseignement de la programmation.

projetC’est en pratiquant, en faisant soi-même les choses, qu’on acquière des compétences et des savoir-faire et c’est la raison pour laquelle les projets à réaliser par les étudiants ont une place importante dans l’enseignement de l’informatique.

Les projets classiques que j’ai toujours connus dans mon cursus universitaire et dans ma carrière d’enseignant consistent à fixer un objectif (typiquement la conception et le développement d’une application) devant être atteint à une certaine date. L’évaluation se fait sur la base d’un rapport remis par les étudiants (travaillant seuls, en binôme, voire en groupes plus importants), souvent complété par une démonstration de l’application réalisée, et parfois par une soutenance orale. La note dépend notamment de la qualité de la réalisation, de la démarche intellectuelle de conception, de la maîtrise des technologies et des concepts utilisés, de la qualité de la présentation écrite et (si applicable) orale, et du bon fonctionnement de l’application livrée. Il n’y a pas toujours un barème précis donné à l’avance aux étudiants, ce qui a l’inconvénient d’une certaine opacité, mais l’avantage de permettre la prise en compte tous les aspects du travail fourni par les étudiants, y compris lorsqu’ils se sont investis dans des fonctionnalités non demandées dans le sujet, ou dans l’exploration de certaines solutions allant au-delà des objectifs fixés.

Cette année, j’ai décidé d’innover en proposant à mes étudiants de L2 des projets « à la carte » comportant plusieurs objectifs, ou « missions » pouvant chacun rapporter un certain nombre de points. Certains objectifs sont faciles à atteindre, d’autres plus difficiles, et certains peuvent être des « challenges » permettant aux étudiants les plus expérimentés et/ou talentueux de montrer de quoi ils sont capables. Un projet peut être livré en plusieurs fois, ce qui permet aux étudiants de valider d’abord les objectifs les plus accessibles objectifs en ayant un retour critique de leurs enseignants, puis d’aller ensuite, et de manière progressive, aussi loin qu’ils le peuvent au regard de leurs capacités, de leur motivation, et du temps disponible. Après chaque étape, les étudiants connaissent le nombre de point qu’ils ont acquis et le nombre de points qu’ils peuvent encore potentiellement acquérir en reprenant certaines parties mal réalisées ou en s’attaquant à des missions plus difficiles. Plusieurs projets peuvent être menés en parallèle, en traitant prioritairement les objectifs les plus simples à atteindre qui relèvent de compétences de base dont l’acquisition est essentielle.

Une machine de Turing

mt-all-1000J’ai enfin terminé cette réalisation qui m’a occupé pendant de nombreuses soirées cet hiver. Son originalité réside dans l’utilisation d’une même brique de construction (constituée d’une bascule D et de quelques portes NAND) pour élaborer toutes les parties de la machine : bande, tête de lecture/écriture, automate de contrôle… La finalité est essentiellement pédagogique.

Une présentation plus détaillée est proposée sur ce site.

Bonne année 2016

2016Le deuxième semestre universitaire commence et je passe beaucoup de temps à préparer mes enseignements, que j’essaie d’améliorer chaque année pour les rendre plus attractifs et plus efficaces. C’est donc en coup de vent que je passe souhaiter à tous mes lecteurs une très bonne année 2016, pleine de découvertes. Je pense en particulier aux étudiants : soyez actifs, curieux, créatifs, faites preuve d’exigence intellectuelle, et n’oubliez pas que de votre attitude en classe dépend aussi la réussite des autres étudiants de votre promotion.

Concevoir un sujet d’examen

examen-bisDans ce billet, je vais vous parler d’un travail à très haute responsabilité qui fait partie des missions des enseignants universitaires, la conception de sujet d’examen.

Je considère qu’idéalement, un examen doit être une évaluation sommative dans le sens où il doit couvrir toutes les compétences décrites dans les objectifs pédagogiques de l’unité d’enseignement concernée et permettre de déterminer, au regard de chacune de ces compétences, ce que sait faire et ce que ne sait pas faire chacun des candidats passant l’épreuve.

Cet idéal est très difficilement atteignable, mais j’essaie de m’en rapprocher, ce qui suppose de bien identifier chacune des compétences à évaluer, puis de trouver des exercices respectant les critères suivants :

  1. Chaque exercice doit être facilement traitable par toute personne maîtrisant la ou les compétences concernées au niveau défini par les objectifs pédagogiques.
  2. Les exercices ne doivent pas être traitables par les candidats qui ne maîtrisent pas les compétences à évaluer.
  3. Les exercices doivent être différents de ceux donnés en cours, en travaux pratiques, en travaux dirigés, et de ceux donnés lors des sessions d’examen précédentes.
  4. Les énoncés doivent être faciles à comprendre et ne doivent pas comporter de tournures ambigües.
  5. L’épreuve doit être largement réalisable en totalité dans le temps imparti par tout candidat maitrisant raisonnablement les compétences à évaluer. Ce point ne fait pas nécessairement l’unanimité parmi les enseignants, mais il doit en tout cas être en accord avec les objectifs pédagogiques. Je défends l’idée que si la vitesse d’exécution n’a pas été présentée comme un facteur critique, et n’a pas fait l’objet d’un entrainement particulier, alors il n’y a pas de raison qu’elle devienne une variable d’ajustement de la difficulté de l’épreuve de jour de l’examen.

Tenter de respecter tous ces critères est un challenge auquel je suis régulièrement confronté, puisque je dois concevoir 7 à 8 sujets d’examen par an, sans compter les sujets de contrôles continus qui doivent répondre aux mêmes exigences, la principale différence étant que le nombre de compétences couvertes par chaque épreuve est plus petit. Le temps nécessaire est très variable car parfois les idées viennent vite, et parfois pas, mais il se chiffre en dizaines d’heures par sujet.

Les examens arrivent : quelques conseils

révisionsVoici quelques conseils pour vous aider à préparer vos examens.

Identifiez précisément ce que vous devez savoir faire

Dans les universités françaises, ce sont les enseignants responsables d’un module qui font les sujets d’examen. Il est donc important de bien cerner leurs attentes en écoutant attentivement ce qu’ils disent en cours. Si vous n’avez pas été assidus, pensez-y pour le prochain semestre.

Sauf précision contraire de la part de vos enseignants, vous pouvez considérer que les exercices les plus difficiles vus en TD sont représentatifs de ce qui pourrait vous être demandé à l’examen. En cas de doute, posez leurs la question.

Décortiquez les annales des épreuves des années précédentes, mais en ayant bien vérifié que le programme n’a pas changé !

Identifiez précisément ce que vous savez et ce que vous ne savez pas faire

Êtes-vous capables de faire seul et sans aide tous les exercices ayant été traités en TD ? Et les exercices donnés en examen les années précédentes ? Quels sont les étapes, les points précis que vous ne savez pas traiter ? Attention, lire des solutions ou corrigés ne vous fera pas progresser. Vous devez faire vous-mêmes des exercices de difficulté progressive pour acquérir les compétences qui vous manquent.

Faites des fiches de révision

Le but est de rendre facilement accessibles toutes les informations pouvant vous être utiles pour traiter tous les types d’exercices susceptibles de « tomber » à l’examen. Classez ces informations de manière cohérente, facilitant leur recherche. Utilisez des couleurs, des dessins.

Consultez régulièrement ces fiches dans les semaines et les jours qui précèdent l’examen. Si les documents sont autorisés, ne les oubliez pas le jour J.

Ne foncez pas tête baissée

Pendant l’épreuve, prenez le temps de parcourir le sujet, d’identifier les questions que vous êtes à même de traiter aisément. Commencez par ces questions si l’organisation de l’épreuve le permet. Ne restez pas bloqué trop longtemps sur un exercice si sa résolution n’est pas critique pour la suite.

Construction d’une machine de Turing

MT - FiguresJe travaille actuellement, sur mon temps libre, à la réalisation d’une machine de Turing. Il s’agit d’un ordinateur rudimentaire mais qui permet de réaliser (sous réserve de disposer des ressources suffisantes) tous les calculs que peuvent effectuer les ordinateurs existants, et même ceux qui n’existent pas encore (*), y compris les ordinateurs quantiques. Par contre, cette machine ne calcule pas de manière efficace et n’a donc pas d’intérêt pratique. Alors pourquoi en réaliser une « physiquement » ?

Parce que la machine de Turing occupe une place très importante en science informatique et qu’elle illustre magistralement comment un assemblage d’éléments simples permet de réaliser un système dont le comportement peut être extrêmement complexe au point n’être prévisible, en toute généralité, par aucun algorithme ni aucune machine, aussi compliquée soit-elle. Je pense que le fait de voir une telle machine en fonctionnement peut, plus qu’une simple description ou même une simulation, marquer les esprits de mes étudiants et développer leur curiosité scientifique.

D’autre part, l’analyse de l’architecture et du fonctionnement d’une telle machine montre quels sont les éléments qui la constituent, comment ces éléments échangent des informations, quels sont leurs rôles, comment ils sont eux-mêmes constitués de briques plus simples qui réalisent des opérations élémentaires. Ce genre d’exercice est essentiel pour développer les aptitudes des étudiants en matière d’ingénierie et pour les amener être capables de comprendre et de concevoir par eux-mêmes des systèmes complexes.

Je reviendrai lors d’un prochain billet sur la construction de cette machine. Je dirai juste aujourd’hui qu’elle sera composée de petits modules réalisés avec des composants électroniques simples (portes logiques, bascules D), et que l’état de chacun de ces modules sera indiqué par des leds (bleue pour 0, rouge pour 1) de manière à ce qu’il soit possible de suivre facilement toutes les étapes d’un calcul.

(*) D’après une hypothèse très sérieuse connue sous le nom de thèse de Church-Turing, émise par deux des plus célèbres mathématiciens du siècle dernier.

Coder à l’école, une bonne idée ?

Coder à l'écoleFaut-il enseigner la programmation à l’école et au collège ? L’idée a souvent été évoquée dans l’actualité de ces derniers mois. En tant qu’universitaire enseignant-chercheur en informatique, je me sens évidemment concerné par cette question.
Je tiens tout d’abord à préciser que le codage (néologisme synonyme de programmation) n’est que la partie technique de la réalisation d’une application. Avant d’arriver à cette étape, il faut avoir une idée, puis créer, à partir de cette idée, une spécification de ce que va réaliser l’application et de la manière dont les utilisateurs vont interagir avec elle. L’utilité, l’attrait et l’utilisabilité d’une application dépendent essentiellement de cette phase de conception qui n’a rien à voir avec le codage. Ce n’est donc pas parce qu’une personne sait coder qu’elle sera capable de réaliser des applications à la fois attractives ou utiles et faciles à utiliser, de la même manière qu’une personne sachant coudre ne sera pas nécessairement douée pour dessiner de nouveaux modèles de robes ou de manteaux, ou qu’un très bon musicien de sera pas nécessairement capable de composer une œuvre musicale à succès.
D’autre part, même si tout un chacun était capable de réaliser ses propres vêtements, très peu de gens utiliseraient effectivement cette compétence. La plupart d’entre eux renouvelleraient leurs garde-robes en allant dans les magasins, et ceci pour une raison très simple : concevoir et fabriquer des vêtements prend énormément de temps. De la même manière, même les gens qui maîtrisent la programmation achètent la plupart des applications dont ils ont besoin car la réalisation d’une application représente souvent des milliers d’heures de travail. Nous vivons dans une société où la plupart des biens de consommation, y compris dans le domaine de l’informatique, sont conçus et fabriqués par des professionnels spécialisés. La grande majorité des gens ne construisent pas leur voiture ni leur maison, ne fabriquent pas eux-mêmes leurs vêtements ni leurs meubles, et n’ont pas plus vocation à réaliser eux-mêmes les logiciels dont ils ont besoin, quand bien même ils auraient les compétences pour le faire.
Comme tout le monde n’a pas vocation à devenir informaticien développeur, il n’est pas nécessaire d’imposer à chacun de savoir coder.
Par contre, expliquer en classe comment fonctionne un ordinateur, ce qu’est un logiciel, comment il est conçu et réalisé, me parait être une très bonne chose, au même titre qu’expliquer le principe de fonctionnement d’une voiture hybride ou d’un congélateur. Nous vivons dans une société technologique dans laquelle avoir une culture scientifique et technique est un atout. Et puis l’école devrait être un lieu où chaque enfant progresse à son rythme, au mieux de ses possibilités, découvre et développe ses talents. Il me parait donc souhaitable que les enfants doués pour la conception technique, l’ingénierie, ou la programmation par exemple, puissent s’initier à ces domaines dans le cadre scolaire.

Plaidoyer pour un enseignement asynchrone

classe
L’archétype de l’enseignement synchrone est celui dispensé en salle de classe, à l’école ou au collège. Tous les enfants d’un même âge sont censés acquérir les mêmes compétences à la même vitesse. Il reçoivent simultanément les mêmes explications et font en même temps les mêmes exercices, dans toutes les matières enseignées.

Dans l’enseignement supérieur, beaucoup d’enseignements sont en grande partie basés sur ce modèle synchrone, notamment en ce qui concerne les cours magistraux, les séances de travaux dirigés et les évaluations. Depuis plusieurs années, j’essaie une autre approche que je présente de manière synthétique dans ce poster consultable en ligne.

Examens : la rapidité doit-elle être déterminante ?

examenLors de mes études universitaires, j’ai eu le sentiment que la plupart des examens que j’ai passé étaient des épreuves de rapidité. Plus que la difficulté intrinsèque des exercices proposés, c’est bien souvent le temps attribué pour les résoudre qui me posait problème.
Une telle sélection par la vitesse est-elle une bonne chose ? A mon avis, tout dépend de la nature des compétences évaluées ! Si la rapidité est critique pour ces compétences, alors elle doit l’être au cours des entraînements et des examens associés. Dans le cas contraire, les candidats devraient bénéficier d’un temps suffisant pour traiter confortablement les exercices proposés dès lors qu’ils maîtrisent les compétences évaluées, ce qui implique qu’une partie significative d’entre eux devrait avoir terminé l’épreuve avant le temps réglementaire.
Pendant très longtemps, j’ai utilisé la rapidité comme variable s’ajustement pour doser la difficulté de sujets d’examens que je concevais. Mais depuis que j’ai articulé mes enseignements et mes évaluations autour d’une grille de compétences, il y a quelques années, j’ai radicalement changé d’approche : je considère qu’un examen doit être une évaluation sommative permettant de déterminer ce que chaque candidat sait et ne sait pas faire au regard des compétences évaluées.
Si par exemple une des compétences à évaluer était « savoir traduire un algorithme en un programme en langage C à une vitesse minimum de 3 lignes par minutes », alors je pénaliserais à l’examen les candidats qui codent moins vite. Mais si la compétence est « savoir traduire un algorithme en un programme en langage C » sous-entendu en prenant le temps qu’il faut pour le faire bien, alors je vais faire mon possible pour que des étudiants qui codent aussi bien mais à des vitesses différentes aient la même note. L’idée est « tu sais faire ou tu ne sais pas faire, mais si tu sais faire, tu as largement le temps de le faire ».
En pratique, il faut évidemment fixer des limites. Je pense qu’un facteur deux entre le temps d’exécution des candidats les plus rapides et le temps accordé à tous peut être considéré comme raisonnable. Autrement dit, dans le cas d’une épreuve de deux heures, parmi les candidats maîtrisant les compétences évaluées, les plus rapides devraient avoir terminé en une heure.
Un tel critère d’évaluation est-il réaliste au regard des besoins des entreprises ? A mon avis oui. J’ai travaillé en entreprise pendant plusieurs années avant de devenir universitaire et il m’est arrivé de sélectionner des candidats en vue du recrutement de nouveaux collaborateurs. Comme une réminiscence de cette époque, je me demande parfois lesquels de mes étudiants je recruterais sur un poste en recherche et développement. Et la réponse est : pas les plus rapides, mais ceux qui prennent le temps d’analyser un problème à résoudre et de considérer différentes pistes susceptibles (ou pas) de conduire à une solution. La qualité du raisonnement est plus importante que la rapidité et une tendance à aller trop vite finit souvent par être contreproductive.
Ce principe, en revanche, ne me semble pas applicable aux concours. Le but d’un concours n’est pas de valider des compétences mais de classer des candidats. La rapidité est alors un moyen pratique de différencier ceux ayant donné les mêmes réponses. Mais comment prendre en compte ce critère lorsque la qualité des réponses est différente ? Je n’ai pas de réponse, n’ayant jamais été amené à concevoir des épreuves de concours.

Remarque : Les idées que je défends dans ce billet reflètent mes opinions personnelles et n’ont pas la prétention d’être des vérités universelles. Il est tout à fait possible qu’elles ne soient pas partagées par tous les enseignants. Il faut se garder de tenter d’imposer une pensée unique en matière de pédagogie.