“Tout le monde ne peut pas être programmeur” a-t-il été étudié?

182

Un vieil adage auquel adhèrent beaucoup de programmeurs est le suivant: "Il faut un certain esprit pour apprendre à programmer, et tout le monde ne peut le faire."

Maintenant, je suis sûr que nous avons tous notre propre trésor de preuves anecdotiques, mais cela at-il été étudié scientifiquement?

Système en panne
la source
63
Cela ressemble à une bonne question de sceptiques.
Chad Harrison
10
Apprendre à programmer est très différent d’être réellement un programmeur de valeur . La programmation est très simple pour la plupart. Lire les spécifications, mettre en œuvre en conséquence. Tester. Répéter. Oui, tout le monde peut être programmeur. Tout le monde ne peut pas être un programmeur précieux . Certaines tâches requièrent beaucoup plus de réflexion et d’expérimentation que d’autres. Il vaut mieux laisser de telles choses à ceux qui aiment vraiment le faire. Un exemple pourrait être la mise en œuvre de constructions de bas niveau, le comptage de cycles d'horloge, de bits et d'octets sans aucun outil de programmation moderne ni quoi que ce soit. Tout le monde ne peut pas gérer ça.
Zxcdw
9
@zxcdw - Je ne remets pas vraiment en question "Tout le monde ne peut pas être un bon / précieux programmeur". C'est une donnée puisque "Tout le monde ne peut pas être un bon / précieux X" est une vérité universelle pour presque toute valeur de X en tant que vocation. Ce que je mets en doute, c’est la capacité d’ apprendre à programmer et à comprendre la chose pour le commun des mortels.
System Down
37
L'adage est prouvé chaque jour vrai par les programmeurs <sigh>
yannis
15
Je pense que l’esprit de cette question ne concerne pas la qualité des programmeurs, mais plutôt "on peut former tout le monde à résoudre un problème et à définir une solution logiquement correcte dans un langage non humain", ce que je pense parfois ne pas l’être. quelque chose que tout le monde peut faire. Les concepts de conception de la logique pour dicter les comportements non fondés sur une substance d'une machine non humaine sont extrêmement abstraits, ce niveau d'abstraction exige de pouvoir suivre mentalement de nombreuses indirections logiques, car on ne peut toucher les produits de chacune d'elles. marche avec tes mains.
Jimmy Hoffa

Réponses:

87

Une autre étude, Enquête sur la viabilité des modèles mentaux détenus par les programmeurs débutants :

Ce document décrit une enquête sur la viabilité des modèles mentaux utilisés par les programmeurs débutants à la fin d'un cours de programmation Java de première année. Les résultats qualitatifs identifient la gamme de modèles mentaux de valeur et d'assignation de référence détenus par les participants. L'analyse quantitative révèle qu'environ un tiers des étudiants avaient un modèle mental d'affectation de valeur non viable et que 17% seulement avaient un modèle mental viable d'affectation de référence. En outre, en termes de comparaison entre les modèles mentaux des participants et leur performance lors des évaluations en cours de cours et de l’examen final, il a été constaté que les étudiants dotés de modèles mentaux viables obtenaient de bien meilleurs résultats que ceux ayant des modèles non viables. Ces résultats sont utilisés pour proposer une approche plus "constructiviste"

Voir également les recherches ultérieures des mêmes auteurs de l’étude Sheep vs Goats (qui n’a jamais été publiée, pour être clair). Leur dernière et dernière étude sur ce sujet de 2009 est la méta-analyse de l’effet de la cohérence sur le succès dans l’apprentissage précoce de la programmation (pdf).

Un test a été conçu, qui visait apparemment à évaluer les connaissances des élèves en matière d’affectation et de séquence avant un premier cours en programmation, mais en réalité était conçu pour rendre compte de leurs stratégies de raisonnement. Une expérience a révélé deux populations d'élèves distinctes: l'une pouvait construire et appliquer systématiquement 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 eu de bien meilleurs résultats à l'examen de fin de cours que le second en termes de réussite ou d'échec. Le test ne permet pas de prédire avec précision les niveaux de performance, mais en combinant les résultats de six répétitions de l’expérimentation (cinq au Royaume-Uni et un en Australie), nous montrons que la cohérence a effectivement un effet important sur le succès des programmes d’apprentissage précoce, mais expérience de programmation d'arrière-plan, d'autre part,

Jeff Atwood
la source
24
"... cours de programmation Java de première année ..." <- J'ai trouvé votre problème.
Jon Galloway
4
Bornat, au - delà de rétracter le document original, discute des tentatives de reproduire le résultat de-moi 2009, ils ne semblent pas encourageantes: eis.mdx.ac.uk/staffpages/r_bornat/papers/...
Blaisorblade
6
Comme mentionné ci-dessus, le document original à ce sujet a été rétracté: retractionwatch.com/2014/07/18/…
Spongeboy
92

Oui, il existe un très célèbre journal en ligne conçu pour déterminer plus ou moins "Qui est fait pour être programmeur".

Une étude cognitive de l'apprentissage précoce de la programmation - Pr Richard Bornat, Dr Ray Adams

Tous les enseignants en programmation constatent que leurs résultats affichent un «double ralentissement». C'est comme s'il y avait deux populations: celles qui peuvent [programme] et celles qui ne peuvent pas [programme], chacune avec sa propre courbe en cloche indépendante.

Presque toutes les recherches sur l'enseignement et l'apprentissage de la programmation se sont concentrées sur l'enseignement: changer de langue, changer de domaine d'application, utiliser un IDE et travailler sur la motivation. Rien de tout cela ne fonctionne, et la double bosse persiste.

Nous avons un test qui sélectionne la population pouvant programmer, avant le début du cours. Nous pouvons distinguer la double bosse. Vous ne croyez probablement pas cela, mais vous entendrez parler après avoir entendu la conversation. Nous ne savons pas exactement comment / pourquoi cela fonctionne, mais nous avons quelques bonnes théories.


Voici un article de blog de Jeff Atwood qui interprète les résultats et met certaines choses en contexte.

Malgré les énormes changements survenus depuis l’invention de l’informatique électronique dans les années 50, certaines choses restent obstinément les mêmes. En particulier, la plupart des gens ne peuvent pas apprendre à programmer: entre 30% et 60% des étudiants d'un département d'informatique universitaire échouent au premier cours de programmation.

Les professeurs expérimentés sont fatigués mais ne l'oublient jamais; les débutants confiants qui croient que les anciens doivent avoir mal agi apprennent la vérité par une expérience amère; Il en est ainsi depuis presque deux générations, depuis que le sujet a commencé dans les années 1960.

Sergserg
la source
46
Pour être juste - cette étude prouve que 30 à 60% des élèves d'une école ne sont pas dérangés par le travail. Cela a été vrai pour tous les sujets et tous les temps!
Martin Beckett
15
Cet article est très intéressant et soutient l'idée que tout le monde n'est pas fait pour programmer. Malheureusement, les travaux ultérieurs des auteurs (également sur la page liée) montrent que leur test est moins prédictif que prévu initialement. "Nous ne pouvons pas prétendre séparer les moutons non programmés des chèvres programmant ... Il est regrettable que le résultat ne soit pas à la hauteur de la promesse initiale, mais cela n'a pas encore complètement fermé la porte à nos explorations."
AShelly
26
Pour être clair, le premier document de 2006 n'était qu'un projet et n'a jamais été publié. Donc, ce n'est pas exactement scientifiquement examiné. Peut-être préférable de regarder les dernières études sur la page de l'auteur .
Jeff Atwood
17
Rechercher le succès dans un cursus académique est un moyen étrange d’étudier le phénomène. Premièrement, les conférences sont probablement le moyen le moins approprié d’enseigner la programmation. Deuxièmement, tout le monde n’apprend pas (bien) des conférences. C'est trop de partialité par conception pour moi là-bas.
Raphael
5
Le professeur Bornat a ensuite pris la peine de retirer volontairement ce projet, car il avait des problèmes de santé mentale à l'époque. eis.mdx.ac.uk/staffpages/r_bornat/papers/… De plus, ma lecture de la Sec. 3 est que d'autres n'ont pas réussi à reproduire le résultat - comme on dit, même la conclusion de la méta-analyse de 2009 "est au moins affectée par l'environnement culturel et les pratiques éducatives ". Globalement, ma meilleure hypothèse est que le cours était mauvais, ce qui n’est pas surprenant, car "comment enseigner efficacement la programmation" est un problème de recherche.
Blaisorblade
33

Tout le monde peut être programmeur. Pensez à la facilité avec laquelle les gens saisissent les feuilles de calcul. Réfléchissez à la facilité avec laquelle Alan Kay initie les enfants à la programmation par des expériences et des explorations dans un environnement programmable.

Les gens peuvent étudier le succès dans des cours de niveau universitaire et en conclure que "certaines personnes ne sont pas aptes à apprendre la programmation". Cependant, une telle conclusion dépasse gravement les limites de la preuve observée. Combien d'échec pourrait plutôt être attribué à la manière dont la programmation est enseignée (trop abstraite?), Au style de programmation enseigné (trop impératif?) Ou à l'environnement de programmation (compilation, pas de retour immédiat?).

Il est bien entendu que les gens comprennent très bien les abstractions après avoir déjà travaillé avec plusieurs exemples concrets - c’est-à-dire que nous ne pouvons pas apprendre quelque chose avant de le savoir presque déjà. Commencer par l’abstrait est donc une façon totalement idiote d’enseigner la programmation. Beaucoup de gens qui trébuchent sur des "modèles mentaux" prémédits se développeraient bien s’ils apprenaient dans un environnement plus concret avec des retours en temps réel (comme par exemple à la Kahn Academy for CS ), puis les encourageaient à gravir les échelons de l’abstraction quand ils seraient prêts. Learnable Programming est un essai récent de Bret Victor attire l'attention sur les défis environnementaux inutiles auxquels les programmeurs sont confrontés lorsqu'ils apprennent.

Dans certains cas, ce sont les étudiants qui échouent dans leurs cours. La paresse intellectuelle et l'ignorance volontaire existeront dans tout grand groupe d'humains. Les gens intelligents ne font pas exception à la règle, comme peuvent en témoigner tous ceux qui se sont disputés avec une manivelle brillante. Mais, surtout pour la programmation et les mathématiques, ce sont souvent les cours qui échouent aux élèves.

dmbarbour
la source
7
Je pense que presque tout le monde peut apprendre le codage rudimentaire tout comme il peut apprendre la musique de base. Cependant, gagner sa vie en est une autre affaire. Par exemple, j'aime jouer de la guitare mais je ne vais pas faire une tournée de stade dans plusieurs villes ni apparaître dans un album de studio majeur dans un avenir proche.
Jfrankcarr
4
Jetez un coup d'œil au papier lié à la réponse de Serg. Même si ce n'est pas aussi clair que ce qu'ils avaient pensé au départ, la vérité est que certaines personnes ne peuvent tout simplement pas comprendre les concepts de base de la programmation, même après un mois ou deux de cours - par exemple: x = 1; y = x;et la question est " Quelles sont les valeurs de xet y? "
Izkata
3
Bonjour et bienvenue! Vous ne le savez probablement pas, puisque vous êtes très nouveau, mais nous n'aimons vraiment pas les questions ouvertes et / ou à la discussion. J'ai supprimé la Is it true that not everyone can learn how to program?phrase de la question, nos membres les plus expérimentés l'ont ignorée, réalisant qu'elle ne correspondait pas à nos directives et concentrant leurs réponses sur les aspects recherche / scientifiques de la question. Pourriez-vous s'il vous plaît faire la même chose?
Yannis
3
@ jfrankcarr - Toute compétence, de niveau professionnel ou compétitif, laissera de nombreux praticiens derrière. La plupart des gens ne peuvent pas parler ou écrire même un langage naturel de manière professionnelle.
dmbarbour
3
@Izkata - Le papier lié Serg a une valeur scientifique douteuse; des résultats similaires seraient obtenus à partir de toute classe mal enseignée: les gens qui comprenaient déjà la matière s’en tiraient bien. Et en ce qui concerne votre exemple de question: les questions qui supposaient une sémantique impérative et qui n'étaient certainement pas intuitives étaient plus courantes. Pourriez-vous même répondre à votre propre question si vous ne pouviez pas présumer de l'absence de concurrence?
dmbarbour
19

C'est peut-être anecdotique, mais quand j'ai enseigné la programmation d'introduction à quelques centaines d'étudiants en arts libéraux, je n'ai trouvé aucune telle "double bosse". Il me semblait qu'ils étaient tous très capables, même si certains travaillaient plus fort que d'autres, et très peu essayaient de bluffer.

Cela dépend en grande partie de la façon dont cela est enseigné.

Le désir tient également à beaucoup de choses - certains ne trouvent pas la programmation intéressante. Mais même ainsi, ils peuvent l'apprendre s'ils font un effort honnête.

Mike Dunlavey
la source
5
Je me demande souvent où le désir joue dans cette affaire. Nous savons tous à quel point la programmation est totalement inintéressante pour la vaste majorité de la population. ordinateur fonctionne.
Jimmy Hoffa
6
@ Jimmy: J'ai essayé de le rendre intéressant en le faisant participer à des projets personnels sur les jeux, la science, la finance, la musique, tout ce qui les intéressait. La programmation est beaucoup plus intéressante lorsqu'elle est un moyen de parvenir à ses fins.
Mike Dunlavey
2
@ Den: Eh bien, ils devaient faire de petits programmes pour leurs devoirs, ils avaient des tests et des tests, et chacun devait faire un projet de programmation personnel important, que j'ai tous noté. Le cours était obligatoire.
Mike Dunlavey
1
@ MikeDunlavey Les étudiants ont toujours des amis qui peuvent programmer et les devoirs peuvent être facilement trompés.
Sulthan
2
@Sulthan: Pas dans ma classe, ils ne l'ont pas fait. Certains ont essayé. Certains ont essayé de copier d'autres personnes lors d'un test. C'était évident - le code ressemblait trop à celui de quelqu'un d'autre et contenait en même temps des erreurs évidentes. Pour les projets, il n'y en avait pas deux pareils, et rien ne lève le drapeau rouge comme celui qui fait un travail médiocre sur les quiz et les devoirs mais qui tourne dans un beau projet. Je viens de faire un autre test et le leur donner. S'ils ne savent manifestement pas quelle direction prend, je ne suis pas obligé de leur donner une bonne note. Alternativement, je peux appeler un autre professeur.
Mike Dunlavey
7

À mes débuts, il était courant de passer un "test d'aptitude" avant d'obtenir un emploi en programmation. Il n'y avait pas beaucoup de diplômés en informatique, il était donc courant de recruter dans d'autres disciplines.

Les tests étaient similaires à ce que vous voyez sur les tests de QI (quel est le numéro suivant dans la séquence, etc.).

La preuve anecdotique est que, même si tous les testeurs qui ont réussi le test ne sont pas devenus de bons programmeurs, ceux qui ont échoué au test mais qui ont été embauchés pour d'autres raisons ne sont jamais devenus de bons programmeurs.

Malheureusement, les drones HR n’ont pas compris ces tests (et ont échoué lorsqu’ils les ont pris!), Le recrutement dépend donc de ce que les drones HR comprennent: une bonne université, la communication et le port de vêtements.

C'est à peu près la raison pour laquelle les grands départements informatiques ont beaucoup de personnes qui sont excellentes lors de présentations PowerPoint et très peu de bons programmeurs.

James Anderson
la source
1
+ Je suis tellement reconnaissant de ne jamais avoir (presque) dû passer par les ressources humaines.
Mike Dunlavey
4

Pour ceux citant l'étude de Double-Bosse ou de Chèvres contre moutons de Dehnadi et Bornat, il est intéressant de consulter les modèles mentaux et Aptitude de programmation de Caspersen et al (2007) dans lesquels ils tentent de la reproduire:

La prévision du succès des étudiants participant à des cours d'introduction à la programmation est un domaine de recherche actif depuis plus de 25 ans. Jusqu'à récemment, aucune variable ni aucun test n'avaient de pouvoir prédictif significatif. Cependant, Dehnadi et Bornat affirment avoir trouvé un test simple permettant de programmer l'aptitude à séparer proprement la programmation des moutons des chèvres non programmées. Nous présentons brièvement leur théorie et leur instrument de test.

Nous avons répété leur test dans notre contexte local afin de vérifier et peut-être de généraliser leurs conclusions, mais nous n'avons pas pu montrer que le test prédit le succès des étudiants dans notre cours d'introduction au programme.

Sur la base de cet échec de l’instrument de test, nous discutons de diverses explications de nos résultats différents et proposons une méthode de recherche à partir de laquelle il serait possible de généraliser les résultats locaux dans ce domaine. De plus, nous discutons et critiquons le test d'aptitude à la programmation de Dehnadi et Bornat et concevons des instruments de test alternatifs.

Thomas Park
la source
4

On peut faire des études sur les capacités d’abstraction ou d’autres connaissances utiles, mais la définition de la programmation n’est pas claire, et je pense que la citation n’est pas pertinente, car il existe des manières opposées de regarder la programmation:

Le premier type: les langages de programmation sont (ou devraient être) un genre de langage humain conçu pour décrire une tâche que l’ordinateur doit exécuter, de sorte que tous ceux qui parlent doivent pouvoir programmer. Cela s’appelle Scripting, BASIC, le système de composition TeX , etc ... La langue ou le système importe peu, c’est la façon dont leurs créateurs et leurs lecteurs ont interprété le tout: "Cher programme / ordinateur, veuillez écrire mon nom" , plutôt que "Donnez-moi un espace de la taille de onze caractères, puis donnez-moi l'adresse de cet espace, puis laissez-moi le stocker, puis entrez onze caractères dans cette mémoire que vous pouvez extraire de la mémoire tampon de votre clavier (mais n'oubliez pas de la nettoyer , etc."

Dans ce cas, il est clair que l’étude serait plutôt "Toutes les langues ne peuvent pas être assimilées rapidement?".

D'autre part, les langages de programmation ne sont qu'un moyen de décrire le fonctionnement d'un ordinateur ou comment il devrait fonctionner, comment il devrait être connecté si vous pensez aux ordinateurs des années 1950. Par conséquent, le programmeur ne peut rien faire, même s'il "parle" parfaitement le langage de programmation, si son intelligence ne peut pas atteindre ce niveau d'abstraction où vous voyez des octets stockés dans la mémoire, des chaînes comme des pointeurs, etc. retournez sur terre pour le relier au problème. Tous les humains ne peuvent donc pas programmer (en langage assembleur ...).

En dehors de cela, vous aurez besoin de toutes les qualités requises pour travailler et produire quelque chose: sachez très bien ce que vous voulez, facilitez la compréhension / complément / révision des autres, concentrez-vous sur vos objectifs, etc. un écrivain, un musicien, une prostituée ... prothésiste, etc.

Mais la plupart des humains ont de bonnes capacités d'abstraction, en particulier les enfants. Certaines écoles allemandes enseignent Haskell à des adolescents (des langages de programmation tels que Pascal ou Delphi sont enseignés dans toutes les écoles allemandes).

Donc, je dirais que la question est très difficile à répondre, et toute réponse (ou étude) est susceptible d'être sans pertinence.

Vous trouverez une très brève analyse de la façon dont les gens apprennent la programmation dans l'article Enseignez-vous à la programmation dans dix ans de Peter Norvig. Il semble penser qu'il n'y a pas de programmeur né.

Yves
la source
3
Bonjour et bienvenue! Je suis un peu confus quant à la manière dont votre réponse répond à la question, qui consiste vraiment à savoir si cela a été étudié ou non ...
yannis
désolé je me suis trompé avec le bouton "envoyer" ... J'espère que cela a plus de sens
Yves
Vous êtes sur la bonne voie, mais vous associez étroitement les langages de programmation avec le matériel (ordinateurs). La programmation n'est pas exclusivement la capacité de parler à l'ordinateur. La programmation consiste à décrire un processus de manière cohérente. Décrire un processus à un autre être humain revient à le coder dans un langage de programmation de haut niveau. La plus grande différence est que les humains sont plus tolérants à l'ambiguïté.
Empereur Orionii
Je ne défends pas ce point de vue, mais j'ai essayé de souligner le fait que les gens ont tendance à voir les langages de programmation et leur utilisation, soit comme des descriptions de tâches (ce qui est important pour une programmation et un script de haut niveau), ou des descriptions de "processus informatiques" (par exemple, les langages de bas niveau semblent plus proches du langage de modélisation VHDL que de VB.NET, même s’ils sont des langages de programmation). Ces 2 approches sont très différentes et pourtant 2 faces d'une même pièce. Ils insistent sur différents aspects de l'intelligence humaine, qui sont difficiles à quantifier. Il est donc difficile de les étudier.
Yves
3

Il y a de nombreuses années, j'ai suivi plusieurs cours incluant la théorie du leadership militaire. Une partie de la théorie était qu’il existait un continuum de leadership, allant de ceux qui étaient des leaders naturels à ceux qui ne pouvaient pas conduire un chien en laisse. L'idée était que les gens étaient répartis sur ce continuum de leadership dans une courbe en cloche, la plupart des gens se situant quelque part entre les deux extrêmes. Mis à part les rares personnes qui se trouvaient à l'extrême "ne pouvait pas diriger un chien", presque tout le monde pouvait apprendre l'art du leadership. La quantité d'effort requise pour transformer quelqu'un en chef dépendait de son rang dans le continuum.

Je soupçonne que la programmation a un continuum similaire et une distribution similaire. Il y aura ceux qui l'obtiendront simplement sans effort, et ceux qui ne pourraient jamais l'obtenir si leur vie en dépendait. Mais ce sont les rares à la fin de la courbe en cloche. La plupart des gens sont assis entre ces extrêmes dans le continuum. Ils peuvent apprendre à programmer, mais l'effort requis pour les enseigner dépendra de l'endroit où ils se trouvent.

Simon Tewsi
la source
Je vois beaucoup de gens qui ne conduisent pas correctement un chien en laisse. Je pouvais promener mes chiens sans laisse, même en ville. Je me suis toujours demandé pourquoi les gens ne font pas l'esprit de chien.
2

Je ne suis pas sûr que ce soit juste de la programmation. J'ai vu le même genre de phénomène avec des gens apprenant simplement à utiliser des ordinateurs. À l'université, j'étais assistant de laboratoire dans un laboratoire qui hébergeait une classe d'initiation à l'informatique destinée aux personnes âgées.

En deux semaines, je pouvais identifier ceux qui l'obtiendraient et ceux qui ne le feraient pas avec une précision de 100%. Vous avez soit accepté le fonctionnement de l'ordinateur, soit vous vous êtes heurté contre toute la classe. Il n'y avait pas de terrain d'entente. (Le fait qu'il s'agisse d'une classe d'aînés signifiait que nous avions beaucoup de frappeurs à la tête, ce qui rendait le modèle beaucoup plus évident.)

Loren Pechtel
la source