Vaut-il la peine d'apprendre des langues expérimentales? [fermé]

25

Je suis un jeune programmeur qui souhaite travailler un jour sur le terrain en tant que programmeur. Je connais Java, VB.NET et C #. Je veux apprendre une nouvelle langue (en tant que programmeur, je sais qu'il est utile d'étendre ce que je sais - pour apprendre des langues qui vous font penser différemment). J'ai jeté un coup d'œil en ligne pour voir quelles langues étaient courantes. Tout le monde connaît le C et le C ++ (même les moldus qui connaissent si peu les ordinateurs en général), alors j'ai pensé que je devrais peut-être pousser pour le C.

C et C ++ sont bien mais ils sont vieux. Des choses comme Haskell et Forth (etc., etc., etc.) sont anciennes et ont perdu leur popularité. J'ai peur d'apprendre le C (ou même le C ++) pour cette même raison. Java est également assez ancien et lent car il est géré par la JVM et non compilé en code natif.

Je suis développeur Windows depuis un bon moment. J'ai récemment commencé à utiliser Java - mais uniquement parce qu'il était plus polyvalent et extensible à d'autres endroits. Le problème est qu'il ne ressemble pas à un langage très utilisable pour ces raisons:

  • Son but le plus utilisé est pour les applications Web et les applications de téléphone portable (en particulier Android)
  • En ce qui concerne les produits réels fabriqués avec, les seules choses qui me viennent à l'esprit sont Netbeans, Eclipse (hourra pour la création et l'IDE avec le langage auquel l'IDE est destiné - c'est comme créer une page Web pour écrire du HTML / CSS / Javascript) et Minecraft qui se trouve être amusant mais décalé et bipolaire en ce qui concerne les spécifications informatiques. soutien.
  • En dehors de cela, il est utilisé pour les serveurs, mais diable - je ne veux pas seulement créer / configurer des serveurs .

Cependant, les langages .NET sont agréables:

  • Les gens rient si je mentionne même VB.NET ou C # dans une conversation sérieuse.
  • Il n'est pas multiplateforme à moins que vous n'utilisiez MONO (qui est toujours en développement et a quelques améliorations à apporter).
  • Manque de bas niveau car, comme Java avec la JVM, il est géré / géré par le CLR.

Ma première pensée a été d'apprendre quelque chose comme C et de l'utiliser ensuite comme tremplin vers C ++ (juste pour m'assurer d'avoir une bonne compréhension / base), mais comme je l'ai dit plus tôt, il vieillit de plus en plus.


Ce que j'ai regardé

Fantom a l' air sympa. C'est comme un gentil intermédiaire entre mes deux langues préférées et me permet même de publier entre les deux de manière interchangeable, mais, contrairement à ce que je veux, il se compile vers le CLR ou la JVM (selon ce que vous publiez) au lieu d'être une compilation complète .

D a aussi l'air sympa. Il semble comme un langage très utilisable et demultIPLEsourcesil semble effectivement être mieux que C / C ++. Je sauterais bien dessus, mais je ne suis toujours pas sûr de son succès car il n'est évidemment pas très courant à ce stade.

Il y en a quelques autres qui avaient l'air plutôt sympa et qui se concentraient sur d'autres choses comme Opa avec le développement Web et Go by GOOGLE.


Ma question

Vaut-il la peine d'apprendre ces langues "expérimentales"? J'ai lu d'autres questions qui disent que si vous n'apprenez pas constamment les langues et que vous êtes ouvert à toutes les langues, vous n'êtes pas dans le bon état d'esprit pour la programmation. Je comprends cela et je ne comprends toujours pas tout à fait, mais en vérité, si une langue ne va pas devenir courante, devrais-je passer mon temps à apprendre autre chose? Je ne veux pas apprendre des langages de programmation anciens (ou qui deviendront bientôt anciens). Je sais que beaucoup de gens voient cela comme quelque chose d'important, * mais est-ce que l'un d'entre vous envisagerait réellement (en supposant que vous ne le saviez pas déjà) FORTRAN? Mon objectif est de rester à jour pour être sûr de réussir à l'avenir.


Avertissement

Oui, je suis un jeune programmeur, donc j'ai probablement fait beaucoup de déclarations naïves dans ma question. N'hésitez pas à me corriger sur TOUT! Je dois commencer à apprendre quelque part, donc je suis sûr qu'une grande partie de mes connaissances est assez sommaire pour avoir causé des déclarations incorrectes ou des défauts dans ma pensée. Veuillez laisser tout sentiment que vous avez dans les commentaires.


Les resultats...

Je suis vraiment étonné par les réponses incroyables, la plupart d'entre elles soulignant si bien mes malentendus et mes erreurs de jugement. J'ai beaucoup appris de cela et je suis impatient d'utiliser tout ce que j'ai appris! Je vais probablement commencer à apprendre Haskell ensuite (la langue pas si ancienne, bien que plus de 20 ans - hahaha ) et ensuite commencer à regarder d'autres options autour de moi.

Merci

Freesnöw
la source
10
"apprenez tous les cinq de Python, C / C ++, Java, Perl et LISP" (Eric Raymond, Comment devenir un pirate -> Compétences de base en piratage -> 1. Apprenez à programmer. )
gnat
7
Notez que le simple fait d'être "vieux" ne signifie pas automatiquement "mauvais" par défaut. La programmation la plus fantastique à ce jour a été réalisée sur le C64 il y a 30 ans.
8
FWIW presque tous les langages ont des utilisations - si quelqu'un se moque de vous pour utiliser presque n'importe quel langage (Java est lent, .Net est pour les chiennes M $, Haskell est impraticable, C ++ est trop vieux, etc.) rire en retour et leur parler de l'utilisation le bon outil pour le travail;)
Martin
6
D'où avez-vous obtenu "Haskell et ... ont perdu leur popularité"?
leftaroundabout
13
Pour un jeune programmeur, vous avez trop d'hypothèses. Débarrassez-vous d'eux, ils obscurcissent votre esprit.
Matthieu M.

Réponses:

29

Le fait d'apprendre des langues radicalement différentes ne consiste pas à apprendre les langues, c'est à se familiariser avec différentes approches des problèmes. Des outils pour la boîte à outils pour ainsi dire.

Une chose à noter est que Haskell n'est pas particulièrement vieux et c'est en fait un très bon candidat pour quelqu'un qui ne connaît que les langues traditionnelles. Même une langue très ancienne comme Lisp est très utile à apprendre en raison de son influence sur les choses.

De plus, Java et .Net ne sont pas interprétés et je m'attends à ce que vous émettiez des hypothèses incorrectes sur la base de ce mauvais étiquetage.

Telastyn
la source
Woops, désolé pour le problème interprété. J'y mélangeais deux déclarations oxymoroniques différentes. Je l'ai corrigé dans la question elle-même.
Freesnöw
19
Eh bien, Haskell est plus ancien que Java, par exemple. Mais, oui, cela ne signifie pas qu'il est dépassé. En fait, son système de type a encore environ 2 décennies d'avance sur Java.
Jörg W Mittag
5
@ JörgWMittag: Je pense que cela en dit plus sur Java que sur Haskell.
Tikhon Jelvis
1
Je programme uniquement en Haskell et Java ... mais pour être honnête, aucun langage traditionnel n'a un système de type aussi proche que Haskell. (Et je dois dire, OP ..._ beaucoup_ plus de choses que ce que vous mentionnez tourne sur Java.)
Louis Wasserman
1
Haskell a maintenant plus de 20 ans, et le Haskell standard est tout aussi vieux que le C ++ standard (ils sont tous les deux de 1998).
fredoverflow
23

Restez en forme: pratiquez régulièrement

La pratique rend parfait.

Plus vous écrivez de code ET lisez , plus vous vous rapprochez de l'illumination / maîtrise en tant que programmeur / développeur / ingénieur logiciel / gourou / ninja / artisan / pirate / mot à la mode de choix. Non seulement en codant et en lisant plus, mais en essayant également nos nouvelles façons d'écrire du code, plus vous restez ouvert d'esprit (espérons-le).

Lecture recommandée:

En savoir plus sur les nouveaux paradigmes et fonctionnalités linguistiques

Peut-être que vous ne pourrez pas traduire ce que vous utilisez dans le tout nouveau Super-Language-X vers votre Enterprise-Language-Y, mais peut-être serez-vous en mesure de reconnaître quand cela aurait pu convenir. Peut - être que vous serez en mesure de savoir quand intégrer une autre technologie ou une pile dans votre projet pour adapter à un usage particulier. Ou peut-être que vous saurez comment utiliser les fonctionnalités de la langue Y pour émuler la fonctionnalité intéressante de la langue X, et refactoriser votre code pour en bénéficier (et potentiellement éclairer d'autres collègues en cours de route).

Par exemple, vous auriez pu découvrir des principes de FP intéressants et vouloir les adapter à Java, qui n'est sans doute pas FP de par sa conception .

Lecture recommandée:

Soyez un valet de tous les métiers ... maître de certains?

Vous ne savez pas quelle langue deviendra la force principale lorsqu'elle en sera à ce stade «expérimental», vous ne devriez donc pas trop vous soucier de parier sur l'un d'eux. Il y a de fortes chances que d'autres personnes fassent le même pari et seront intriguées quand elles les verront apparaître sur votre CV. Ajoutez un outil à votre ceinture. Dans notre cas, il n'y a pas beaucoup de problème avec le poids final.

Bien sûr, vous ne pouvez pas devenir un maître de tous les métiers. Mais vous pourriez en être le maître et assez bon pour le reste. Vous apprenez un métier et le nôtre a de multiples facettes. Faire des exercices réguliers, assister à des ateliers, saisir un livre, écrire un nouveau projet pour animaux de compagnie et d'autres choses similaires sont notre façon de suivre le rythme toujours croissant des changements dans notre domaine.

Lecture recommandée:

Restez adaptable

Si vous n'apprenez pas à vous adapter, il est difficile de le faire quand vous en avez besoin. En apprenant constamment de nouvelles choses, vous vous améliorez de mieux en mieux à chaque fois que vous choisissez de nouvelles choses (tant que vous ne vous limitez pas à des défis très similaires).

C'est comme la chanson "Stay Young" d' Oasis: Restez jeune et invincible .

Si vous pouvez vous adapter, vous pouvez survivre.

Lecture recommandée:

Rester visible: comprendre le radar de l'agence de recrutement

Ils utilisent des mots clés et des technologies comme cases à cocher. Nous les utilisons comme pots de miel pour les recruteurs insensés.

Cela fonctionne dans les deux sens. Tant que vous connaissez vraiment vos affaires, il est bon d'avoir beaucoup de choses sur votre CV. Il montre votre adaptabilité et l'étendue de vos connaissances. De plus, si vous maîtrisez vraiment quelques-uns de ces derniers et êtes décent dans quelques autres, cela vous permet de moduler différentes versions de votre CV pour différents postes et emplois.


Autres sujets SE utiles

haylem
la source
Si vous allez lire Beating the Average de Paul Graham (ou tout ce qu'il écrit sur le sujet de la programmation, d'ailleurs), prenez-le avec un grain de sel. Beaucoup de choses qu'il a à dire sur la pratique de la programmation ont 50% raison et 50% dangereusement tort.
Mason Wheeler
@MasonWheeler: C'est controversé, comme beaucoup de choses que vous pouvez trouver là-bas auprès de "géants" de l'industrie connus, auto-acclamés ou non. Beaucoup de gens désapprouveraient également les écrits de Zed Shaw, comme d'autres le feraient de Norvig. Tout doit être abordé avec un esprit critique: je le prends pour acquis et je suppose (l'espoir) que les gens de ce niveau le font aussi. De nombreux auteurs présenteront des sujets à la lumière d'une situation spécifique, ne convenant pas à tout le monde. En fait, vous voyez cela ici tous les jours également dans les réponses, mais par la force "populaire", ils seront vénérés comme les "meilleures" réponses. Pourtant, c'est informatif.
haylem
8

Afin d'étendre la réponse de Telastyn, il s'agit en effet d'une exposition à différents paradigmes de programmation . Par exemple, il ne s'agit pas vraiment d'apprendre la programmation logique, mais pour:

  • apprendre à apprendre (pratiquer l'apprentissage de nouvelles compétences)
  • entraînez votre cerveau à penser de nouvelles façons
  • peut-être acquérir des connaissances moins populaires (ou même ésotériques) que peu de gens ont et pourraient être utiles
    • ou du moins les impressionner par vos connaissances techniques :)
  • et bien sûr, il fournit des informations techniques précieuses. Pourquoi C # est-il plus populaire que D? Le C ++ peut-il faire tout ce que D peut faire? D peut-il faire plus, ou est-ce plus comme du sucre syntaxique?

http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

Une autre bonne raison d'apprendre brainf * ck est de comprendre à quel point un langage de programmation complet de Turing peut être basique. Un argument commun lorsque les programmeurs comparent les langages est «eh bien, ils sont tous complets de Turing», ce qui signifie que tout ce que vous pouvez faire dans une langue, vous pouvez le faire dans une autre. Une fois que vous aurez appris brainf * ck, vous comprendrez à quel point il peut être difficile d'utiliser un langage complet de Turing et comment cet argument ne tient pas la route.

http://norvig.com/21-days.html (Peter Norvig)

Apprenez au moins une demi-douzaine de langages de programmation. Inclure un langage qui prend en charge les abstractions de classe (comme Java ou C ++), un qui prend en charge l'abstraction fonctionnelle (comme Lisp ou ML), un qui prend en charge l'abstraction syntaxique (comme Lisp), un qui prend en charge les spécifications déclaratives (comme les modèles Prolog ou C ++), un qui prend en charge les coroutines (comme Icon ou Scheme), et une qui prend en charge le parallélisme (comme Sisal).

Astyanax
la source
7

Ma première pensée a été d'apprendre quelque chose comme C et de l'utiliser ensuite comme tremplin vers C ++ (juste pour m'assurer d'avoir une bonne compréhension / base), mais comme je l'ai dit plus tôt, il vieillit de plus en plus.

Eh bien, c'est un tas géant de sophisme. Les gens qui connaissent le C ont plus de mal à apprendre le C ++, car à peu près tout ce qu'ils pensent savoir sur la façon d'utiliser le langage est une énorme pile de torts. Il n'y a pratiquement pas de C idiomatique qui soit même à distance un bon C ++. Il vaut mieux simplement apprendre le C ++ à partir de zéro. Des gens comme moi qui donnent de leur temps pour aider d'autres personnes à apprendre le C ++ passent une grande partie de ce temps à essayer d'apprendre aux gens à abandonner leurs habitudes en C.

Quant à la popularité, bien, C ++ est connaît un peu réémergence récemment. Les gens ont remarqué qu'en réalité, la performance fait la matière, beaucoup, et vous ne pouvez pas vous en sortir avec courir tous les composants comme réussi un, et moderne C ++ ( en particulier avec C ++ 11) est absolument rien comme les ordures C ils ont pensé qu'il était , et ce n'est vraiment pas si mal du tout. Il ne vieillit pas vraiment. Ça devient plus récent. La nouvelle norme est une vaste mise à niveau - et il n'y a pas de langues de remplacement appropriées, actuelles ou en préparation, pour de nombreux domaines dans lesquels C ++ est utilisé actuellement. Cela est notamment dû au fait qu'il n'existe aucun langage avec une interopérabilité C ++ décente (même C ++ lui-même), ce qui rend difficile la migration à partir des bases de code C ++ existantes.

Les gens rient si je mentionne même VB.NET ou C # dans une conversation sérieuse.

Obtenez de nouvelles personnes. AFAIK, VB.NET n'existe pas vraiment pour une raison quelconque, sauf pour aider à migrer loin de VB6 et n'est pas vraiment un objectif digne de ce nom, mais C # est un vrai langage. C'est un peu comme Java, sauf qu'ils ont ensuite ajouté des fonctionnalités de langage réelles et de belles bibliothèques. C # est un langage très populaire et bien pris en charge avec de très bons outils en VS, qui ne craint pas si mal, et c'est une chose solide, sinon exceptionnelle, à apprendre.

Il n'est pas multiplateforme à moins que vous n'utilisiez MONO (qui est toujours en développement et a quelques améliorations à apporter).

MONO est assez stable. De plus, au final, 90% des utilisateurs de postes de travail (ou était-ce 80%?) Exécutent Windows en ce moment. Si vous prévoyez de développer une application de bureau, la question est de savoir si les utilisateurs non Windows valent le temps de prendre en charge, même si vous utilisez un langage multiplateforme.

En fin de compte, vous pourriez obtenir beaucoup de choses en apprenant un langage comme C ++ ou Haskell, qui se concentre sur une technologie de compilateur solide plutôt que sur un temps d'exécution massif.

Ne choisissez pas PHP. La seule chose que vous pouvez apprendre de cela est de ne pas créer une langue.

DeadMG
la source
1
Un pourcentage important des ajouts récents à la norme C ++ n'existe que - comme un pourcentage important d'additions dans le passé - pour corriger les failles C ++ existantes. Les références Rvalue, par exemple, ajoutent un tas de complexité supplémentaire pour contourner un tas de problèmes de performances et de complexité liés aux constructeurs de copie, qui n'existent que parce que C ++ permet aux objets d'être utilisés comme types de valeur, ce qui est 100% complètement faux et il y a un bonne raison pour laquelle aucune autre langue OO ne fait cela.
Mason Wheeler
@MasonWheeler Au moins C #, D et Eiffel autorisent les objets comme types de valeur. Et RAII est tellement agréable pour la programmation de systèmes!
fredoverflow
@MasonWheeler: les références Rvalue permettent également une transmission parfaite et des types de déplacement uniquement. La performance n'était qu'une des trois principales causes de leur introduction. Les objets de type valeur sont très bien. De plus, bien sûr, vous pouvez écrire vos propres objets de type référence en C ++ à votre guise.
DeadMG
De plus, c'est drôle de voir comment, malgré tous ces problèmes de performances, C ++ était toujours le langage le plus rapide.
DeadMG
1
@FredOverflow: en C #, tous les objets sont des types de référence. Les structures peuvent être des types de valeur, mais les objets ne le peuvent pas, et c'est pour une très bonne raison: si les objets sont utilisés comme types de valeur, vous jetez une énorme clé à singe dans l'héritage et le polymorphisme et finissez par avoir à utiliser toutes sortes de hacks laids comme les constructeurs de copie, où l'affectation (ou le passage) d'un objet descendant à une variable de type parent n'affecte pas réellement cet objet. Cela fout complètement la substitution Liskov, ce qui est tout l'intérêt d'utiliser la POO en premier lieu. C'est une idée horrible, et je suis contente qu'elle n'ait jamais fait son chemin.
Mason Wheeler
6

Quelques commentaires sur ce que vous avez dit ...

1) Chaque programmeur devrait apprendre le C, même s'il est ancien. C'est un excellent langage pour se rapprocher de la machine. Des conseils de Joel aux étudiants CS ...

Apprenez le C avant d'obtenir votre diplôme

Deuxième partie: C. Remarquez que je n'ai pas dit C ++. Bien que le C devienne de plus en plus rare, il reste la lingua franca des programmeurs qui travaillent. C'est le langage qu'ils utilisent pour communiquer entre eux et, plus important encore, il est beaucoup plus proche de la machine que les langages "modernes" que vous apprendrez à l'université comme ML, Java, Python, quelle que soit la jonque à la mode qu'ils enseignent à ces derniers. journées. Vous devez passer au moins un semestre à vous rapprocher de la machine ou vous ne pourrez jamais créer de code efficace dans des langages de niveau supérieur. Vous ne pourrez jamais travailler sur des compilateurs et des systèmes d'exploitation, qui sont parmi les meilleurs travaux de programmation. On ne vous fera jamais confiance pour créer des architectures pour des projets à grande échelle. Peu m'importe ce que vous savez sur les continuations et les fermetures et la gestion des exceptions: si vous ne pouvez pas expliquer pourquoi while (* s ++ = * t ++); copie une chaîne, ou si ce n'est pas la chose la plus naturelle au monde pour vous, eh bien, vous programmez en fonction de la superstition, en ce qui me concerne: un médecin qui ne connaît pas l'anatomie de base, passant des ordonnances basées sur ce que le vendeur de produits pharmaceutiques a dit fonctionnerait.

2) Les langues peuvent être bonnes pour l'apprentissage des mentalités, même si elles ne sont pas couramment utilisées. Apprenez Scheme (ou LISP) pour comprendre la programmation fonctionnelle, même si ce n'est pas à la mode. D' un autre poste sur ce forum .

Félicitations, il me semble que vous allez peut-être dans l'une des rares écoles qui tentent d'enseigner l'informatique. Le programme d'apprentissage en tant que première langue est (OMI) une très bonne chose. Non, ce n'est pas aussi commercial que beaucoup d'autres, mais c'est un excellent langage pour apprendre la véritable essence de l'informatique. - Jerry Coffin 20 octobre 2011 à 3:32

C, C ++ et Java sont des sous-produits industriels de l'informatique. Toutes les racines de Scheme se trouvent dans l'informatique. Les langues utilisées à des fins commerciales ont autant à voir avec l'informatique que McDonalds avec la cuisine. - JasonTrue 20 octobre 2011 à 5h30

Ces gars-là ont raison; vous confondez la programmation informatique avec l'informatique - comme l'a dit Dijkstra, c'est comme confondre la construction d'un télescope avec l'astronomie. Le programme est le meilleur langage qui soit pour l'apprentissage des concepts de base en informatique. Si vous vous attendez à ce que l'obtention d'un diplôme en informatique implique d'apprendre à écrire des applications métiers en Java, vous pouvez être inscrit au mauvais programme. - Eric Lippert 20 octobre 2011 à 7h40

Presque tous les développeurs que je connais ont appris le C / C ++ par eux-mêmes. Vous n'avez pas besoin d'université pour ça. - mouviciel 20 octobre 11 à 7:48

Pour la même raison que les cours de zoologie enseignent la biologie évolutive, l'anatomie et le comportement animal plutôt que la façon de nettoyer un éléphant - jk. 20 octobre 2011 à 7:58

Maintenant, malgré attaquer votre prémisse d'origine, je pense que vous devriez être félicité pour votre curiosité. Trop de gens deviennent obsolètes par manque de curiosité. Profiter de votre développement personnel est un bon signe que vous vous développerez bien. Les personnes qui apprennent le plus sont celles qui veulent continuer à demander comment les choses fonctionnent.

MathAttack
la source
1
"Presque tous les développeurs que je connais ont appris le C / C ++ par eux-mêmes. Vous n'avez pas besoin d'université pour cela.": Idem ici. À mon université, ils nous ont donné des devoirs en C, mais ne nous ont pas donné de cours en C. Ils s'attendaient juste à ce que nous, étudiants en informatique, allions chercher un livre et l'apprenions.
Giorgio
1
Devoir apprendre le C est tout à fait une torture. Mes condoléances.
DeadMG
2
En fait, apprendre le C était la partie facile, la véritable torture a commencé quand nous avons dû passer au C ++. ;-)
Giorgio
3

TOUTE langue que vous apprenez va changer au cours des 5 prochaines années. Il ne s'agit pas d'apprendre une langue qui, selon vous, pourrait durer un certain temps, mais plutôt d'apprendre COMMENT apprendre. La plus grande exposition à l'apprentissage de la langue et le processus d'apprentissage de cette langue vous aideront énormément à long terme!

La dernière entreprise pour laquelle je travaillais utilisait son propre langage interne. C'était similaire à Visual Basic mais pas le même. Juste pour le fait que je connaissais d'autres langues, j'ai pu apprendre leur langue beaucoup plus rapidement que les autres employés.

J'ai appris le japonais après avoir appris C ++, BASIC, Pascal, et je peux dire que l'apprentissage d'un langage informatique et d'une langue étrangère nécessite les mêmes compétences. Ces compétences peuvent être perdues ou affinées. Si vous avez le lecteur, continuez et apprenez de nouvelles langues!

(ps. en ce qui concerne l'apprentissage du FORTRAN ou de l'assemblage, je pense qu'il est utile de prendre au moins un semestre des anciennes langues. Cela vous fait penser à des choses que vous prenez pour acquis dans les nouvelles langues, des choses comme les drapeaux, l'allocation de mémoire et autres .)

BillyNair
la source
3

Vous feriez mieux d'apprendre autant de "vieilles" langues que possible, si jamais vous voulez être programmeur. Commencez par Lisp, comprenez bien Forth, portez une attention particulière à l'évolution de toutes les langues Wirth, à l'évolution de Fortran, à l'ascension et à la chute de Prolog, glissez-vous dans l'écosystème secret d'Ada, obtenez votre arme secrète en apprenant l'occam. Poursuivre le «courant dominant» est la chose la plus stupide qu'un aspirant programmeur puisse faire.

SK-logic
la source
+1: Je suis totalement d'accord. Beaucoup d'idées intéressantes que j'ai eues en expérimentant avec des langages moins courants comme Haskell, Scheme, Scala, SML, etc.
Giorgio
2

Je suis d'accord avec vous sur la partie exposition des choses. Bien que je connaisse Java, C, C ++, Javascript, Python, Ruby et un peu de .NET (principalement parce que je déteste tout M $ <- opinion personnelle), je dois dire que j'aime vraiment la programmation en D.

D a un ensemble de fonctionnalités vraiment sympa (la plupart d'entre elles sont implémentées en C ++ / Java (langages qui ont des abstractions de classe), etc.) mais la seule chose que j'aime le plus est les génériques et les délégués (facilite l'implémentation des rappels). Cela mis à part, vous obtenez une syntaxe beaucoup plus simple à gérer par rapport au C ++. D a un garbage collector vraiment efficace, bien que vous puissiez choisir de gérer la mémoire vous-même (en particulier lors de l'interface avec les modules C / C ++). Bien que D n'ait pas beaucoup de modules contribués par l'utilisateur qui ne devraient pas être une barrière à l'entrée. Vous pouvez facilement vous interfacer avec les bibliothèques C / C ++ existantes (qui sont pleanty), ce qui le rend redondant pour le besoin de modules.

D a sa propre bibliothèque standard (Phobos) qui répond à tous les problèmes de programmation courants. Il existe également une bibliothèque alternative ( Tango-D2 ) que vous pouvez utiliser avec Phobos ou seule. Si vous êtes un développeur Web et que vous avez besoin d'écrire un serveur basé sur des événements, Tango a une belle abstraction de sélecteur (tango.io.Selector pour seulement select (), poll (), epoll ()). Je l'ai trouvé plus performant que libev.

Shripad Krishna
la source
Non pas que je désapprouverais l'apprentissage du D, mais pour quelqu'un qui connaît déjà les langages typés statiquement, OO et procéduraux, de bas niveau, il vaut certainement mieux apprendre un langage qui met l'accent sur un paradigme différent ou qui est un peu plus proche du métal. Il n'y a pas beaucoup d'expérimentation sur D non plus.
leftaroundabout
1
D'accord. Je pensais que la question des PO était centrée sur le fait "expérimental" d'être quelque chose qui n'est pas encore stable / soutenant le soutien de l'entreprise / qui n'est pas courant. Et même si vous optez pour «expérimental» étant la mise en œuvre de différents paradigmes, je suppose qu'il n'y a que peu de paradigmes. Et la plupart des langages implémentent l'un ou l'autre. Ensuite, nous arrivons à quelle langue est meilleure / plus rapide / plus facile à utiliser / meilleure pour le travail à accomplir. Ces facteurs diffèrent d'un programmeur à l'autre.
Shripad Krishna
1

Les langages sont développés pour résoudre des problèmes dans une sorte de domaine (au moins au début). Si vous n'avez pas rencontré de problèmes que vos outils ne peuvent pas résoudre d'une manière qui vous convient, vous martelerez une planche de bois en espérant devenir charpentier. Essayez de comprendre le type de problèmes que les langues essaient de résoudre. La seule différence entre une langue "expérimentale" et une langue nouvelle / hip cool guy est l'argent qui la supporte, par exemple Go de google et Dart. S'ils ont été développés dans mon jardin, ils mourront probablement dans un forum et c'est tout. Ils ne survivent que s'ils sont capables d'expliquer les problèmes qu'ils essaient de résoudre. Ou l'inverse, comme Perl et C ++, qui sont bons pour absorber les moyens de résoudre les problèmes pour rester en vie. Et je pourrais suggérer d'apprendre Lua, c'est ' C'est un langage conçu pour être intégré dans des programmes, il est très rapide et léger, ce qui vous donnera des outils pour résoudre les gros ou petits problèmes que certains langages comme Java ne peuvent pas résoudre de manière simple. Prenant l'exemple du japonais, si vous apprenez simplement la syntaxe, la grammaire et les alphabets, en ignorant la culture, vous ne comprendrez jamais pourquoi c'est si compliqué et finirez par tout oublier. Cela ne résout rien pour vous.

alfa64
la source
1

L'apprentissage de plusieurs langues différentes vous donnera une vision plus large de la programmation. Mettre l'accent sur "différent" - par exemple, apprendre C # et Java ne vous apprendra pas beaucoup plus que d'apprendre un seul d'entre eux. Mais apprendre C # ou Java, et un langage fonctionnel (par exemple) le fera.

Cela dit, en tant que jeune programmeur, je pense qu'il serait beaucoup plus avantageux d'apprendre à connaître une langue de manière très solide, avant de rebondir en regardant différents types de langues. Votre question ne permet pas de savoir si vous connaissez bien Java, VB.NET et C #. Êtes-vous convaincu que si vous attaquiez un projet en utilisant l'une des langues ci-dessus, votre goulot d'étranglement serait le projet lui-même, pas votre connaissance de la langue? Si vous passiez plus de temps à vous demander "comment dois-je procéder dans la langue ?" que vous ne passeriez à penser au problème réel, alors vous aurez probablement besoin de vous concentrer davantage sur l'une de vos langues actuelles.

Et personnellement, je pense que vous devriez adopter une approche pragmatique pour décider laquelle. Java est utilisé pour les applications Android? Génial, si la création d'applications Android vous intéresse. Peu importe si ce n'est pas le cas. C # n'est pas un bon choix pour le développement non Windows? Mauvaise nouvelle si vous souhaitez développer pour Linux. Peu importe si vous ne l'êtes pas. Etc.

Et les langues "expérimentales" que vous avez mentionnées? De manière pragmatique, ils ne conviendront pas bien quand il s'agit de travailler avec d'autres personnes - vous trouverez probablement mille personnes qui connaissent C # ou Java pour tous ceux qui connaissent Fantom. Pour les projets personnels, ce n'est pas forcément un problème. Si votre objectif est d'augmenter votre employabilité, c'est le cas.

Carson63000
la source
1

On pourrait dire qu'apprendre à programmer dans une langue comme Postscript ou APL est sans doute une perte de temps, principalement parce que les chances que vous utilisiez ces connaissances approchent de zéro. Mais dans le même ordre d'idées, vous pourriez faire valoir que Ruby et Python sont une perte de temps si vous n'avez jamais l'intention de les utiliser pour quoi que ce soit.

Mais peu de gens diraient que l'apprentissage de Lisp est un gaspillage, même si vous êtes sur le point d'avoir à écrire Lisp en Postscript; mais apprendre Lisp vous apprend à penser différemment à votre problème (espérons-le), c'est pourquoi la plupart des programmeurs vous diront que cela vaut votre temps.

Pourtant, je n'ai jamais hésité à apprendre une nouvelle langue, car l'investissement en temps requis n'est vraiment qu'une heure ou quatre. Et les utilisations d'une langue comme Lua apparaissent dans les endroits les plus inhabituels , et vous ne les auriez jamais reconnus si vous n'aviez pas passé quelques heures à parcourir les exemples.

Lorsque vous voyez une nouvelle langue, lisez un peu son utilité. Si c'est un créneau que vos langues préférées ne couvrent pas trop bien, prenez un jour pour apprendre les bases. Il est certainement mieux de passer du temps que de regarder la saison 17 de The Bachelor, sinon vous risquez de perdre du temps. De cette façon, si vous en avez une utilisation, cela peut vous venir à l'esprit et vous savez où en savoir plus.

Personnellement, je recommanderais vraiment d'aller voir Go. Je l'ai utilisé pour écrire des programmes d'une seule page qui fonctionnent mieux que ce qui prendrait trois jours et 13 bibliothèques tierces en C ou C ++, et ne serait même pas possible en Python, C #, Ruby, etc. Il a été conçu par des gens qui connaissent vraiment, vraiment, vraiment leurs trucs.

tylerl
la source
-1

Choisissez-en des types différents. Regroupez-les par fonctions et choisissez-en une dans chaque groupe. Si vous voulez le faire professionnellement, choisissez celui qui est utilisé (donc C ++ sur D pour un langage compilé de type statique avec métaprogrammation de modèle).

Pauvre D, c'est un bon langage, mais il manque l'application tueur que C ++ avait: compatibilité presque totale avec le langage n ° 1 de l'époque (C pour le cas de C ++). C'est bien, mais ce petit fait important relèvera probablement D au statut de diaporama dans les livres d'histoire.

anon
la source
-2

C est peut-être ancien, mais il est toujours très puissant et intéressant, l'apprentissage du C vous aidera beaucoup dans votre futur de "programmation".

Java n'est pas lent, celui qui vous a dit qu'il ne sait pas de quoi il parle, Java vous en apprendra beaucoup sur la POO

Pourquoi ne commencez-vous pas simplement avec Python, puis optez pour C ou autre chose,

just_a_dude
la source
C est également la lingua franca des microcontrôleurs (lorsque vous ne disposez que de 4K, vous ne pouvez pas vous permettre une exécution 8K). Rien que dans cet espace, C a encore une bonne décennie d'utilisation active devant lui.
TMN
Java était lent - je me souviens qu'il était moins qu'un démon de la vitesse au cours de ses premières années. Certaines personnes pensent que les performances n'ont jamais été améliorées.
MetalMikester