... comment puis-je développer des compétences de programmation qui peuvent être appliquées à toutes les langues au lieu d'une?
La clé de cette question est de transcender le langage et de ne pas penser au langage que vous codez.
WAT?
Les programmeurs polyglottes expérimentés pensent dans l' arbre de syntaxe abstraite (AST) de leur propre modèle mental du langage. On ne pense pas "j'ai besoin d'une boucle for ici", mais plutôt "j'ai besoin de faire une boucle sur quelque chose" et traduit cela en fonction de, pour, ou, ou itérateur ou récursion pour cette langue.
Ceci est similaire à ce que l'on voit dans l'apprentissage d'une langue parlée. Les personnes qui parlent plusieurs langues en pensent couramment le sens , et cela s’exprime dans une langue donnée.
On peut voir quelques indices de cet AST dans la paire de vidéos qui traitent des yeux. Compréhension de code avec suivi des yeux et expérience du code de suivi des yeux (novice) où sont surveillés les mouvements des yeux du débutant et du programmeur expérimenté. On peut voir le programmeur expérimenté «compiler» le code dans son modèle mental et le «faire tourner» dans sa tête, tandis que le débutant doit parcourir le code mot-clé par mot-clé.
Ainsi, la clé de la question du développement des compétences en programmation à appliquer à toutes les langues consiste à apprendre plusieurs langues de manière à pouvoir se distancer du modèle mental d’ une langue et à développer la capacité de générer l’AST pour un problème par eux-mêmes. une langue de tête qui est ensuite traduite dans une langue donnée.
Une fois que l’on a cette capacité à utiliser l’AST dans la tête, apprendre une autre langue dans une école de pensée similaire (aller à Befunge, c’est un saut de Java, mais pas autant de Forth ) devient beaucoup plus facile - c’est 'juste' traduire l'AST dans une nouvelle langue, ce qui est beaucoup plus facile les 3ème, 4ème et 5ème (etc ...) fois que c'est fait.
Il existe un article classique, Real Programmers Don't Use Pascal . Une partie de ceci se lit comme suit:
... le programmeur réel déterminé peut écrire des programmes en Fortran dans n'importe quelle langue
Il existe également des éléments pour lesquels vous ne pouvez pas simplement utiliser l'AST mental - vous devez également penser dans la langue. Cela prend un peu de temps (je suis toujours accusé d’écrire du code Perl en Python et mon premier code Lisp a été commenté: "C’est un très bon programme C.").
À cela, je dois signaler un article publié par l’ACM, Comment ne pas écrire le Fortran dans n’importe quelle langue . Le troisième paragraphe de l'article (sans les guillemets) aborde directement la question à l'examen:
Un bon codage présente des caractéristiques qui transcendent tous les langages de programmation généraux. Vous pouvez implémenter un bon design et un style transparent dans presque tous les codes, si vous vous y appliquez. Ce n'est pas parce qu'un langage de programmation vous permet d'écrire un code incorrect que vous devez le faire. Et un langage de programmation conçu pour promouvoir un bon style et une bonne conception peut toujours être utilisé pour écrire un code terrible si le codeur est suffisamment créatif. Vous pouvez vous noyer dans une baignoire avec un pouce d'eau, et vous pouvez facilement écrire un programme complètement illisible et incontrôlable dans une langue sans gotos ni numéros de ligne, avec une gestion des exceptions, des types génériques et un ramassage des ordures. Que vous écriviez Fortran ou Java, C ++ ou Smalltalk, vous pouvez (et devriez) choisir d'écrire du bon code plutôt que du mauvais.
Il ne suffit pas d'avoir l'AST, il faut aussi l'AST pour pouvoir traduire dans d'autres langues. Avoir un AST Fortran dans votre tête et écrire du code Fortran en Java n'est pas une bonne chose. Il faut aussi être suffisamment familiarisé avec la langue et ses idiomes pour pouvoir penser dans la langue (malgré ce que j'ai dit tout en haut).
J'ai vu du code Java écrit par quelqu'un qui n'avait pas arrêté d'écrire du code C. Il y avait un objet avec une méthode principale. Dans cet objet, il y avait un tas de méthodes statiques appelées par main
et des classes internes privées qui avaient des champs publics (et qui ressemblaient donc beaucoup à des struts). C'était du code C écrit en Java. Tout ce qui était fait était de traduire la syntaxe d'une langue à une autre.
Pour dépasser ce point, il faut continuer à écrire du code dans plusieurs langues, ne pas penser à ces langues lors de la conception du code, mais y penser lors de la traduction du dessin dans le code pour utiliser correctement les idiomes de langue.
Le seul moyen d'y parvenir - être capable de développer des compétences en programmation pouvant être appliquées à toutes les langues - est de continuer à apprendre les langues et de garder cette langue de programmation mentale souple plutôt que liée à une seule langue.
(Mes excuses à ChaosPandion pour avoir emprunté énormément à l'idée qu'il a présentée .)