Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

44PARTAGES

12  4 
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.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Uther
Expert éminent sénior 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.
23  0 
Avatar de 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.
16  0 
Avatar de Jbx 2.0b
Membre chevronné 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.
13  0 
Avatar de 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.
7  0 
Avatar de 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...
6  0 
Avatar de 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♯.
5  0 
Avatar de Pyramidev
Expert confirmé https://www.developpez.com
Le 26/10/2016 à 23:09
Bonjour,

Je propose de continuer le hors sujet sur les goto en langage C ici :
http://www.developpez.net/forums/d14...s/#post8779432
5  0 
Avatar de Iradrille
Expert confirmé https://www.developpez.com
Le 27/10/2016 à 7:12
Citation Envoyé par CodeurPlusPlus Voir le message
Je ne vois qu'une seule chose qui nécessite des gotos en C
Citation Envoyé par tomlev Voir le message
J'ai fait pas mal de C au début de ma carrière ; jamais utilisé goto... On peut toujours s'en sortir avec les structures de contrôle du langage.
On peut tout faire sans goto; on peut aussi tout faire sans fonctions ou sans structures.
Mais quand ça simplifie le code (ou le rend plus lisible) ça serait une erreur de ne pas l'utiliser. (pour la gestion d'erreur par exemple)

Sinon, le premier langage qu'on apprend formate notre façon de penser et de résoudre un problème.
Quelqu'un qui commence par le C n'imaginera pas une solution orienté objet naturellement par exemple (ça demande un effort supplémentaire de penser différemment); l'inverse et aussi vrai.
Mais c'est qu'une question d'habitude et de pratique, et les habitudes peuvent se changer.
5  0 
Avatar de captaindidou
Inactif 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.
6  3 
Avatar de 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 !
3  0