La capacité de réflexion d'un programmeur serait influencée par son premier langage ou celui qu'il utilise le plus
Partagez-vous cet avis ?

Le , par Michael Guilloux, Chroniqueur Actualités
Un langage de programmation, par sa structure et ses paradigmes, peut influencer la manière dont un programmeur peut penser, mais également définir les autres langages qu’il peut apprendre facilement et ceux auxquels il ne va jamais s’adonner. Il faut entendre par paradigme d’un langage, un style fondamental de programmation informatique qui traite de la manière dont les solutions aux problèmes doivent être formulées dans ce langage de programmation.

Parmi les principaux paradigmes, on peut citer la programmation orientée objet, la programmation fonctionnelle, la programmation impérative, la programmation relationnelle, la programmation déclarative, etc., y compris des paradigmes dérivés. Certains langages sont conçus pour supporter un paradigme (le cas de Java qui supporte la programmation orientée objet, tandis que Haskell supporte la programmation fonctionnelle), alors que d’autres supportent des paradigmes multiples (à l’image de C++ qui supporte la programmation procédurale, la programmation orientée objet et la programmation générique).

D’après Sharon Fisher, éditrice du blog Simplicity 2.0, tout cela entraine le fait que le premier langage de programmation appris ou votre langage de programmation préféré peuvent changer votre manière de penser et vous inculquer certaines habitudes de programmation. Ces habitudes vous lient dès lors à un certain nombre de langages que vous pouvez facilement apprendre alors que rejetez d’autres. D’ailleurs, Edsger Dijikstra, lauréat du prix Turing en 1975, pense la même chose.

« Les outils que nous utilisons ont une influence profonde (et sournoise) sur notre manière de penser et, par conséquent, sur nos capacités de réflexion », a-t-il écrit. Et d’ajouter qu’il est « pratiquement impossible d'enseigner la bonne programmation aux étudiants qui ont eu une exposition antérieure au BASIC : en tant que programmeurs potentiels, ils sont mentalement mutilés, au-delà de tout espoir de régénération ». Il estime encore que l’on devrait bannir l’enseignement de COBOL pour l’influence négative que ce langage pourrait avoir sur la manière de penser des développeurs : « L'utilisation de COBOL estropie l'esprit ; son enseignement devrait, par conséquent, être considéré comme une infraction pénale ».

D’après Sharon Fisher, une personne dont le premier langage de programmation a été APL réfléchit de la même manière que quelqu'un dont le premier langage a été COBOL ou l'assembleur. Pour aller dans le même sens de la déclaration d’Edsger Dijikstra sur l’impact des outils que nous utilisons, Fisher explique qu’une personne qui a commencé son apprentissage des outils informatiques avec Microsoft Excel y sera tellement accrochée qu’elle aura tendance à l’utiliser pour tout faire, même les bases de données.

À propos de cette dépendance au premier langage que l’on a appris ou à son langage de programmation préféré, elle illustre son idée par bien d’autres exemples, comme le fait que les « programmeurs C utilisent C ++ simplement comme un meilleur C ». En ce qui concerne les programmeurs du langage de scripts JavaScript, elle soutient qu’ils « manquent totalement à la fois le côté fonctionnel et le côté objet orienté ». Et d’ajouter que « les programmeurs Clojure/Scala programment fondamentalement en Java avec une syntaxe légèrement modifiée ».

Ce point de vue serait également vérifié de manière inverse. Certaines personnes peuvent en effet ne pas être en mesure de savoir comment résoudre un problème tout simplement parce que le langage qu'ils utilisent ne supporte pas le concept permettant de le faire, poursuit Sharon Fisher. Elle conclut donc ici que « nos pouvoirs créateurs sont limités par les idées qui peuvent être exprimées dans le langage de programmation que nous utilisons » et certaines solutions sont tout simplement « hors de notre portée parce qu'elles ne peuvent pas être clairement exprimées dans ces langages ».

Source : Sharon Fisher

Et vous ?

Qu’en pensez-vous ? Partagez-vous l’avis de Sharon Fisher ? Pourquoi ?
D’après vous, quels sont les langages qui pourraient avoir une mauvaise influence sur la capacité des programmeurs à résoudre certains problèmes dans d’autres langages ? Illustrez votre point de vue avec des cas concrets.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 24/10/2016 à 17:17
Un sujet aussi trollatoire, c'est réservé au Vendredi traditionnellement.

Oui un langage pratiqué de manière monomaniaque peut considérablement diminuer nos capacité de réflexion, mais non ça n'a rien d'irrémédiable. Ça dépend seulement de l'ouverture et de la volonté du programmeur.
Avatar de Jbx 2.0b Jbx 2.0b - Membre expérimenté https://www.developpez.com
le 24/10/2016 à 17:22
il est « pratiquement impossible d'enseigner la bonne programmation aux étudiants qui ont eu une exposition antérieure au BASIC : en tant que programmeurs potentiels, ils sont mentalement mutilés, au-delà de tout espoir de régénération. »
Ça me parait un peu exagéré quand même. J'ai pour ma part appris le BASIC entre 10 et 12 ans sur on Atari ST, et je crois que ça a été plutôt bénéfique. Pourtant, moi et mon cerveau mutilé, on a pas recodé avant 18 ans, ou j'ai alors appris successivement le C, le C++, le Python et un peu plus tard le Java et le Javascript, tout en jouant un peu avec d'autres langages (C#, ASM, PHP...) à l'occasion.
Avatar de youtpout978 youtpout978 - Membre expert https://www.developpez.com
le 24/10/2016 à 17:34
Je ne trouve pas que cet article soit faux, venant du C♯ quand je fais du JS j'ai tendance à conceptualiser ça comme si je faisait du C♯.
Avatar de captaindidou captaindidou - Membre éclairé https://www.developpez.com
le 24/10/2016 à 19:10
Je me sens pas concerné par cet article et je pense que la plupart des gens ici non plus.

Lorsque j'ai commencé à programmer, c'était en Locomotive Basic.
Mais les principales limitations : la programmation monolithique, le manque de structuration (GOTO et GOSUB seulement).
Lorsque Turbo PASCAL m'est apparu, je l'ai accueilli comme une bénédiction. Ces limitations levées, on pouvait envisager des projets plus consistants. Locomotive Basic n'était taillé que pour pour se substituer au langage shell.
Mais Turbo Pascal était bien incapable de faire de la programmation système. Je me suis mis à l'assembleur Z80.
Puis fasciné par l'IA, je me suis mis au Prolog.
Lorsque la programmation orientée objet s'est popularisée fin années 80 et que C++ est arrivé, ma curiosité m'a poussé à apprendre ce langage. J'avais 17 ans. C'était l'année du bac.
La factorisation du code et la modélisation abstractive par classe était si pratique que j'ai abandonné Pascal.
Etc, etc, ...

Donc, pour moi, l'article est en contradiction avec ce que recherche constamment un artisan normalement constitué : employer l'outil le plus performant pour accomplir son projet dans les meilleures conditions.

Il est bien vain de faire de son expérience ou peut-être même son ressenti, une généralité dans un sens comme dans l'autre.
En tous cas, ce qui est dit dans cet article n'est sans doute pas bien scientifique.
Elle se base sur l'expérience vécue ressentie. Cette thèse mériterais d'être étayée par une étude sérieuse si on ne connaissait pas la plasticité du cerveau et ses facultés d'adaptation.

PS : Je pense que Dijikstra est un vieil universitaire réact et méprisant envers ses étudiants. Il est écœurant.
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 24/10/2016 à 20:15
Je pense que l'influence du premier langage est très exagérée. Le premier langage que j'ai appris était BASIC, ce n'est pas pour autant que j'écris du code spaghetti à base de GOTO (et je ne crois pas être « mentalement mutilés, au-delà de tout espoir de régénération. »). J'ai ensuite fait du Pascal, ce n'est pas pour autant que je ne sais écrire que du code procédural ; j'ai appris la POO sans difficulté particulière.

L'influence du langage préféré, par contre, est réelle à mon avis. Je fais surtout du C#, et c'est clair que ça m'influence quand j'utilise un autre langage. Ça ne m'a pas empêché d'apprendre des langages fonctionnels (Haskell ou F#), mais c'est vrai que j'ai tendance à aborder les problèmes d'une façon plus impérative que fonctionnelle, et que ça demande un effort de les traiter de façon fonctionnelle. D'ailleurs je pense que c'est un excellent exercice d'apprendre un paradigme complètement différent, ça fait travailler l'agilité d'esprit.
Avatar de zobal zobal - Membre confirmé https://www.developpez.com
le 24/10/2016 à 20:35
Citation Envoyé par captaindidou Voir le message
Je me sens pas concerné par cet article et je pense que la plupart des gens ici non plus.
...
Il est bien vain de faire de son expérience ou peut-être même son ressenti, une généralité dans un sens comme dans l'autre.
Cherchez la contradiction...

Citation Envoyé par captaindidou Voir le message
PS : Je pense que Dijikstra est un vieil universitaire réact et méprisant envers ses étudiants. Il est écœurant.
C'est ta remarque que je trouve écoeurante. Déjà la citation de Dijkstra date de plusieurs décénnies donc je ne vois vraiment pas pourquoi tu le qualifies de vieux réac. De plus, il critique un système et non des personnes alors en quoi est-ce méprisant pour ses étudiants ?
Avatar de joublie joublie - Membre confirmé https://www.developpez.com
le 24/10/2016 à 21:40
Les affirmations de Sharon Fisher devraient être soutenues par des arguments de psychologie cognitive, non ? La plasticité cérébrale ne meurt pas après l'apprentissage d'un premier langage informatique...
Avatar de Mc geek Mc geek - Membre habitué https://www.developpez.com
le 24/10/2016 à 22:24
Citation Envoyé par Michael Guilloux Voir le message
Certaines personnes peuvent en effet ne pas être en mesure de savoir comment résoudre un problème tout simplement parce que le langage qu'ils utilisent ne supporte pas le concept permettant de le faire, poursuit Sharon Fisher. Elle conclut donc ici que « nos pouvoirs créateurs sont limités par les idées qui peuvent être exprimées dans le langage de programmation que nous utilisons » et certaines solutions sont tout simplement « hors de notre portée parce qu'elles ne peuvent pas être clairement exprimées dans ces langages ».
Ce qu'elle explique est totalement vrai quand on l'applique aux langues vivantes. On peut empêcher une population de réfléchir si on lui ôte les mots appropriés (c'est d'ailleurs une forme de dictature subtile, mais très efficace).
Néanmoins, pour la programmation, je pense qu'à part des réflexes amoindris dans les domaines moins abordés (fonctionnel pour la POO...), un codeur sera toujours un codeur, et ce n'est pas parce que l'on a appris à coder avec du BASIC, que l'on est incapable de coder correctement ! Notre langage de programmation ne définit pas notre manière de fonctionner !
Avatar de martopioche martopioche - Membre éclairé https://www.developpez.com
le 25/10/2016 à 0:48
Citation Envoyé par Michael Guilloux Voir le message

« Les outils que nous utilisons ont une influence profonde (et sournoise) sur notre manière de penser, et, par conséquent, sur nos capacités de réflexion », a-t-il écrit. Et d’ajouter qu’il est « pratiquement impossible d'enseigner la bonne programmation aux étudiants qui ont eu une exposition antérieure au BASIC : en tant que programmeurs potentiels, ils sont mentalement mutilés, au-delà de tout espoir de régénération. » Il estime encore que l’on devrait bannir l’enseignement de COBOL pour l’influence négative que ce langage pourrait avoir sur la manière de penser des développeurs : « l'utilisation de COBOL estropie l'esprit ; son enseignement devrait, par conséquent, être considéré comme une infraction pénale », dit-il.
J'avoue que sur cette partie, j'ai ri…

Pour le reste, c'est malheureusement vrai… Quiconque fait de la formation et a en face de lui des développeur sur une autre techno sait qu'il rejoue la scène de Yoda et Luke et va passer du temps à rappeler comment développer avec cette techno et non comment développer avec la techno connue en utilisant la syntaxe de la techno enseignée…

Et c'est bien le problème des devs : ils ont beaucoup de mal à sortir de leur zone de confort. Surtout avec les technos proches. Le nombre de projets Grails (donc Groovy) que j'ai vu torturés par des devs Java qui voulaient faire du Java/Frameworks au lieu de Grails/Groovy…
Avatar de Matthieu Vergne Matthieu Vergne - Expert éminent https://www.developpez.com
le 25/10/2016 à 7:57
Deux choses :
- oui, quand on connaît quelque chose, il est toujours plus simple/facile de s'y référer pour apprendre de nouvelles choses, parce qu'on construit mieux sur des concepts maîtrisés que sur des concepts pas encore compris.
- non, cela ne rend pas incapable d'apprendre autre chose, ni de raisonner autrement.

De la même manière que quand on apprend le français, on pense en français, et quand on apprend une nouvelle langue, on le fait en comparant avec le français. Si pour apprendre l'anglais ou l'espagnol ça marche plutôt bien, pour apprendre le japonais c'est un gageure, et de là on se met à croire que le japonais est super compliqué. Apprenez-le de zéro, et tout de suite c'est beaucoup plus logique, car on ne construit plus sur des concepts inadaptés au langage.

C'est la même chose pour les langages de programmation, et de manière plus générale pour tout apprentissage : apprenez une chose, puis apprenez-en une autre sur la base de celle-ci. Si c'est effectivement dans le prolongement, ça rentrera tout seul, sinon ça paraîtra complètement illogique. Cela ne veut pas dire pour autant que le nouveau concept ne peut pas être appris/maîtrisé : il s'agit juste de revenir aux fondamentaux. Mais comme ça demande plus de temps et d'efforts de recommencer de zéro, certains préfèrent ne pas "perdre leur temps" là-dessus, et de là on en sort une idée biaisée d'incapacité à réfléchir autrement.

Bref, pas grand chose de neuf vis a vis de ce qui a été dit plus haut : ne pas confondre capacité et volonté. Dès lors qu'on gagne en expertise quelque part, c'est avec les biais qui vont avec. Si on veut s'en défaire, il s'agit avant tout de se rendre compte de ces biais et de revenir aux fondamentaux pour recommencer sur une bonne base.
Contacter le responsable de la rubrique Accueil