web-dev-qa-db-fra.com

(Pourquoi) Dois-je apprendre un nouveau langage de programmation?

Je suis assez compétent en Java, C/C++, JavaScript/jQuery et décemment bon en Objective-C. Je suis assez productif avec les langages et leurs frameworks correspondants et je produis des systèmes de niveau entreprise (et aussi à petite échelle) avec une facilité suffisante tout en gardant le code "propre" et maintenable (oui, je peux lire mon propre code après six mois :)

À moins que cela ne soit mandaté par la plateforme (iPhone, iPad, etc.) ou par l'organisation cliente/implémentation, juste "pourquoi" devrais-je apprendre un nouveau langage de programmation? Juste pour le fun"? Et que faire de ce plaisir si je ne fais rien de valable avec ça?

Beaucoup de mes pairs sont prêts à plonger pour apprendre la "prochaine nouvelle chose/langue" et c'est généralement Python, Ruby ou PHP (juste nommer un Maintenant, connaître le langage en soi est inutile à mon humble avis. Vous devez également connaître les cadres, connaître leur utilisation/API ainsi que les "bonnes pratiques de mise en œuvre", etc.

Donc, d'un point de vue "économique", y a-t-il un avantage à apprendre un nouveau langage de programmation? Si le langage est appris d'une manière rapide et sale, il sera probablement également utilisé pour un prototypage/implémentation rapide et sale - mais je ne vois pas cela comme un investissement justifiable de temps/effort.

Alors, juste POURQUOI devrais-je (ou n'importe qui d'ailleurs) apprendre un nouveau langage de programmation autre que "c'est amusant alors essayons-le" - si l'investissement de temps ne vaut pas la peine à long terme?

99
PhD

De The Pragmatic Programmer, Astuce # 8 "Investissez régulièrement dans votre portefeuille de connaissances":

Apprenez au moins une nouvelle langue chaque année. Différentes langues résolvent les mêmes problèmes de différentes manières. En apprenant plusieurs approches différentes, vous pouvez contribuer à élargir votre réflexion et éviter de rester coincé dans une ornière. De plus, l'apprentissage de nombreuses langues est beaucoup plus facile maintenant, grâce à la richesse des logiciels disponibles gratuitement sur Internet

Il ne s'agit pas de la prochaine "nouvelle chose". Il s'agit de penser de différentes manières en dehors de vos schémas de pensée normaux.

Il y a un dicton, "Quand tu es un marteau, tout ressemble à un clou". Il existe peut-être une meilleure façon de résoudre un problème en utilisant une autre technologie. Si vous n'explorez pas, vous ne savez peut-être pas qu'il était disponible.

179
jmq

Pourquoi les gens grimpent le mont. Everest? Ou courir 100 Miles en 24 heures ? Pourquoi relevons-nous un défi? Parce que c'est là. Je ne vois rien de mal à "Ars gratia artis". Il arrive un moment où apprendre pour apprendre devient sa propre récompense. Mais si vous voulez des raisons plus puissantes d'apprendre une nouvelle langue, voici quelques-unes:

De nouvelles façons de résoudre les problèmes L'apprentissage d'une nouvelle langue, en prenant vraiment le temps de plonger, vous donne la chance de programmer à nouveau en tant que débutant. Cette nouvelle perspective peut vous enseigner des techniques qui pourraient s'appliquer à une ancienne langue. Pensez à l'influence Ruby on Rails eu sur ASP.NET MVC ou comment Java Hibernate a été porté sur C # (avec avec d'innombrables autres frameworks qui influencent le développement .NET.) L'exposition à différents langages peut vous apprendre de nouvelles façons de résoudre les problèmes.

Le bon outil pour le bon travail Toutes les langues que vous avez mentionnées sont des hybrides OO/procédurales (ou purement procédurales dans le cas de C). Essayez-vous à un ou deux langages fonctionnels. Essayez d'implémenter le factoriel à Erlang en utilisant la récursivité et regardez votre mâchoire frapper le sol à 20000! retourne en 5 secondes (pas de débordement de pile dans le site). Ensuite, examinez la puissance de la mise à l'échelle de votre application pour analyser les nombres et analyser les protocoles avec moins de code et en moins de temps qu'il n'en faudrait pour que deux instances d'une machine virtuelle Java parlent via RMI ou SOAP. L'apprentissage d'autres langages/cadres qui visent à résoudre des problèmes spécifiques vous donnera plus d'outils.

Rencontrez de nouvelles personnes/élargissez votre réseau Plonger dans une nouvelle langue vous expose à une nouvelle communauté. Rencontrer de nouvelles personnes est une bonne chose pour votre carrière et personnellement.

Nouvelles opportunités La connaissance d'une nouvelle langue ne peut qu'augmenter vos chances d'obtenir ce poste avec ce démarrage à chaud. "Mec, ce travail serait parfait si je connaissais Ruby." En outre, vous apprécierez peut-être suffisamment la langue pour décider de changer de chemin.

Restez au frais Travailler avec la même chose jour après jour devient fastidieux. L'utilisation d'une langue différente peut vous donner une pause dans le quotidien et vous permettre de vous rafraîchir le lendemain.

Parce que c'est là Apprenez une nouvelle langue parce que vous le souhaitez.

80
Michael Brown

Nous pensons avec des mots. Le langage que nous utilisons influence la façon dont nous le faisons. Il y a un cas intéressant à propos langue Pirahã - les gens qui parlent cette langue ne peuvent pas gérer comme quelque chose d'apparemment "simple" ou "intuitif" comme des nombres parce que la langue dans laquelle ils ont été élevés n'a pas de mots pour "spécifique" quantités "(pas même" un "et" plusieurs ").

Avec les langages de programmation, c'est pareil. Un nouveau langage de programmation peut "ouvrir" votre esprit à certains aspects de la programmation.

Compte tenu de votre formation actuelle en programmation, je vous recommande d'apprendre un langage fonctionnel, comme Erlang ou Scala. Enfin, Clojure est également un langage très solide.

Si vous voulez vous sentir un peu plus chez vous en premier, essayez un langage de script puissant comme Python ou Ruby.

37
egarcia

Non seulement vous voulez apprendre de nouvelles langues, vous voulez apprendre des langues différentes de celles que vous connaissez déjà. Si vous savez Java apprendre C # ne vous mettra pas vraiment au défi, ils sont assez similaires. Idéalement vous devez choisir un langage très différent de ce que vous connaissez. Si vous connaissez Java, JavaScript et Objective-C, vous voulez quelque chose de très différent

Tel que:

Ruby un amusant faiblement tapé OO Language

Prolog Un langage de programmation logique très différent

Erlang Concurrence et tolérance aux pannes très bien fait

Scheme Allez lire SICP et atteignez l'illumination

Haskell L'un des systèmes de type les plus puissants au monde s'il compile, il fonctionnera probablement, vous empêchera également de faire toutes sortes d'erreurs étranges et bien plus encore.

Ou choisissez simplement Seven Languages ​​in Seven weeks qui fera ce que le titre dit.

26
Zachary K

Votre question est tellement suggestive qu'elle me demande de poser la question suivante:

Si vous êtes programmeur de profession, pourquoi ne voudriez-vous pas apprendre quelque chose de nouveau à ajouter à votre expérience professionnelle?

Votre question me ressemble beaucoup à l'attitude d'un élève que j'avais autrefois. Un an ou deux avant l'an 2000, j'enseignais une classe Cobol (au choix), à la demande du directeur des services d'orientation de l'université où j'enseignais à l'époque. Il a eu tellement d'entreprises qui l'ont approché avec des opportunités d'emploi pour les programmeurs Cobol qu'il pensait que nous ne rendrions pas service à nos étudiants en ne leur donnant pas la possibilité d'apprendre la compétence et d'ajouter à leur ensemble de compétences.

J'ai eu un étudiant qui a pris la classe comme son dernière classe élective à obtenir son diplôme. Il travaillait également comme programmeur C à l'époque. Il a pris la classe Cobol parce qu'il n'avait pas d'autre choix et qu'il voulait le diplôme. Il est donc venu en classe avec une puce sur l'épaule.

Je connais déjà C, et je l'utilise professionnellement donc je ne sais pas pourquoi dans le monde que quelqu'un voudrait ou même aurait besoin d'apprendre le Cobol.

Je l'ai donc mis au défi d'écrire un programme pour lire les données d'un fichier qui avait un format spécifique pour chaque enregistrement d'entrée (c'est-à-dire combien de caractères chaque champ occupait sur une ligne, quel champ venait en premier, deuxième, troisième, etc. .)

Il devait écrire son programme en do, ce qu'il a fait, et il m'a montré son programme. En même temps, je lui ai montré ma version Cobol du programme.

Puis je lui ai lancé une balle courbe:

Supposons que l'utilisateur final récupère des données ailleurs. Ce sont les mêmes champs dans chaque enregistrement, mais l'ordre et le nombre de caractères par champ sont différents. Montrez-moi ce que vous devrez changer dans votre programme pour le faire fonctionner avec le nouveau format de données.

Il a pris une journée pour créer une nouvelle version du programme qui fonctionnait avec le nouveau format de données. Cela impliquait de changer au moins 20 ou 30 lignes de code et de modifier plusieurs fonctions et modules.

Ensuite, je lui ai montré les changements que je devais apporter à mon programme Cobol. J'ai modifié la clause d'image pour refléter le nouveau format de données.

Je ne suis pas sûr qu'il ait complètement compris la leçon de cet exercice, mais il a au moins arrêté de se plaindre pour le reste du semestre.

Donc - en réponse à votre question: vous devez apprendre de nouvelles langues parce que vous voulez APPRENDRE. Et si vous ne voulez pas apprendre - plus de pouvoir pour vous ... (Je ne suis tout simplement pas sûr de vous embaucher avec cette attitude)

15
Zeke Hansell

Il y a plusieurs raisons pour lesquelles l'apprentissage d'une nouvelle langue peut valoir un investissement en temps:

  1. Augmenter la taille de sa boîte à outils - l'apprentissage d'une nouvelle langue peut fournir des voies supplémentaires pour résoudre les problèmes techniques. La possibilité de nouveaux outils pourrait fournir un meilleur choix de langue/plate-forme pour résoudre certains problèmes que les outils/langues que l'on connaissait auparavant. Un exemple simpliste pourrait être celui d'un programmeur qui ne connaît que C. L'apprentissage d'un langage de script lui ouvre d'autres possibilités - en termes de déploiement, de configuration de l'environnement, etc.
  2. Accédez à une nouvelle plate-forme - un excellent exemple pourrait être l'objectif C - si l'on veut développer pour iOS, l'apprentissage de cette langue est presque obligatoire.
  3. Apprenez de nouveaux paradigmes - certaines langues pourraient avoir un meilleur accès à de nouveaux paradigmes. En utilisant C comme exemple, il peut être difficile de développer des services Web dans la norme ANSI C. Cependant, apprendre à développer en .NET, Java, PHP ou d'autres nouveaux langages peut accélérer le développement des services Web.

L'apprentissage de nouvelles langues peut offrir des avantages immédiats, comme vous l'avez déjà noté, dans des solutions "rapides et sales". Cependant, ces solutions immédiates pourraient conduire un programmeur à enquêter et à approfondir l'architecture associée au nouveau langage pour l'apprendre "correctement". On peut considérer ces exercices d'apprentissage rapide comme un investissement dans la recherche de savoir si une nouvelle langue vaut du temps de formation supplémentaire.

12
JW8

En un mot: commercialisation.

Vous ouvrez vos perspectives d'emploi lorsque vous pouvez montrer que vous avez la capacité de vous adapter et d'apprendre de nouvelles choses. Bien sûr, vous pouvez continuer à écrire des applications en utilisant la seule langue dans laquelle vous êtes devenu vraiment compétent, mais que se passe-t-il lorsque vous apprenez que la langue de votre choix préférée n'est plus pertinente pour l'industrie dans laquelle vous travaillez. Je me souviens en fait d'une époque où nous utilisions pour écrire nos propres services Web à partir de zéro en C ou C++, nous utilisons aujourd'hui des outils qui font tout le "webbiness" sous-jacent pour nous (Think Rails, etc ...).

Le fait est que vous vous retrouvez comme ces acteurs qui font une série télévisée et que vous ne pouvez pas facilement passer à autre chose, car ils sont toujours considérés comme leur personnage d'origine. "Qui diable veut que le capitaine Kirk soit Indiana Jones? !!". Il en va de même pour les programmeurs qui n'ont jamais utilisé qu'un seul produit. Bien sûr, vous le saurez comme personne d'autre, mais cela ne vous aidera pas lorsque vous êtes traité comme si vous étiez enfermé comme un Fortran qui ne peut pas passer au travail avec C #.

Si vous voulez pouvoir déplacer facilement des emplois et garder vos options ouvertes, vous devez élargir votre expérience. Travaillez sur de nombreux projets différents dans de nombreuses langues différentes, et de préférence sur au moins 2 plates-formes ou plus, et restez commercialisable pour être plus que ce que vous êtes aujourd'hui.

Bien sûr, il existe de nombreuses autres raisons d'apprendre une nouvelle langue, parfois même juste pour l'enfer. Cela ouvre votre esprit à d'autres possibilités. Ainsi, lorsque votre patron vient à vous et vous dit "pouvons-nous faire quelque chose", vous pouvez dire oui avec un choix d'outils à votre disposition.

11
S.Robins

À ce stade de votre carrière, vous devriez apprendre de nouvelles langues si vous pensez qu'elles feront de vous un meilleur programmeur.

La plupart de vos langages listés (Java/C/C++/Javascript/Objective-C) sont conventionnels OO/impératifs. Apprendre un autre langage OO/impératif ne vous apprendra probablement pas beaucoup plus sur ce type de programmation. À moins que vous n'ayez un intérêt particulier, il est inutile d'apprendre la saveur du mois sur les spécifications.

Je suis également enclin à être sceptique quant aux allégations d'augmentation de la productivité par ordre de grandeur. Cependant, il pourrait être utile de vérifier le langage occasionnel réputé à haute productivité, pour voir si vous l'aimez.

La meilleure raison d'apprendre une nouvelle langue est d'acquérir des compétences d'application générale. Pour cela, je recommanderais une plongée profonde dans un langage fonctionnel (Haskell, ou l'un des Lisps) d'une part, et le code d'assemblage et l'architecture des systèmes (x86 ou ARM) d'autre part.

La programmation fonctionnelle brisera votre cerveau et améliorera votre esprit, tandis que l'apprentissage de l'architecture de la machine améliorera vos capacités de débogage et d'optimisation, même si vous n'écrivez jamais une autre ligne d'assemblage.

8
comingstorm

Chacun de nous décide sur quoi nous voulons travailler alors ...

  1. vous l'apprenez parce que vous voulez
  2. vous l'apprenez parce que vous en avez besoin pour le travail que vous voulez

Si vous ne voulez pas apprendre PHP, personne ne vous fait et il y a une tonne de domaines où vous pouvez programmer sans même savoir orthographier PHP.

Beaucoup de gens regardent le marché du travail pour voir où se trouvent les zones chaudes et sauter sur ces technologies. Beaucoup de gens apprennent une langue et s'y tiennent et 20 ans plus tard, ils deviennent des ingénieurs de maintenance hérités. Et puis il y a beaucoup de gens qui se trouvent entre ces deux extrêmes.

En fin de compte, il s'agit de savoir où vous voulez être.

6
DXM

Je suis d'accord avec la plupart des réponses déjà publiées. Pour les ajouter, consultez les statistiques prises par l'enquête auprès des utilisateurs de 2011 sur les débordements de pile. Il y avait une très forte corrélation entre le nombre de langues connues et l'argent gagné. Ils ne sont peut-être pas directement liés les uns aux autres, mais c'est quelque chose à penser.

Les gens qui ont tendance à apprendre plus de langues ont tendance à gagner plus d'argent.

http://blog.stackoverflow.com/2012/02/survey-results/

5
hspain

Le meilleur argument que je connaisse est qu'il élargit votre point de vue sur le nombre de façons différentes de résoudre un problème ou d'exprimer une logique. Bien connaître Java et C++ vous donne une bonne vue à la fois sur les domaines natifs & VM, mais il y a beaucoup plus de "degrés de liberté" à explorer).

J'ai environ 15 ans d'expérience en C++, 5 en Java. Il y a beaucoup de langages que j'ai appris et laissés pour compte (PHP, Pascal, Assembly pour un tas de processeurs différents, entre autres) et je peux dire avec certitude que même ceux que je n'utilise plus ont laissé une marque significative sur la façon dont je pense à un problème . Aussi: même si vous voulez rester avec, disons, Java, pour un projet donné, vous devrez connaître l'alternative pour présenter de bons contre-arguments à ses partisans.

Pourtant, j'ai appris Python juste cette année, et j'ai été ravi de l'élégance de certaines choses. Tant et si bien que j'ai décidé de convertir une poignée de REST servlets que j'avais écrits, de Java à Python. Les avantages de la maintenabilité du code étaient assez importants. Bien sûr, cela a marqué ma façon de faire les choses, non seulement parce que je vais maintenant choisir Python pour certaines tâches, mais aussi parce que je peux adopter des principes de conception similaires lors du codage en C++ et Java.

Cela dit, je ne pense pas que vous devriez apprendre beaucoup de langues différentes tout le temps, juste pour le plaisir. Cela prend un temps considérable et les "logements" que vous devrez vous faire pour qu'ils coexistent avec les autres que vous connaissez déjà prennent également du temps et des efforts. Je ne décide d'apprendre une langue que lorsqu'elle a suffisamment de maturité, a une bonne base de développeurs et offre des résultats sensiblement différents des autres que je connais ou prévois d'apprendre. Lorsque j'ai décidé d'apprendre Python, par exemple, j'ai également envisagé Ruby et Perl, puis je les ai rejetés - du moins dans un avenir proche.

5
Fabio Ceconello

Les gens apprennent de nouvelles langues pour ...

  • élargissez leurs connaissances. Si vous en savez plus, vous vous sentez mieux et vous êtes plus confiant.
    Confiance = Code génial!
  • avoir une boîte à outils plus grande. Disons que vous devez créer une application. Si vous ne connaissez que Java, vous allez créer le programme en Java. Mais si vous connaissez Java, Python, Scheme et LISP, vous allez probablement choisir le meilleur outil pour le travail.
  • obtenir un emploi. Face it. Si vous connaissez plus de langues, vous avez plus d'opportunités d'emploi. C'est assez explicite.
  • devenez un meilleur programmeur polyvalent. Si vous connaissez la syntaxe de Perl, vous savez que cela peut devenir un peu fou. Lorsque vous écrivez de longs programmes en Perl, vous êtes essentiellement obligé de suivre les meilleures pratiques, ou vous ne serez pas un campeur heureux. Puisque vous connaissez les meilleures pratiques de Perl, cela pourrait vous aider à mieux écrire PHP (d'une manière ou d'une autre).

Comme vous pouvez le voir, il existe de nombreuses raisons d'apprendre une nouvelle langue. Mon conseil à vous (et ma seule citation originale que je trouve bonne):

Écrivez fréquemment du code; Écrivez bien le code; Écrire du code en Scheme, PHP, Java, Python, LISP, Perl, C, C++, C #, Visual Basic, Ruby ...

5
Dynamic

Alfred North Whitehead a écrit un grand essai intitulé " L'importance d'une bonne notation "

Il est intéressant de noter à quel point un symbole d'apparence modeste peut être important pour le développement de la science. Il peut représenter la présentation emphatique d'une idée, souvent une idée très subtile, et par son existence, il est facile d'exposer la relation de cette idée à tous les trains complexes d'idées dans lesquelles elle se produit.

Un langage de programmation est une forme de notation. Je peux coder OO en C; en fait, c'est ainsi que Stroustrup a commencé avec C++ - comme une série de macros de précompilateur C. Cependant, il est beaucoup plus facile et plus rapide d'écrire OO code en Java, C++ ou C # car ils contiennent des primitives de langage qui prennent en charge OO plus facilement.

Toutes les raisons pour lesquelles nous avons appris de nouvelles langues jusqu'à présent sont valables, mais je pense que la meilleure raison d'apprendre une nouvelle langue est qu'une nouvelle notation peut vous permettre de penser d'une nouvelle manière, ce qui peut vous aider à résoudre de nouveaux problèmes.

4
Onorio Catenacci

La plupart ou la totalité des réponses ci-dessus sont liées à la profession. Programmation. Je veux rappeler qu'avant d'être programmeurs, nous sommes des êtres humains.

Une bonne raison pour laquelle pas apprendre un nouveau langage de programmation, dans votre cas, est de vous reposer ou de faire autre chose que la programmation.

D'après mon expérience, en travaillant dans l'agriculture et en travaillant avec le bois, j'ai beaucoup pensé à la programmation - plus qu'à l'apprentissage d'un nouveau langage. Par exemple, pour être un bon programmeur, vous devez d'abord être un bon être humain. Si vous n'avez pas beaucoup d'expérience dans la vie, à part la programmation, votre idée de la programmation peut être totalement fausse - même si vous êtes un expert.

De nombreux concepts en programmation viennent directement de la vie quotidienne: simplicité, maintenable, pratique, utile, rapide - et parfois lent, modularité, etc; sont tous des concepts utilisés par un charpentier, par exemple.

Croyez-le ou non: personnellement, j'ai beaucoup appris sur les concepts de programmation, en prenant de longues vacances pour cueillir des oranges. Le concept principal que j'en ai appris était: la simplicité. En travaillant comme constructeur, j'ai appris un autre concept: construire la base aussi bien que possible - si vous voulez que les murs soient droits.

Enfin, la réponse à votre question pourrait être: prendre des vacances, rejoindre un cours de taekwondo ou prendre soin du jardin - alors votre question ne vous dérangera peut-être plus.

2
Shian