Pouvez-vous améliorer vos compétences en programmation en apprenant d'autres paradigmes linguistiques?

9

Si oui, pouvez-vous me dire comment l'apprentissage d'un nouveau paradigme a changé votre approche pour résoudre les problèmes de programmation même si le problème se situe dans un autre paradigme / langage / technologie?

J'apprécierai vraiment Si vous pouvez me dire d'une manière spécifique, comment vos compétences en programmation X (ie: JAVA / C # / C ++) se sont améliorées en apprenant Y (ie: Scheme / Prolog / Lisp).

De plus, quels paradigmes suggérez-vous le plus pour devenir un bon programmeur?

Mes expériences sont uniquement structurées - POO, impératif - procédurales et dans une certaine mesure méta-programmation modèle, mais mon objectif n'est pas d'apprendre une autre langue, mais plutôt d'apprendre différentes approches pour résoudre les problèmes.

Merci!

Armando
la source
1
Je pense que les réponses à cette question seront une sorte de oui retentissant .
R0MANARMY

Réponses:

7

J'essaie d'apprendre au moins 1-2 nouvelles langues chaque année. Le plus que j'ai gagné a été d'apprendre un langage fonctionnel (F #) qui a changé ma façon de voir les problèmes - I = maintenant j'essaie de dire à la machine quoi faire au lieu de le faire, surtout en C # où j'utilise beaucoup Linq et des objets immuables maintenant que je connais les avantages de les utiliser. J'utilise également beaucoup de fonctions d'ordre supérieur (méthodes comme paramètres) et mon style de codage a changé (amélioré) en conséquence.

Dror Helper
la source
1
Idem pour ma programmation Python. J'aurais échoué lamentablement à écrire tout ce code d'arborescence et de génération d'analyseur dans un certain cas si je n'avais pas appris les techniques que j'ai fini par utiliser (les arbres impliquent à peu près la récursivité ou une version roulée à la main de celui-ci, le générateur d'analyseur se compose de fonctions d'ordre supérieur et s'inspire des combinateurs d'analyseurs, etc.) en apprenant Haskell.
Merci, vous avez réaffirmé ce que je soupçonnais ... Merci encore!
Armando
2

Absolument. Chaque langage de programmation que vous apprenez aura une façon différente de faire certaines choses. Certaines choses vous rendront fou, certaines choses que vous aimerez et d'autres choses vont lentement grandir sur vous.

Ce n'est jamais une perte de temps pour apprendre au moins les bases d'une nouvelle langue.

Toby Allen
la source
1

Ok, voici un exemple que j'ai rencontré.

J'ai appris un langage relativement ancien (VB6) pour un projet sur un ancien code que nous avions.
Le langage est très orienté Windows mais il n'y a pas autant de classes puissantes de haut niveau comme nous en avons dans le framework .Net.

J'ai dû faire quelques manipulations d'image, et cela m'a présenté les fonctions de l'API Windows pour les manipulations d'image.

Après avoir appris que cela m'a permis de mieux comprendre les classes GDI de .Net. Et la compréhension que parfois l'utilisation de l'API Windows sera beaucoup plus rapide (moins d'encapsulation de fonctions).

Donc, cela montre que même lorsque vous apprenez l'ancien code, vous pouvez toujours apprendre et obtenir une autre perspective.

Yochai Timmer
la source
1

Pouvez-vous améliorer vos compétences en programmation en apprenant d'autres paradigmes linguistiques?

D'après mon expérience, certainement oui. Avoir plusieurs façons différentes d'attaquer un problème est comme une palette d'outils. Un jour, vous (comme moi) aurez besoin de ces autres outils. Ou peut-être pas. Tout dépend. Quelques exempels:

Les langues ne sont généralement pas autonomes, elles viennent avec un environnement. J'ai passé un peu de temps à apprendre une langue étrange appelée awk . Il repose sur la mise en correspondance de modèles à l'aide d '"expressions régulières". En essayant d'apprendre le C ++ STL (pas très réussi), j'ai appris sur les cartes. En combinant ces deux concepts, j'ai pu très rapidement écrire des utilitaires de transformation de texte dans Pearl (la seule langue disponible sur la plate-forme).

Surtout pour le plaisir, j'ai essayé d'apprendre Erlang (pas très réussi). Il possède une bibliothèque de fonctions connues sous le nom d'OTP implémentant entre autres un moyen de gérer les erreurs, parfois connu sous le nom de laisser échouer et d'avoir un moniteur qui redémarre les fonctions. J'ai utilisé cette idée dans certains domaines, laissant parfois simplement les choses échouer au lieu de faire des tests sans fin.

Essayer d'apprendre Haskell (encore une fois avec peu de succès) m'a vraiment ouvert les yeux sur d'autres façons d'attaquer les problèmes. La programmation fonctionnelle sorte de (à mon avis) commence par l'écriture de code qui dit quel résultat vous voulez, pas l'écriture des étapes impliquées pour y arriver. Je trouve que cela m'a vraiment aidé à écrire un meilleur code SQL.

Dernièrement, j'ai essayé un peu de javascript. Et a trouvé un environnement connu comme hoché la tête. Aucun code n'est nécessaire pour créer un petit serveur domotique.

Pour mettre les choses en perspective, la plupart de mes tentatives dans diverses langues étaient (et sont) sur un niveau plutôt superficiel, principalement pour avoir une idée de ce dont les gens parlent. Il y a très peu de langues dans lesquelles je peux être productif.

ghellquist
la source
0

J'ai aussi beaucoup appris en barbotant dans un langage fonctionnel pendant un certain temps. Cependant, ce que j'en ai retenu, c'était moins de faire les choses différemment des langages impératifs que de rendre la concurrence plus facile. Il peut être appliqué aussi facilement dans un langage impératif que dans un langage fonctionnel, mais pour une raison quelconque, la plupart des exemples que j'ai rencontrés dans les langages impératifs étaient plus compliqués. (D'autres choses se sont avérées beaucoup plus compliquées dans les langages fonctionnels.)

Une autre chose que j'ai apprise d'un nouveau langage était des modèles de programmation supplémentaires. J'avais lu beaucoup d'entre eux, mais en voir et en utiliser plusieurs très bonnes implémentations a facilité la compréhension et a vraiment fait ressortir leur utilité et leur pertinence.

user1118321
la source