Si l'on veut apprendre un nouveau langage de programmation chaque année, quelle devrait être la liste? [fermé]

19

Dans le chapitre un de "The Pragmatic Programmer", le premier objectif d'apprentissage est:

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 élargir votre façon de penser et éviter que le getter ne soit frappé dans une ornière. [...]

Pour y parvenir au cours d'une carrière, la liste des langues risque de s'allonger (surtout si vous ne souhaitez pas "progresser" dans la gestion). De toute évidence, l'éducation d'un programmeur (ou quelque forme que ce soit) va vous permettre de démarrer avec un noyau de langages commercialement utiles (la liste habituelle des offres d'emploi: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). De plus, un programme d'apprentissage formel ou informel est susceptible d'avoir couvert des approches fonctionnelles (via quelque chose comme Haskell, LISP ou un langage dérivé du ML)

Mais une fois qu'un sous-ensemble raisonnable de cette liste est appris, quelle est la prochaine étape et pourquoi ?

Richard
la source
3
Dans cette réponse, j'énumère certains des paradigmes linguistiques qui pourraient être étudiés pour élargir vos capacités. Je commencerais par essayer d'apprendre tous ces paradigmes (plutôt que de me concentrer sur les langues), alors cochez toutes celles que votre langue actuelle utilise, puis choisissez une langue qui en a autant de différentes de celle à laquelle vous êtes habitué. Il ne sert à rien de commencer en C # puis en Java, essayez de vous diversifier davantage au départ. Une fois que vous avez couvert tous les types de base, vous pouvez choisir d'autres langues courantes.
Simon P Stevens,
@Simon: Pourquoi ne pas en faire une réponse ici?
Richard
1
Vous apprendrez beaucoup en passant de Java à C #, mais pas tant en sens inverse
Casebash
@Richard. Je ne pensais pas vraiment que cela justifiait une réponse complète, je vous renvoyais simplement à quelque chose de pertinent que j'avais écrit ailleurs.
Simon P Stevens
1
La plupart des gens qui apprennent une langue par an seront un "cric de tous les métiers, mais aucun maître" jusqu'à ce que vous vous concentriez sur quelques-uns pendant plusieurs années. Je crois, sur la base d'une longue expérience, que la notion de programmeur «full-stack» est fausse, sauf pour 1% à 5% des développeurs. La plupart des gens de back-end hard-core que je connais n'ont pas de grandes compétences front-end et vice-versa.
junky

Réponses:

19

Rendez-le intéressant et passez chaque année à écrire un interprète ou un compilateur pour votre propre langage de programmation qui remplit une niche pour laquelle vous n'avez jamais utilisé de langage de programmation. Chaque année, écrivez votre prochain compilateur / interprète en utilisant la langue que vous avez écrite l'année précédente.

alternative
la source
7
Puis-je s'il vous plaît avoir votre autographe? :-)
Christian Davén
1
+1 Réponse brillante, même si elle était probablement conçue de manière humoristique.
Joe D
1
@Joe D Pas d'une manière totalement humoristique. Si vous pouvez le faire, vous maîtrisez toutes les niches.
alternative
-1 pour ne pas le vouloir d'une manière totalement humoristique. (comme si nous n'avions pas assez de langues / implémentations semi-abandonnées qui
traînent
2
@ZJR Donc 99% humoristique, 1% non humoristique, c'est mauvais? Allons y. Aussi, pourquoi votez-vous contre une réponse basée sur un commentaire?
alternative
13

Vous devez maximiser la «pertinence marginale», c'est-à-dire toujours vous aventurer dans de nouveaux domaines dans lesquels vous n'êtes pas encore fort. Variez à la fois les langages de programmation et les concepts . Si vous ne connaissez aucun langage orienté objet, essayez Java et un framework à haute abstraction comme Hibernate. Ensuite, écrivez quelques trucs d'administration système dans un langage de script tel que Python ou Perl. Ensuite, acquérez quelques compétences de bas niveau en C ou C ++, en écrivant du code serveur multithread haute performance. Si vous ne connaissez pas la programmation fonctionnelle, essayez Haskell avec des problèmes de théorie des graphes tels que la résolution de Peg Solitaire , etc. comme sécurité de capacité objet ,Prolog ou VHDL .

Bon exercice d'ailleurs! Cela vous apprendra à penser latéralement et à envisager les problèmes en termes d'angoisse linguistique, au lieu de compter sur trop peu de techniques spécifiques à la plate-forme. Par exemple, une fois que vous maîtrisez les similitudes et les différences dans la répartition des méthodes virtuelles entre C ++ et Python, vous "l'obtiendrez" à peu près instantanément pour tout autre langage.

DomQ
la source
9

Un langage qui n'affecte pas votre façon de penser la programmation ne vaut pas la peine d'être connu. - Alan Perlis

Comme certaines des autres réponses l'ont abordé, si vous apprenez une nouvelle langue par an, pourquoi? est d'étendre vos capacités en tant que programmeur. Le comment? c'est en apprenant des langues avec des paradigmes distincts de ceux des langues que vous connaissez déjà, et en faisant le point sur les paradigmes que vous connaissez déjà détermine la langue à apprendre ensuite.

Quels sont ces paradigmes? L'ouvrage avancé Concepts, techniques et modèles de programmation informatique offre une excellente vue d'ensemble avec une carte graphique .

Ainsi, si vous ne connaissez que les langages impératifs de type C, alors l'apprentissage de Scheme / Lisp est extrêmement utile. Si vous connaissez déjà les langages impératifs et fonctionnels, alors l'apprentissage de Prolog sera utile, etc.

Un livre récent qui essaie d'enseigner plusieurs langues et paradigmes est Seven Languages ​​in Seven Weeks . Bien sûr, vous ne parlerez pas couramment chaque langue après une semaine d'étude, mais cela semble fournir une perspective multi-paradigme accessible et orientée vers le praticien.

Lorsque vous cherchez un autre paradigme, c'est vraiment un moment zen; passer de la programmation impérative à la programmation fonctionnelle m'a fait voir le monde de l'informatique sous un jour entièrement nouveau. Bon apprentissage!

limiste
la source
Et une langue affecte votre pensée non pas tant par ce qu'elle vous permet d'exprimer, mais plus par ce qu'elle vous oblige à exprimer.
Florian F
9

C - comme l'essentiel, "sous-tend tout", langage de programmation des systèmes

Lisp (Scheme) - le langage ur étrange mais incroyablement puissant que les grands pirates pensent définit cool

Smalltalk - parce que c'est ce que OO était censé être

Erlang (ou autre langue d'acteur) pour comprendre les acteurs

Haskell - pour comprendre les Monades

Javascript - car il est partout et essentiel pour l'écriture de scripts dans le navigateur

L'un de Python / Ruby / Perl (mais peu importe lequel) - vous savez donc à quoi ressemble un langage de script populaire, moderne et de haut niveau avec un bon support de bibliothèque

SQL - pour pouvoir parler aux bases de données relationnelles

Prolog - parce que vous devez encore vous faire exploser

interstar
la source
2
La raison pour laquelle j'ai appris Haskell, c'est parce que je voulais apprendre un langage fonctionnel (par opposition à tous les langages procéduraux que je connaissais auparavant), et Haskell me semblait être l'enfant de l'affiche pour les langages fonctionnels. La raison pour laquelle j'aime Haskell maintenant, c'est parce que c'est un langage de haut niveau, qu'il a un bon support de bibliothèque et qu'il est rapide (environ 50% aussi rapide que C, mais cela dépend de ce que vous faites). De plus, j'aime pouvoir écrire un tas de code et tout fonctionne la première ou la deuxième fois (après l'avoir compilé).
Joey Adams
Il est important que vous appreniez Perl, Python ou Ruby. Par exemple, Python a des compréhensions de liste, qui n'existent pas dans Ruby, et Ruby a des modules, qui n'existent pas dans Python. Vous pouvez dupliquer les résultats des deux choses dans l'une ou l'autre des langues, mais l'apprentissage de l'une ou l'autre influencera votre réflexion de manières très différentes.
philosodad
1
Prolog - parce que vous avez encore besoin de vous faire exploser l'esprit - Meilleur commentaire de tous les temps +1
Zachary K
1
Je pense que le principal avantage de l'apprentissage du haskell n'est pas nécessairement de maîtriser l'abstraction de la monade, mais plutôt d'apprendre les avantages d'un système de type VRAI fort et puissant. Si l'idée d'un "système de type statique" est quelque chose comme Java, alors haskell vous coupera le souffle.
sara
4
  • Go (nouveau langage de programmation de niveau système avec un bon support pour la concurrence et des concepts pas si traditionnels)
  • Lua (langage de script simple, expressif, paradigmes impérativement flexibles et équilibrés, programmation impérative, fonctionnelle et méta, permettant la POO)
  • D (C / C ++ bien fait)
  • Groovy (Expressivité et méta-programmation dans le monde Java)
  • Eiffel (Design By Contract et une approche différente de la POO)
  • Prolog (LE langage de programmation logique)
bigown
la source
1
Pourquoi quelqu'un devrait-il les apprendre? (Le pourquoi est le bit intéressant ici, il y a peu de langages de programmation vraiment uniques: chaque paradigme a été implémenté plus d'une fois.)
Richard
Intéressant de voir que vous pensez que D est C bien fait. Personnellement, lorsque j'utilise C, je l'utilise principalement pour des trucs de bas niveau où je ne veux pas du tout d'abstractions OOP.
Jonas
@Jonas: Nous avons encore besoin d'un langage simple bien fait, alors que ce langage ne vient pas D peut être utilisé correctement juste de manière impérative. Pour vous, D2 est plus fonctionnel, une fois terminé, ce sera peut-être la meilleure implémentation du paradigme dans un langage principalement impératif.
Maniero
bien fait est subjectif. Pour moi, Erlang est un langage très petit et simple bien fait. La partie manquante est un excellent framework GUI, et si vous faites des systèmes complexes, vous voudrez peut-être plus un langage typé statique.
Jonas
@ Jonas: Erlang est un bon langage mais ce n'est pas du C / C ++ bien fait, c'est une chose totalement différente.
Maniero
2

1) Prolog: c'est complètement différent de tous les langages impératifs que vous avez utilisés jusqu'à présent, et cela changera votre façon de penser les problèmes

2) Lisp: sans lui, vous pourriez aussi bien utiliser Vi

3) Erlang: Encore une fois, c'est complètement différent, aussi, cela semble assez à la mode.

4) Quelque chose de Turing Tarpit (par exemple Brainfuck), et probablement écrire un compilateur ou un interprète pour cela: je ne peux pas penser à une raison pour le faire, mais cela semble être une bonne idée.

Paul Butcher
la source
1
"sans cela, vous pourriez aussi bien utiliser Vi". Je suis surpris que personne ne l'ait compris :)
Gauthier
J'utilise vi! (Eh bien gvim)
Zachary K
1

Outre ceux que vous avez énumérés,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.

grokus
la source
1

Bien que je convienne qu'il est bon d'apprendre de nouvelles langues (et même impératif au cours d'une longue carrière), je pense qu'une par an, c'est trop au-delà des cinq à dix premières années. Ce que je préférerais voir c'est quelqu'un avec ce niveau d'expérience apprendre de nouvelles choses sur les langues qu'ils connaissent déjà. À un moment donné, vous avez besoin de connaissances approfondies et approfondies. Vous pouvez donc écrire une construction If en 12 langues, big whoop. Je préférerais voir quelqu'un qui se penche vraiment et devenir expert dans au moins une chose. Et puis les prochaines années deviennent un expert dans autre chose. Au cours d'une carrière de plus de 30 ans, je veux que quelqu'un ait une connaissance approfondie, pas seulement les bases de beaucoup de choses.

HLGEM
la source