Est-ce «informatique» ou «programmation»?

Est-ce «informatique» ou «programmation»?

Un livre blanc sur la politique de l'éducation (indice: ce n'est pas la même chose)

par Lewis Ellis et Sam Corcos

Les partisans de l'enseignement de l'informatique ont poussé à des améliorations de l'enseignement pré-universitaire de l'informatique, déplorant souvent sa sous-représentation et son manque de reconnaissance dans nos lycées.

Ces plaintes ne sont pas sans fondement: en novembre 2015, seuls 27 États américains reconnaissent l' informatique comme une classe de mathématiques ou de sciences, et 90% des lycées n'ont aucune offre dans le domaine. Les hommes d'État, les entrepreneurs et les célébrités ont encouragé une transition vers une plus grande éducation en informatique.

Il n'y a tout simplement pas assez de personnes formées et possédant ces compétences aujourd'hui.

—Mark Zuckerberg, Facebook

Avec autant de défenseurs publics qui se sont manifestés - en particulier autour de la campagne «Hour of Code» de Code.org en décembre 2014 - l'enseignement de l'informatique est devenu un problème courant. On demande aux visiteurs de Code.org s'ils sont d'accord avec l'idée que «chaque élève de chaque école devrait avoir l'opportunité d'apprendre l'informatique» et de signer leur nom pour montrer leur soutien. Près de 2 millions de personnes l'ont fait, moi y compris.

Il est important d'aller de l'avant dans le futur, c'est-à-dire maintenant, que tout le monde l'apprenne. - Chris Bosh, Miami Heat

Mais il y a une subtilité en jeu lorsque vous essayez d'être plus précis et de demander à quelqu'un exactement ce qu'il soutient. Soutenez-vous les cours de «programmation» ou d '«informatique»? Contrairement à ce que vous pourriez penser, ces deux sujets sont à peu près aussi différents que le latin l'est de l'algèbre linéaire . Permettez-moi de vous expliquer.

Essayez-le et ne laissez personne vous dire que vous ne pouvez pas - Président Obama

Qu'est-ce que l'informatique?

C'est mathématique . En tant que diplômé en informatique, je peux vous dire de première main que l'informatique implique d'écrire très peu de code - en particulier aux niveaux supérieurs. Si je devais attribuer arbitrairement un pourcentage à «mathématiques contre programmation», je dirais que l'informatique est au moins 80% de mathématiques et au plus 20% de programmation.

En informatique, vous apprenez les algorithmes de tri, les machines à états finis, les machines de turing, les analyseurs, les lexers, les tokenizers, le lambda calcul, les monades, les monoïdes, les foncteurs, les listes, les cartes, les maybes, les lentilles et les futurs, pour n'en nommer que quelques-uns.

Il est très courant que les cours d'informatique comportent un prérequis en mathématiques. Les algorithmes et les structures de données reposent fortement sur une formation en mathématiques .

Contrairement à l'opinion populaire, les majors en informatique ne sont pas nécessairement de bons programmeurs . Certes, ils montrent une aptitude plus élevée à devenir un bon programmeur, mais ils savent rarement comment coder quoi que ce soit d'utile sortant de l'université avec un diplôme en informatique.

Qu'est-ce que la programmation?

function fibonacci(n) { if (n < 2) { return 1; } else { return fibonacci(n - 2) + fibonacci(n - 1); }}

C'est quelque part entre une langue étrangère et une logique formelle . Un mot que vous entendrez beaucoup en programmation est «syntaxe», c'est-à-dire comment un langage de programmation particulier structure sa logique. Cela peut sembler familier car c'est le même mot - pas par hasard - que les cours de langue étrangère utilisent pour décrire la structure des phrases.

La programmation ne nécessite pas une formation hautement mathématique, et tout comme une langue étrangère, la seule façon de devenir un meilleur programmeur est de pratiquer. La plupart des gens qui commencent à programmer sont surpris de découvrir à quel point il est facile d'apprendre et à quel point les mathématiques sont peu impliquées. Comme un ami me l'a décrit un jour: «Une fois que ça ne ressemble plus à The Matrix , c'est en fait assez facile.» D'après mon expérience, ce changement de perception prend généralement moins d'un mois.

Un exemple pour illustrer la différence: en programmation, vous générez un nombre aléatoire avec la fonction Math.random () . En informatique, vous apprenez à créer des algorithmes qui créent des nombres vraiment aléatoires qui peuvent être utilisés dans une fonction telle que Math.random () pour générer un nombre aléatoire.

Description du problème

J'ai appris moi-même à programmer au collège et j'ai été déçu par l'offre limitée d'informatique à mon lycée *. Au collège, j'ai enseigné l'informatique (CS) à plusieurs de mes pairs en tant qu'AT de premier cycle pendant sept semestres, et j'ai également organisé et dirigé quatre instances d'un concours de programmation de niveau secondaire ** totalisant plus de 1000 participants. J'ai passé beaucoup de temps à interagir avec des étudiants et des instructeurs de CS au niveau secondaire et postsecondaire.

J'ai également discuté explicitement de l'éducation CS avec de nombreux enseignants du secondaire, de l'apprentissage de leurs succès, difficultés et échecs abjects. Une grande partie de ce que j'ai entendu correspond à une enquête de 2013 de la Computer Science Teachers Association , qui a révélé que:

40 pour cent des enseignants ont déclaré que le plus grand défi dans l'enseignement de l'informatique était le manque de soutien ou d'intérêt de la part du personnel scolaire. Un autre 35 pour cent ont déclaré que le manque d'intérêt ou d'inscription des étudiants était le plus grand défi. La technologie en évolution rapide et le manque de ressources pédagogiques ont été cités comme le plus grand défi par 30,5% et 23,5% des enseignants, respectivement.

Les conversations que j'ai eues avec les enseignants reflètent les résultats de cette étude. Un problème majeur dont ces enseignants m'ont parlé est la façon dont ils notent leurs devoirs de programmation. Ils recevaient généralement les soumissions de leurs étudiants par courrier électronique, puis les exécutaient et les évaluaient manuellement sur leur propre ordinateur. Ce système archaïque prend un ordre de grandeur plus de temps à noter que les systèmes de soumission largement utilisés et les auto-classeurs utilisés dans la plupart des universités.

Ils expliquent que sans le nombre d'inscriptions, la dotation en personnel ou le soutien financier d'un département universitaire de CS, ils n'ont pas les ressources pour développer ou investir dans quelque chose de plus sophistiqué. Même s'ils le faisaient, les écoles n'ont généralement qu'un seul professeur d'informatique qui en bénéficierait. Néanmoins, ces enseignants auraient toujours des histoires inspirantes sur les élèves qu'ils ont enseignés, la curiosité qu'ils ont contribué à susciter et les choses passionnantes que leurs élèves ont continué à faire.

L'un des défis consiste à convaincre les étudiants de suivre un cours d'informatique s'il est proposé. Cela est principalement dû au fait qu'il est souvent proposé exclusivement en option. Une série d'incitations manquantes a freiné la croissance de l'enseignement de l'informatique dans une spirale qui se renforce négativement. Quand une classe ne compte pour rien, il y a:

  1. Aucune incitation pour les étudiants à le suivre, et donc…
  2. aucune incitation pour les écoles à l'offrir, et donc…
  3. aucune incitation pour les enseignants à se former pour l'enseigner.

Il serait malheureux que des étudiants qui seraient autrement intéressés soient écartés prématurément du domaine en raison d'exigences de diplomation mal appliquées ou insuffisamment soutenues.

L'informatique de placement avancé (AP) existant au lycée Un programme d'études est en fait principalement un cours de programmation. Il enseigne la programmation orientée objet avec Java et son examen se compose entièrement de questions telles que «Voici un morceau de code, que fait-il?» et "Voici un problème, écrivez un programme pour le résoudre."

Les principes d'informatique AP récemment introduits , quant à eux, se concentrent sur la pensée informatique de plus haut niveau, la programmation n'étant que l'une des sept «grandes idées» couvertes par le programme. Il aborde des sujets allant de l'audio et de la vidéo au fonctionnement d'Internet, à la façon dont nous assurons la sécurité des choses et aux impacts que les systèmes informatiques peuvent avoir et ont sur le monde. Il est si célibataire à la programmation qu'il n'est même pas nécessaire que les enseignants utilisent un langage de programmation spécifique.

Bien sûr, une partie de la confusion vient de l'histoire: AP Computer Science A (et anciennement AP CS AB) était en grande partie le seul spectacle en ville pendant des décennies, et c'était un cours de programmation appelé Computer Science. Le programme AP Computer Science Principles est le type de cours de base large adapté au nom plus général «Informatique».

Ce nouveau programme AP Computer Science Principles a été introduit fin 2014 pour être lancé au cours de l'année scolaire 2016-17, et 60 millions d'élèves ont participé à «Hour of Code» en 2014, contre seulement 20 millions en 2013. Nous avons maintenant 27 États reconnaissant les cours d'informatique sont plus qu'un choix facultatif et le taux d'adoption augmente.

Mais malgré ces améliorations, notre système éducatif évolue trop lentement et sans une compréhension claire de la direction dans laquelle nous allons.

Défis particuliers de la programmation d'enseignement

Le programme des cours d'informatique est assez uniforme et bien établi . Le fondement mathématique de la matière n'a pas changé depuis des décennies, il est donc pratique d'enseigner une classe d'année en année avec les mêmes cours raffinés.

La programmation, en revanche, est assez différente . Il existe des dizaines de langages de programmation majeurs, chacun avec des cas d'utilisation, une complexité et des performances variables. Non seulement il existe des dizaines de langues, mais il existe également des centaines de frameworks autour de ces langues qui changent à un rythme encore plus rapide. Cela rend presque impossible d'enseigner un cours à jour sur le sujet, mais il existe des moyens de contourner ce problème, qui seront discutés plus tard.

La plupart des cours de programmation de niveau collégial (appelés à tort «informatique») enseignent un langage de programmation appelé Java. Java a été introduit par Oracle au milieu des années 1990 et était extrêmement populaire et est encore largement utilisé aujourd'hui. Sans entrer dans les détails, Java n'est pas le langage de programmation que les étudiants devraient apprendre maintenant: 20 ans après la sortie de Java. Le langage de programmation du futur est un langage appelé JavaScript, qui, malgré son nom similaire, n'est en fait aucunement lié à Java .

JavaScript est le langage de programmation le plus connu et c'est le langage le plus employable . La plupart des frameworks Web de nouvelle génération sont entièrement exécutés sur JavaScript, y compris Angular (pris en charge par Google), React (pris en charge par Facebook) et Meteor. JavaScript vous permet de créer des logiciels complets, des sites Web, des applications mobiles et à peu près tout ce à quoi vous pouvez penser. Et grâce à un investissement massif dans le langage de Google (pour plus d'informations, voir V8), JavaScript est désormais plus de 5 fois plus rapide que Python, le langage de programmation actuellement privilégié des sciences et des universités.

Même avec tout ce que JavaScript a pour cela, il m'est difficile de dire que tous les cours de programmation devraient enseigner JavaScript, du moins au niveau d'introduction. L'efficacité des langages de programmation change avec le temps, donc la mise en place d'un programme rigide pourrait faire plus de mal que de bien , c'est ainsi que nous nous sommes retrouvés avec des cours d'enseignement de Java conservés depuis les années 90.

Certains langages de programmation sont également meilleurs pour effectuer certaines tâches. C ++ est un langage très ancien qui fait toujours partie des langages les plus efficaces disponibles. Python dispose également d'un vaste éventail de ressources disponibles qui rendent l'apprentissage automatique beaucoup plus pratique qu'une implémentation en JavaScript.

Un autre défi majeur de la programmation d'enseignement est la difficulté de définir les programmes et de mesurer l'efficacité. En outre, comme mentionné ci-dessus, la notation est un processus laborieux qui est - ironiquement - complété manuellement dans la plupart des salles de classe.

Options politiques

Lorsqu'on demande aux élèves ce qui les a motivés à s'intéresser à l'informatique, un fil conducteur devient rapidement apparent: ils ont aimé l'informatique après une brève exposition au sujet. Je n'ai jamais entendu personne dire qu'il avait fallu beaucoup de temps pour s'intéresser au sujet; ils avaient juste besoin d'une introduction, et la curiosité s'est occupée du reste.

Cela m'amène à une étude réalisée il y a quelques années qui suggérait un résultat connexe incroyable. Le document original est ici, et Jeff Atwood fournit un excellent résumé ici. D'après le résumé de l'article:

Une expérience a trouvé deux populations distinctes d'étudiants: on pourrait construire et appliquer de manière cohérente un modèle mental d'exécution du programme; l'autre semblait incapable de construire un modèle ou d'en appliquer un de manière cohérente. Le premier groupe a obtenu de bien meilleurs résultats à l'examen de fin de cours que le second en termes de réussite ou d'échec… Nous montrons que la cohérence a un fort effet sur la réussite de l'apprentissage précoce au programme mais l'expérience de programmation de base, d'autre part , a peu ou pas d'effet.

Pour citer le point de vue de Jeff Atwood, cela signifie que «l'acte de programmation semble littéralement inaccessible à un sous-ensemble considérable d'étudiants en informatique. Ce ne sont pas seulement des chiffres qui racontent une histoire; tous les enseignants en informatique que j'ai interrogés ont eu le même pressentiment que les choses n'ont pas tout à fait cliqué pour une partie importante de leur classe.

Je l'ai vu de première main à maintes reprises pendant mon temps d'assistant d'enseignement pour divers cours de CS à programmation intro-séquence. Chaque semestre, il y avait un certain nombre d'étudiants qui, non faute d'essayer, ne pouvaient tout simplement pas réussir le cours. C'était prototypique: ils investissaient 20 ou 30 heures par semaine, le triple de celui de l'étudiant moyen, essayant de mener à bien chaque mission, passant souvent 10 ou parfois même 20 heures de bureau à chercher des conseils, à confirmer leur compréhension et à poser des questions.

En tant qu'assistants d'enseignement (AT), nous ferions tout ce que nous pouvions, mais il était toujours douloureux de voir ces étudiants déployer tant d'efforts alors que tant d'autres passaient en comparaison, passant 5 ou 10 heures par mission et ayant rarement besoin d'aide.

Cela arrivait chaque semestre, dans chaque cours d'introduction au CS, à une partie non négligeable de la classe. Ce sont quelques-uns des étudiants les plus brillants du monde à l'Université de Pennsylvanie, et une fois qu'ils découvrent que CS ne leur convient pas, ils deviennent chercheurs, banquiers, médecins et avocats. Si ces étudiants par ailleurs parfaitement intelligents et travailleurs découvrent que ce n'est pas pour eux, comment pouvons-nous nous attendre à ce que chaque élève du secondaire apprenne une quantité sérieuse de programmes?

Même si nous rejetons l'idée que beaucoup de gens ne comprennent tout simplement pas la programmation aussi bien que les autres, Dan Bricklin, un technologue décoré surtout connu pour avoir inventé le tableur électronique, propose une autre approche:

La programmation est une activité très sujette aux erreurs, en particulier avec les systèmes à «déclaration typée». La plupart d'entre eux sont très intolérants aux erreurs (même les simples fautes de frappe)… À moins d'être totalement immergé dans ce système de programmation particulier… c'est très difficile pour la plupart des gens à faire… cela ne veut pas dire que beaucoup de gens ne peuvent pas s'immerger dans les systèmes qui nécessitent une telle compréhension. Ils le font dans de nombreux aspects de leur vie. Par exemple, les avocats et les comptables fiscaux travaillent régulièrement avec une telle complexité dans leurs contrats et leur planification. Les médecins travaillent avec un nombre incalculable de variables… C'est juste que les personnes qui ne sont pas des programmeurs professionnels ou amateurs ne veulent généralement pas être si immergées dans quelque chose qui est rarement fait et qui ne fait pas partie du reste de leur vie. La question n'est pas vraiment «Pourquoi Johnny ne peut pas programmer» mais plutôt «Pourquoi Johnny ne veut pas ou ne choisit pas de programmer».

Au lieu de diviser les gens en groupes basés sur les performances, il considère les motivations et la complexité et suggère qu'il y a peut-être une auto-sélection en cours. Peut-être que certaines personnes ne veulent tout simplement pas investir massivement dans quelque chose pour lequel elles ne voient que peu d'utilité. Peut-être que certaines personnes aiment certaines saveurs de complexité mais pas d'autres.

Sam Altman, président de Y Combinator (le célèbre fonds d'amorçage qui a aidé Dropbox, Airbnb et d'innombrables autres entreprises technologiques à démarrer), a récemment tweeté un résumé concis de cette notion:

Tout le monde devrait avoir la possibilité d'apprendre à coder. Mais ce n'est pas la réponse à tout. Tout le monde ne l'aimera pas ou n'y sera pas doué. Je n'aimerai jamais ni ne serai bon au football. Un monde où CS est la seule option serait vraiment triste.

Donc qu'est-ce que tout cela veut dire? La programmation n'est pas pour tout le monde. Tout le monde ne l'aimera pas ou n'y sera pas bon; il en va de même pour l'informatique. Mais il est impératif que les étudiants aient l'opportunité d'essayer l'informatique le plus tôt possible, afin de décider par eux-mêmes s'ils veulent en savoir plus.

Maintenant que nous avons couvert une grande partie du contexte, il y a quatre options politiques à considérer:

  1. Toutes les écoles devraient-elles offrir des cours de CS?
  2. Toutes les écoles devraient-elles offrir des cours de programmation?
  3. Toutes les écoles devraient-elles exiger des cours de CS?
  4. Toutes les écoles devraient-elles exiger des cours de programmation?

Le premier obligerait les écoles à offrir un cours d'informatique avec le programme actuel; comme introduction de base au domaine, le programme actuel suffira. Cette option stratégique vaut absolument la peine d'être mise en œuvre . La plupart des gens supposent que c'est inévitable, mais cela ne se produit que par des changements dans la législation.

La seconde obligerait les écoles à offrir un cours de programmation. Malheureusement, cela serait nouveau pour les écoles publiques et nécessiterait un nouveau programme et une formation supplémentaire pour les enseignants. Les ressources en ligne, telles que CodeAcademy, CodeSchool, KhanAcademy et des dizaines d'autres ont fait un travail formidable en créant un programme facilement accessible et de pointe. Le couplage de l'apprentissage en classe avec certaines de ces ressources en ligne pourrait être la clé de l'enseignement des cours de programmation . Cette option de politique ne vaut la peine d'être mise en œuvre que si des ressources suffisantes sont dédiées à son fonctionnement.

La troisième option exigerait que les étudiants suivent un cours d'informatique comme condition d'obtention du diplôme. Cela se produira probablement à un moment donné dans le futur, mais il est prématuré de l'exiger en 2015 . Les ressources, la formation des enseignants et le soutien public sont insuffisants pour faire ce travail. Cela dit, les mathématiques que l'on apprend en informatique ne sont pas moins applicables au succès à long terme que la géométrie ou le calcul.

La quatrième option exigerait que les étudiants suivent un cours de programmation comme condition d'obtention du diplôme. Cela signifierait apprendre un langage de programmation, tel que JavaScript, C ++, Haskel, etc. Bien que ce soit une compétence utile pour de nombreuses personnes, il est tout à fait inutile de l'exiger en classe . Contrairement à l'anglais, aux mathématiques ou à l'histoire, la programmation est une compétence qui manque d'une large applicabilité en dehors de l'acte de programmation lui-même.

Recommandations politiques

Certaines mesures sont faciles à soutenir inconditionnellement: Oui, un bon cours d'informatique devrait compter comme plus qu'un cours facultatif. Oui, davantage d'écoles devraient offrir des cours d'informatique. Oui, nous voulons que plus de gens apprennent l'informatique. Mais au-delà de ces suggestions plus facilement soutenues, ce qui devrait être fait n'est pas aussi clair.

Une recommandation est de rendre accessible à tous les étudiants un vaste cours d'introduction au CS . Nous devons seulement en offrir suffisamment pour que les étudiants puissent l'essayer et voir s'ils l'aiment. S'ils le font et veulent en savoir plus, le cours a atteint son objectif et, espérons-le, des offres plus approfondies sont également disponibles. Si ce n'est pas le cas, le cours aurait dû tout de même enseigner certaines compréhensions utiles, pas seulement un tas de détails de programmation que l'étudiant indifférent n'utilisera probablement plus jamais.

Une autre recommandation est de définir des parcours de certification et des programmes clairs pour les enseignants en informatique . Peu d'États l'ont fait, mais cela contribue à rendre l'enseignement de l'informatique plus accessible aux enseignants intéressés. Cela conduit à plus de professeurs d'informatique, ce qui permet à plus d'écoles d'offrir des cours d'informatique. Cela nous aide également à savoir quand nous avons suffisamment d'enseignants CS pour envisager des initiatives futures plus importantes, qui nécessiteront plus de ressources que celles actuellement disponibles.

En tant que politique générale, je recommanderais ce qui suit, par ordre d'importance:

1. All high schools should offer computer science courses, with the current curriculum.
2. Computer science courses should satisfy a math or science course requirement.
3. All students should have the option to take at least an introductory computer science or programming course.
4. Programming courses, where taught, should be offered in a modern language, such as JavaScript.

À quiconque lira ceci, je suis très intéressé d'entendre ce que vous pensez et j'ai hâte de lire vos commentaires.

Additionnel

Photos gracieuseté de Unsplash

* Heureusement, mon lycée a offert un cours de CS et mon professeur d'informatique était super. Mais il n'y avait qu'un seul d'entre lui, et il a enseigné beaucoup d'autres cours, et peu de gens ont suivi son cours de CS, donc il n'y avait pas beaucoup d'espoir pour quelque chose de plus.

** PClassic.org

Sam Corcos est le principal développeur et co-fondateur de Sightline Maps, la plate-forme la plus intuitive pour l'impression de cartes topographiques 3D, ainsi que deLearnPhoenix.io, un site de tutoriels avancé pour la création d'applications de production évolutives avec Phoenix et React.