(Pourquoi) Devrais-je apprendre un nouveau langage de programmation? [fermé]


97

Je maîtrise assez bien Java, C / C ++, JavaScript / jQuery et je suis plutôt bon en Objective-C. Je suis assez productif avec les langages et les frameworks correspondants aussi, et produit des systèmes de niveau entreprise (et aussi de petite taille) avec suffisamment de facilité tout en maintenant le code propre et maintenable (oui, je peux lire mon code après six mois :)

Sauf si mandaté par la plate-forme (iPhone, iPad, etc.) ou par le client / l'organisation d'implémentation, juste "pourquoi" devrais-je apprendre un nouveau langage de programmation? Juste pour le fun"? Et faire quoi avec ce plaisir si je ne veux rien faire qui en vaille la peine?

Beaucoup de mes pairs sont prêts à plonger pour apprendre la «prochaine nouveauté / langage» et il s’agit généralement de Python, Ruby ou PHP (en nommant quelques-uns parmi les plus populaires). Maintenant, juste connaître la langue en soi est un IMHO futile. Vous devez également connaître les frameworks, 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 la langue est apprise de manière rapide et sale, elle sera probablement également utilisée pour le prototypage / mise en œuvre rapide et sale - mais je ne vois pas CELA comme un investissement justifiable de temps / effort.

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


6
programmers.stackexchange.com/questions/118338/… Peut-être serez-vous intéressé par la réponse que j'ai donnée à gere.
deadalnix

3
Si vous pouvez voir un nouveau langage avec de nouveaux concepts et ne pas vouloir les comprendre, de nombreux endroits ne vous embaucheront pas (en fait, de nombreuses questions d'entrevue sont posées pour déterminer précisément ce genre de choses)
Bill K

3
Je vais demander pourquoi je ne devrais pas apprendre une nouvelle langue?
utilisateur

2
@ZacharyK même si le travail concernait un développeur java et que le candidat était superduper at java. On dirait que vous vous tirez une balle dans le pied.
NimChimpsky le

2
Il y a beaucoup de gars en Super Java. Je suis aussi intéressé par ce que vous saurez dans 6 mois que par ce que vous savez maintenant. (Bien sûr, il semble que je passe tout mon temps dans Erlang, CoffeeScript et PHP)
Zachary K

Réponses:


178

De The Pragmatic Programmer , Astuce # 8 « Investir régulièrement dans votre portefeuille du savoir »:

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, apprendre de nombreuses langues est beaucoup plus facile maintenant, grâce à la profusion de 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 qui dit: "Quand tu es un marteau, tout a l'air d'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 saurez peut-être pas qu'il était disponible.


Excellent point. C’est cette réflexion qui m’a amené à essayer RavenDB sur un projet, et j’ai beaucoup appris après des années d’immobilité dans SQL Server.
Bob Horn

52
Je pensais que c'était quand tout ce que tu as est un marteau, tout ressemble à ton pouce
Zachary K

2
Je suis complètement d'accord. J'ajouterais également qu'apprendre une autre langue vous aide à mieux comprendre certains aspects des langues que vous pensiez connaître auparavant. Cela aide également à distinguer ce qui est "réel" de la programmation des concepts / modèles / limitations fondamentaux, et de ce qui ne sont que des artefacts de votre jeu d'outils particulier. Par exemple, si toutes les langues que vous connaissez sont mal typées, il est possible que vous ne sachiez jamais que le typage fort existe, et ne vous demandez jamais pourquoi! Par conséquent, vos produits risquent d’être affectés en termes de performances ou de sécurité, même s’ils peuvent exceller dans les délais de commercialisation ;-).
JJC

3
The Pragmatic Programmer est l'un des meilleurs livres de programmation que j'ai jamais lu. Très bien!
Soner Gönül

Je suis vraiment d’accord sur le point "Il s’agit de penser de différentes manières en dehors de vos schémas de pensée normaux". Quand j'ai appris le python, j'ai découvert le nouveau monde d'une façon de penser.
Yoo Matsuo

80

Pourquoi les gens montent le mont. Everest? Ou courir 100 milles en 24 heures ? Pourquoi entreprenons-nous un défi? Parce que c'est là. Je ne vois rien de mal avec "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, en voici quelques unes:

Nouvelles manières de résoudre les problèmes Apprendre une nouvelle langue, prendre le temps de plonger, vous donne la possibilité de programmer à nouveau. Cette nouvelle perspective peut vous apprendre des techniques qui pourraient s’appliquer à une ancienne langue. Pensez à l'influence de Ruby on Rails sur ASP.NET MVC ou à la manière dont Java Hibernate a été porté en C # (avec d'innombrables autres frameworks qui influencent le développement .NET). L'exposition à différentes langues 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éduraux (ou purement procéduraux dans le cas de C). Tentez votre chance dans un langage fonctionnel ou deux. Essayez de mettre en œuvre factorielle dans Erlang en utilisant la récursivité et regardez votre mâchoire toucher le sol quand vous ferez 20000! retourne dans 5 secondes (pas de débordement de pile dans le site). Examinez ensuite la puissance de la mise à l'échelle de votre application pour traiter des nombres et analyser des protocoles avec moins de code et en moins de temps qu'il n'en faudrait pour obtenir deux instances d'une machine virtuelle parlant via RMI ou SOAP. L'apprentissage d'autres langages / cadres visant à 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. "Ce travail serait parfait si je connaissais Ruby." En outre, vous pourriez aimer suffisamment la langue pour décider de changer de chemin.

Gardez la fraîcheur Travailler avec la même chose jour après jour devient fastidieux. L'utilisation d'une langue différente peut vous permettre de vous séparer de la routine quotidienne et de vous rafraîchir au lendemain.

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


3
+1 Le javascript peut être fonctionnel, mais il semble que l'OP manque peut-être de quelques paradigmes dans leur boîte à outils. Et plus d'expérience avec les langages fonctionnels donnera une compréhension plus profonde avec leurs langages existants, par exemple avec les modèles C ++
jk.

+1 pour Keep it fresh, ça fait vraiment du bien de travailler sur quelque chose de différent
Mona

J'aimerais souligner que les optimisations d'appel final n'ont aucun rapport avec le fait qu'un langage soit fonctionnel (pur) ou non, les langages impératifs compilés pour s'exécuter sous le runtime .NET 64 bits bénéficient d'une optimisation d'appel gratuit gratuitement, par exemple. .
Blindy

1
LOL, oui, ce n'est pas ce qui fait d'Erlang un langage purement fonctionnel, mais c'est un changement total de perspective. Dans les langues impératives, nous sommes encouragés à éviter la récursivité pour tous, sauf les cas les plus triviaux, et la récursion des langues fonctionnelles est un mode de vie. La mise en correspondance de motifs, par opposition à if / else ou switch / case, est également très cool.
Michael Brown

2
Essayez de mettre en œuvre factorielle dans Erlang en utilisant la récursivité et regardez votre mâchoire toucher le sol quand vous ferez 20000! retourne dans 5 secondes (pas de débordement de pile dans le site). C'est l'un des arguments les plus solides pour apprendre un langage fonctionnel que j'ai jamais vu. Jamais pensé que cela pourrait être si efficace.
Olegs Jeremejevs

37

Nous pensons avec des mots. Le langage que nous utilisons influence notre façon de faire. Il existe un cas intéressant à propos de la langue Pirahã - des personnes qui parlent cette langue ne peuvent pas traiter comme quelque chose qui est apparemment "simple" ou "intuitif", car la langue dans laquelle elles ont été éduquées ne contient pas de mots pour "quantités spécifiques" (pas même "un " et beaucoup").

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 vos connaissances actuelles en programmation, je vous recommande d’apprendre un langage fonctionnel, comme Erlang ou Scala. Enfin, Clojure est aussi un langage très solide.

Si vous voulez d'abord vous sentir un peu plus chez vous, essayez un puissant langage de script tel que Python ou Ruby.


22
+1 "Un langage qui n'affecte pas votre vision de la programmation ne vaut pas la peine d'être connu." - Alan Perlis
Ruakh le

2
Je rejette la prémisse selon laquelle «nous pensons avec des mots», car elle nie la possibilité que quiconque (ou autre chose) sans mots puisse penser. Mais les mots sont extrêmement utiles pour étiqueter les concepts (et donc pour les distinguer). Nous pensons généralement plus haut avec beaucoup (d’implication) de mots parce que c’est efficace. Ce qui est une déclaration plus équivoque, mais je pense plus proche de la vérité. Bizarrement, je ne peux pas refuser l’utilisation de mots sans les utiliser…
Donal Fellows

@DonalFellows: Je pense que nous avons des "processus mentaux" qui ne peuvent être exprimés par des mots. Mais je n’appelle pas ces "pensées", mais "sentiments", "réflexes", "intuitions" etc. Je pense qu’une pensée appropriée doit pouvoir être exprimée en termes de langage. Donc, pour moi, quelque chose qui n'a pas de langage peut vivre, traiter, réagir, ressentir ... mais pas penser. Mais il s’agit d’une croyance basée sur l’intuition et non sur une preuve réelle. Et aussi un peu hors-sujet, vraiment :)
egarcia

Tout à fait d'accord, apprendre des langues simplement parce qu'elles sont le nouveau langage de programmation cool n'a aucun sens. Vous devriez vous en tenir à des thèmes très différents et essayez de ne pas en couvrir trop. Être bon dans quelque chose prendra beaucoup de temps (probablement plus de 10 ans), peu importe qu'il s'agisse d'un instrument de musique, de la cuisine ou de la programmation.
Mister Smith

2
@evilcandybag: En l'occurrence, je peux démontrer une source: sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/… (PDF).
Ruakh

26

Vous souhaitez non seulement apprendre de nouvelles langues, mais également des langues différentes de celles que vous connaissez déjà. Si vous connaissez Java, l'apprentissage de C # ne vous mettra pas vraiment au défi, ils sont assez similaires. Idéalement, vous devriez choisir une langue très différente de celle 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 langage faiblement typé OO

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

Erlang Concurrency et Fault Tolerance très bien fait

Scheme Allez lire SICP et atteindre l'illumination

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

Ou alors, prenez simplement Seven Languages ​​in Seven weeks qui fera ce que le titre dit.


2
+1! Un exercice que je suis en train de faire actuellement consiste à implémenter le même algorithme (sorte de fusion) dans différentes langues: cela me donne vraiment une idée du nombre de façons d’exprimer le même calcul. J'ai déjà les versions C, C ++, Pascal, Java, Scala et Haskell en cours d'exécution. Python, Ruby, Modula2, Scheme sont en route. Je trouve que vous pouvez apprendre beaucoup en regardant différents langages de programmation! Et en faisant une chose dans une langue, je peux avoir beaucoup d'idées sur la façon de la mettre en œuvre d'une meilleure façon dans une autre langue.
Giorgio

3
J'aime ça, sauf pour la façon dont vous décrivez Haskell. Vous pouvez toujours écrire un code incorrect qui compile. (La correction du type n'est pas la seule exigence de la correction globale.) La raison pour apprendre Haskell est que sa notation est très proche des mathématiques et qu'il repose sur un modèle d'évaluation paresseux. cela devrait ébranler la notion de la programmation chez la plupart des programmeurs.
Donal Fellows

Je pense que devrait donner à Prolog un essai. Quand je l'ai appris pour la première fois, je suis devenu étonné. Comment pouvez-vous faire les choses en écrivant seulement quelques caractères?
utilisateur

3
@DonalFellows dans mon expérience si vous obtenez les types exacts dans Haskell, le reste du programme a tendance à écrire lui-même.
tobyodavies

1
"Ruby est un amusant langage OO faiblement typé": Ruby est-il vraiment faiblement typé ou plutôt dynamiquement?
Giorgio

15

Votre question est tellement fondamentale que je suis contente de poser la question suivante:

Si vous êtes programmeur de profession, pourquoi dans le monde 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'ai eu par le passé. Un an ou deux avant l'an 2000, j'enseignais un cours de cobol (au choix) à la demande du directeur des services d'orientation professionnelle de l'université où j'enseignais à l'époque. Il avait tellement de sociétés qui l’approchaient 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’acquérir les compétences et d’ajouter à leurs compétences.

J'ai eu un étudiant qui a pris la classe comme dernière classe élective pour obtenir son diplôme . Il travaillait également en tant que programmeur C à cette époque. Il a suivi le cours de 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 son épaule.

Je connais déjà C et je l’utilise de manière professionnelle, je ne sais donc pas pourquoi dans le monde on 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 ayant un format spécifique pour chaque enregistrement d’entrée (c.-à-d. Combien de caractères chaque champ occupait une ligne, quel champ venait en premier, deuxième, troisième, etc. .)

Il devait écrire son programme en C, 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 lançai une balle courbe:

Supposons que l'utilisateur final récupère les données d'un autre endroit. Ce sont les mêmes champs dans chaque enregistrement, mais l'ordre et le nombre de caractères par champ sont différents. Montre-moi ce que tu devrais changer dans ton 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 modifier au moins 20 ou 30 lignes de code et de modifier plusieurs fonctions et modules.

Ensuite, je lui ai montré les modifications que je devais apporter à mon programme Cobol. J'ai modifié la clause picture 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 au moins il a cessé de se plaindre pour le reste du semestre.

Donc, en réponse à votre question: vous devriez apprendre de nouvelles langues parce que vous voulez APPRENDRE. Et si vous ne voulez pas apprendre - plus de pouvoir pour vous ... (je ne suis pas sûr de vous engager avec cette attitude)


6
Bien que vos intentions fussent bonnes, si j'étais cet étudiant, je penserais simplement que la seule raison pour laquelle votre application a été facilement modifiée est que vous connaissiez le changement éventuel des exigences. Si le programme était écrit en C avec les mêmes connaissances, il devrait également y apporter des modifications minimes.
hspain

J'avais un collègue avec une attitude similaire: "C et PHP me rapportent de l'argent. Pourquoi devrais-je perdre mon temps à apprendre une autre langue?" Il n'y travaille plus.
Greyfade

3
toutes les exigences changent tôt ou tard! C'est gentil du point.
Zachary K

@hspain - En réalité, Cobol considère les spécifications d’E / S comme des éléments de premier ordre dans un programme, plutôt que comme un laisser-faire basé sur la manière dont vous écrivez et commandez votre I / O statement in C. Pour reprendre les propos de Zachary K, le fait est que les exigences changent. - Oui, vous pouvez structurer un programme en C de manière à ce qu'il soit moins fragile lorsque des éléments tels que les exigences d'E / S changent, mais cela implique de penser le programme d'une manière complètement différente de celle que vous avez normalement lors de l'écriture d'un programme en C.
Zeke Hansell

Je ne le savais pas vraiment à propos de Cobol. Un jour, je devrai peut-être aller jeter un coup d'œil
Zachary K

12

Apprendre une nouvelle langue peut valoir la peine d'investir dans le temps pour plusieurs raisons:

  1. Augmenter la taille de la boîte à outils - l'apprentissage d'une nouvelle langue peut fournir des pistes supplémentaires pour la résolution de problèmes techniques. La possibilité de nouveaux outils pourrait offrir un meilleur choix de langage / plate-forme pour résoudre certains problèmes que les outils / langages connus auparavant. Un exemple simpliste pourrait être celui d’un programmeur ne connaissant 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éder à une nouvelle plate-forme - un excellent exemple pourrait être l’objectif C - si l’on souhaite développer pour iOS, l’apprentissage de ce langage est presque obligatoire.
  3. Apprenez de nouveaux paradigmes - certaines langues pourraient avoir un meilleur accès aux nouveaux paradigmes. En prenant C comme exemple, il pourrait ê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 pourrait 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à indiqué, dans les solutions «rapides et sales». Cependant, ces solutions immédiates pourraient amener un programmeur à explorer 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 d'une nouvelle langue qui mérite un temps de formation supplémentaire.


11

En un mot: négociabilité .

Vous ouvrez vos perspectives d'emploi lorsque vous pouvez dé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 très compétent, mais que se passe-t-il lorsque vous apprenez que votre langue de prédilection devient inutile pour le secteur dans lequel vous avez travaillé? 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 alors pas passer facilement à autre chose, car ils sont toujours considérés comme leur personnage d'origine. "Qui sur Terre veut que le capitaine Kirk soit Indiana Jones? !!". La même chose avec 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 si vous êtes traité comme si vous étiez classé dans une boîte comme un Fortran qui ne peut pas continuer à travailler 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 et, de préférence, sur au moins deux plates-formes et restez commercialisable au-delà de ce que vous êtes aujourd'hui.

Bien sûr, il existe de nombreuses autres raisons d’apprendre une nouvelle langue, parfois même pour le plaisir de le faire. Cela ouvre votre esprit à d’autres possibilités. Ainsi, lorsque votre supérieur hiérarchique vous dit «pouvons-nous faire quelque chose», vous pouvez dire oui avec un choix d’outils à votre disposition.


8

À 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 des langages listés (Java / C / C ++ / Javascript / Objective-C) sont conventionnels / impératifs. Apprendre encore un autre langage OO / impératif ne vous en apprendra probablement pas beaucoup plus sur ce type de programmation. À moins que vous n'ayez un intérêt particulier, il est inutile de connaître la saveur du mois selon les spécifications.

Je suis également enclin à me montrer sceptique quant aux revendications d'augmentation de la productivité par ordre de grandeur. Cependant, il peut être intéressant de consulter le langage réputé, à haute productivité, pour voir s'il vous plait.

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 approfondie dans un langage fonctionnel (Haskell ou l'un des Lisps) d'une part et d'autre part dans le code d'assemblage et l'architecture de systèmes (x86 ou ARM).

La programmation fonctionnelle va briser votre cerveau et améliorer 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.


6

Chacun de nous décide de ce sur quoi on veut travailler alors ...

  1. tu l'apprends parce que tu veux
  2. tu l'apprends parce que tu en as besoin pour le travail que tu veux

Si vous ne voulez pas apprendre PHP, personne ne vous le fera et il y a une multitude de domaines dans lesquels vous pouvez programmer sans même savoir épeler PHP.

Beaucoup de gens se tournent vers le marché du travail pour identifier les zones chaudes et utilisent ces technologies. Beaucoup de gens apprennent une langue et s'y tiennent et, 20 ans plus tard, ils deviennent des ingénieurs en maintenance. Et puis vous avez beaucoup de gens qui se situent n'importe où entre ces deux extrêmes.

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


Dans votre description, cela semble un peu trop noir et blanc. Les "technologies de pointe" et les anciens ingénieurs de maintenance sont les deux extrêmes, à mon humble avis, la plupart d’entre nous étant assis entre les deux. En outre, certains «escrocs technologiques» sont trop fous des dernières nouveautés pour apprendre réellement une technologie (ce qui prendrait plus de temps que ce qu’ils sont disposés à investir dans une technologie unique), de sorte qu’ils ne pourront jamais proposer de solutions solides à long terme. aux problèmes.
Péter Török le

1
@ PéterTörök: Edité ma réponse. Je montrais l'échelle, mais j'étais trop paresseux pour tout épeler. Vous avez raison, c'est un spectre continu.
DXM

5

Le meilleur argument que je connaisse est que cela élargit votre perspective sur le nombre de façons différentes qu'un problème peut être résolu ou une certaine logique peut être exprimée. Bien connaître Java et C ++ vous donne une bonne vision des domaines natif et virtuel, mais il reste beaucoup plus de "degrés de liberté" à explorer.

J'ai environ 15 ans d'expérience en C ++, 5 en Java. J'ai appris et laissé de nombreux langages (PHP, Pascal, assemblage de plusieurs processeurs, entre autres) et je peux affirmer avec certitude que même ceux que je n'utilise plus ont laissé une marque significative sur ma façon de penser un problème . De plus, même si vous souhaitez vous en tenir à Java, par exemple, pour un projet donné, vous devrez connaître l'alternative permettant de présenter de bons contre-arguments à ses promoteurs.

Malgré tout, j’ai appris le python cette année et j’étais ravi de l’élégance avec laquelle certaines choses peuvent être faites. Tellement que j'ai décidé de convertir une poignée de servlets REST que j'avais écrits, de Java à Python. Les avantages en termes de maintenabilité du code étaient assez importants. Bien sûr, cela a également 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 en Java.

Cela dit, je ne pense pas que vous devriez apprendre beaucoup de langues différentes tout le temps, juste pour le plaisir de le faire. Cela prend un temps considérable, et les "logements" que vous devrez garder à l'esprit 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 si elle a suffisamment de maturité, une bonne base de développeurs et des résultats très différents de ceux que je connais ou que je prévois d'apprendre. Lorsque j'ai décidé d'apprendre le python, par exemple, j'ai également envisagé Ruby et Perl, puis les ai abandonnés, du moins dans un proche avenir.


5

Les gens apprennent de nouvelles langues pour ...

  • élargir leurs connaissances. Si vous en savez plus, vous vous sentirez mieux et plus confiant.
    Confiance = Code génial!
  • avoir une plus grande boîte à outils. Disons que vous devez faire 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, il est probable que vous choisirez le meilleur outil pour ce travail.
  • trouver un travail. Fais-le face. Si vous connaissez plus de langues, vous avez plus de possibilités d'emploi. C'est assez explicite.
  • devenir un meilleur programmeur complet. 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, sinon vous ne serez pas un bon campeur. Puisque vous connaissez les meilleures pratiques Perl, cela pourrait vous aider à écrire un meilleur code PHP (d'une manière ou d'une autre).

Comme vous pouvez le constater, il existe de nombreuses raisons d’apprendre une nouvelle langue. Mon conseil à vous (et ma seule citation originale que je pense être bonne):

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


1
@Nupul: Ou du moins, je pense que la citation va comme ça ...
Dynamic

5

Je suis d'accord avec la plupart des réponses déjà affichées. Pour les ajouter, consultez les statistiques relevées dans l’enquête auprès des utilisateurs du débordement de pile de 2011. 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 une chose à laquelle réfléchir.

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

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


4

Alfred North Whitehead a écrit un excellent essai intitulé " L'importance de la bonne notation "

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

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

Jusqu'à présent, toutes les raisons d'apprendre de nouvelles langues 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 manière nouvelle qui peut vous aider à résoudre de nouveaux problèmes.


2

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

Une bonne raison de ne pas apprendre un nouveau langage de programmation, dans votre cas, est de vous reposer ou de faire autre chose en dehors de la programmation.

De par mon expérience, travaillant dans l'agriculture et le bois, j'ai beaucoup pensé à la programmation - plus qu'à l'apprentissage d'une nouvelle langue. C'est-à-dire que 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 de programmation proviennent directement de la vie quotidienne: simplicité, maintenabilité, pratique, utilité, rapidité et parfois lente , modularité, etc. sont tous des concepts utilisés par un menuisier, par exemple.

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

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


Bien que je puisse être d’accord avec vous, j’ajouterais qu'après avoir eu toutes ces bonnes idées sur la programmation tout en effectuant d’autres activités, je souhaiterais apprendre un langage de programmation dans lequel ces idées sont mises en œuvre. Donc, les deux aspects de l'OMI (prendre une pause dans la programmation et apprendre de nouveaux langages de programmation) ne s'excluent pas (ne devraient pas).
Giorgio

Il est vrai que prendre une pause dans la programmation et apprendre de nouveaux langages de programmation ne s’excluent pas (ne s’excluent pas). Pourtant, dans le monde très rapide dans lequel nous vivons, il est important de se rappeler que le repos - peut être plus productif que le mouvement. Ce peut être une pause-café - ou même une pause d'un an.
Shian

-2

L’apprentissage d’un nouveau langage de programmation est, en gros, l’inverse du nombre de langages de programmation que vous connaissez déjà.

En effet, il existe un nombre fini de paradigmes et l’apprentissage d’une nouvelle langue vous en présentera au moins un ou deux, ce qui vous rendra plus expérimenté et plus capable en tant que programmeur. Certains peuvent bouleverser votre monde de programmation. Mais lorsque vous apprenez un nouveau langage qui présente des paradigmes que vous connaissez déjà, vous les connaissez déjà et vous y êtes habitués.


-3

Comme la plupart d’entre eux l’ont déjà écrit, j’ai de bonnes connaissances pratiques de C. C’est récemment que je travaillais sur un problème pour lequel je devais vérifier les résultats; c'était mathématique. Alors quel est le moyen le plus rapide d’obtenir la réponse m’a donné le goût de vérifier un langage de programmation plus rapide à apprendre.

Et j’ai découvert que bc , un langage de calculatrice de précision arbitraire, était pratiquement disponible sur toutes les plateformes Unix.

Je ne pensais pas à Python, Perl ou quoi que ce soit, mais j'ai découvert que cela réglait mes problèmes en un clin d'œil. Je l'ai vérifiée sur la factorielle (20 000) suggérée par l'un des amis et les résultats se sont déroulés en un claquement de doigt, sans aucun crash.

Il est important de connaître une nouvelle langue jusqu'à un certain point, ce qui facilitera votre travail / votre problème actuellement.

En définitive, si j'écris ceci dans mon CV, je suppose que tout le monde s'en fiche, mais de mon point de vue, cela résout mon problème avant que je ne l'attaque dans ma langue préférée, "C".

Et aussi s’il est nécessaire d’apprendre une nouvelle langue, vous aurez l’occasion de résoudre différents problèmes et de trouver de nombreuses solutions.


-8

Tout le monde peut créer une nouvelle langue. mais personne ne semble comprendre que "mieux" est rarement synonyme de "tellement mieux que le coût de l'adoption est réellement justifié". Le résultat final est des centaines de langues différentes, où il est impossible pour quiconque de comprendre tout le code source, et où les programmeurs doivent perdre environ un quart de leur temps sans aucune productivité en raison de différences de langage / framework / bibliothèque.

Dans un monde idéal, il y aurait un langage de programmation de bas niveau (par exemple C), un langage de programmation "sûr" de haut niveau (par exemple Java) et un langage de script. Il y aurait aussi un gros marteau pour avoir détruit la "Tour du langage de programmation de Babel" créée par des personnes qui ne comprennent pas les vertus de la normalisation et le coût du "désabonnement" et du recyclage continu de l'industrie informatique dans son ensemble.

D'un point de vue "macro-économique", apprendre un nouveau langage de programmation en tant que passe-temps est tout à fait normal, mais utiliser ce nouveau langage de programmation pour quelque chose que ce soit fait de vous un élément du problème.


4
Cela semble être un idéal peu pratique. Qui déciderait de ces langues standard et comment décidez-vous qu'une nouvelle langue vaut la peine d'être modifiée? Qu'en est-il du risque de rester coincé dans une langue de merde simplement parce que personne ne veut essayer quelque chose de nouveau? Imaginez si cela avait été fait il y a 10 ans: tout le monde peut utiliser le C ++ et Java (ou peut-être VB)!
Rétablir Monica

3
Votre concept de "monde idéal" ressemble étrangement à celui de mille neuf cent quatre-vingt-quatre . Dans votre Newspeak, on ne pouvait même pas penser à des idées révolutionnaires telles que "programmation fonctionnelle", "inférence de type", "polymorphisme de premier ordre" et "méthodes multiples", car il n'y aurait aucun moyen de les exprimer. Certes, Orwell ne semble pas avoir pensé à votre idée de sledgehammer, mais s'il l'avait fait, je suis sûr qu'il aurait trouvé sa place.
Ruakh

2
En plus des points ci-dessus, très peu de votre "réponse" est pertinente pour la question. Downvote.
user16764

3
Dans un monde idéal, il n'y aurait qu'une réponse à la question de Nupal. Avoir toutes ces réponses supplémentaires après la première de personnes qui ne comprennent pas les vertus de la normalisation ne fait que créer de la confusion. Il n'y a rien de mal à être en désaccord avec la réponse dans votre esprit, mais poster une réponse supplémentaire fait partie du problème.
benzado

1
Restreindre ces langues n’empêcherait aucun des problèmes que vous avez mentionnés. J'ai dû réécrire l'application plusieurs fois plus en raison de changements de framework que de changement de langue.
Fabio Ceconello
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.