Pourquoi semble-t-il avoir beaucoup de crainte à choisir la «mauvaise» langue à apprendre? [fermé]


28

Peut-être que c'est juste moi, mais en tant qu'étudiant CS actuel, j'ai déjà rencontré de nombreuses questions sur ce site et ailleurs concernant non seulement "Quelle langue dois-je utiliser pour x?" mais aussi "Quelqu'un utilise-t-il encore la langue Y?" Ma première classe CS a été enseignée dans Scheme, qui, si je ne me trompe pas, n'est pas largement utilisé (au moins en comparaison avec des langages comme Java, PHP, Python, etc.). Beaucoup de mes camarades de classe ont rechigné à l'idée d'avoir à apprendre une langue qu'ils n'auraient plus jamais à utiliser, mais je ne comprends pas très bien d'où vient cette peur d'apprendre des langues moins populaires. Non, je ne peux pas utiliser Scheme dans aucun travail que je reçois, mais je ne regrette certainement pas d'avoir appris à l'utiliser (quoique de manière très débutante, pas très approfondie au cours de ce semestre). Je prends un cours sur les moteurs de recherche ce semestre, ce qui se fait en Perl et encore je vois des camarades de classe se plaindre du choix de la langue. Je peux comprendre avoir une langue préférée et ne pas aimer les autres, mais pourquoi certains s'énervent-ils en l'apprenant en premier lieu? Pouvez-vous vraiment apprendre la "mauvaise" langue? Apprendre quelque chose comme Scheme ou Haskell n'est-il pas un bon exercice mental, sinon rien, et utile au moins à une exposition à différentes façons de résoudre les problèmes?


Fait intéressant, mes deux premières années de formation CS ont porté uniquement sur C # et Java, et devinez ce que j'ai fini par utiliser lors de mon premier stage coopératif? Mot de quatre lettres commençant par "P".
Anon.

6
@Shewbox, vous avez raison, ils ont tort, vous aurez l'avantage de l'apprentissage croisé, ils ne le feront pas. Fin de l'histoire.
ocodo

7
Ils font du SEO (optimisation pour les moteurs de recherche) avec les responsables du recrutement.
rwong

1
@rwong: et malheureusement, certains d'entre nous ont dû apprendre la manière difficile de ne pas mettre "J'ai utilisé XXX une fois et ne le toucherai plus jamais", car certains recruteurs spamment sur les correspondances de mots clés.

1
@JB: 99% des gens donnent l'impression que les autres s'embrassent.
Michael K

Réponses:


27

Le but d'un diplôme CS n'est pas de vous enseigner le C # et Java, vous pouvez les apprendre par vous-même. Son pour vous enseigner la programmation et le calcul. La langue n'est qu'un détail. Au cours d'une carrière en programmation, vous utiliserez de nombreuses langues. Aujourd'hui, ce peut être Java ou C #, mais dans 10 ou 15 ans, ce pourrait être Erlang ou quelque chose qui n'a même pas encore été inventé. Apprendre différents styles de programmation et différentes façons d'attaquer un problème est beaucoup plus important que d'apprendre n'importe quelle langue.


Exactement - mon diplôme est antérieur à C ++ et encore moins à Java ou C #. Bien que nous ayons été enseignés principalement en Pascal, nous rencontrions des problèmes dans une variété de langues dès le début et dans notre deuxième année, nous avions un cours qui équivalait à "la langue du mois", la simula (utilisée pour faire des simulations) reste mon plus beau souvenir - bien qu'il n'y ait aucune chance que je puisse maintenant écrire un code de simula - principalement à cause de la POO qu'il m'a appris (bien que je ne le connaissais pas à l'époque)
Murph

17

Parce que votre première langue façonnera votre façon de penser, jusqu'à ce que vous appreniez le contraire.

Si vous êtes analphabète en calcul (premier programmeur) et que la première langue que vous apprenez est trop "basique", vous ne connaissez peut-être pas des concepts d'ordre supérieur comme l'orientation d'objet, la répartition multiple, l'héritage, les fonctions de première classe, la méta-programmation, etc.

La première langue que vous apprenez est généralement liée à votre première incursion dans la pensée informatique. Si quelqu'un vous dit, Jimmy, que le monde devant vous est composé de symboles A, B et C, toute votre réflexion sera en termes de A, B et C.Jusqu'à un jour, un nerd fantaisiste se moquera de vous pour ne pas connaître X , Y et Z concepts. Il n'y a aucun moyen que vous auriez su cela en ne connaissant que ABC.

Les personnes les plus préoccupées par la langue maternelle de quelqu'un sont probablement des programmeurs éclairés qui ont combattu dans l'obscurité. Oh, maintenant je sais ce qu'est une fonction de première classe. Mec, j'aurais aimé connaître l'héritage et l'injection de dépendance il y a deux ans!

Votre première langue n'est pas aussi importante que votre attitude vis-à-vis des langues suivantes. Si vous pouvez voir loin devant vous pour savoir qu'il existe un monde au-delà de BASIC / C / Perl / PHP / etc, alors vous êtes loin devant le jeu. C'est pourquoi de nombreuses personnes sont fanatiques des langages fonctionnels, car de nombreux langages développés activement convergent vers eux.


1
Cependant, nous devons tous commencer par ces concepts de base. Lorsque quelqu'un apprend un nouveau concept (prenez des modèles de conception comme exemple), il a tendance à l'utiliser partout pendant un certain temps. Si je n'avais pas passé les 5 premières années que j'ai programmées dans la structure du programme d'apprentissage de base et comment penser comme un programmeur, alors quand je suis arrivé à OO, j'aurais été tellement occupé à apprendre la partie procédurale que je n'aurais pas pu me concentrer sur le Partie OO. Cela étant dit, +1 pour «Votre première langue n'est pas aussi important que votre attitude à l'égard des langues suivantes» et les concepts .
Michael K

J'ai pensé à ajouter ça. Je ne disais pas du tout que les langues de base n'ont pas leur place. En fait, ils le font (dans les premiers stades d'apprentissage). Je ne l'ai tout simplement pas mentionné.
Mark Canlas

Oh Michael, ton montage est tellement plus classe, hahahaha.
Mark Canlas

Si les camarades de classe de l'OP sont inquiets, le programme n'est pas la bonne langue à apprendre, ils ne sont probablement pas du tout éclairés. :)
David Moles

Certains langages ont une syntaxe complexe tout en étant simple (dérivés C), d'autres ont une syntaxe simple tout en étant réellement complexe (Groovy). J'entends par là - en C / C ++ ou Objective-C - les choses sont assez déclaratives et procédurales dans n'importe quelle portée de code actif, alors que quelque chose comme Groovy a beaucoup de choses "qui se passent sous le capot" qui sont "cachées" par le sucre de syntaxe. Ma suggestion aux débutants est généralement d'aller avec les langages de syntaxe difficiles qui reflètent plus fidèlement le fonctionnement réel d'un ordinateur - parce que cette connaissance simplifie l'utilisation d'autres langues.
dcgregorya

11

Quand j'étais au collège, je connaissais beaucoup de gens qui ont décidé de se spécialiser en économie non pas parce que c'était quelque chose qui les intéressait ou les passionnait particulièrement, mais parce qu'ils pensaient que cela leur procurerait un bon emploi.

Je me suis spécialisé en études est-asiatiques parce que les cours que j'ai suivis comme effet secondaire de mon intérêt initial pour la littérature m'ont accroché. Je suis allé en Allemagne parce que je voulais faire un programme d'échange, où j'ai passé la plupart de mon temps dans des programmes de japonologie et de sinologie. J'ai étudié ce qui m'intéressait le plus. J'ai décidé de ne pas utiliser l'université pour étudier des choses liées à l'informatique, car j'avais déjà piraté pas mal de choses pendant mon enfance, mais j'ai passé du temps à programmer et à comprendre Internet, et finalement, peut-être de façon improbable , J'ai obtenu un bon travail qui a réussi à combiner tous ces intérêts.

La différence est entre le Careerist et quelqu'un qui apprend pour le plaisir d'apprendre. La carrière s'inquiète d'avoir étudié la mauvaise chose et de le regretter car ce ne sera pas la bonne chose pour me décrocher un emploi. La personne qui apprend pour le plaisir d'apprendre se rend compte qu'elle a 4 ans pour passer du temps à explorer toutes sortes de domaines avec des pressions relativement gérables; le carriériste pense que le travail de l'école est de leur apprendre quelque chose. L'apprenant comprend les choses lorsqu'il atteint un territoire inconnu et a de meilleures chances de trouver le bon emploi pour lui. Le Careerist finit par devenir un comptable de deuxième rang dans une entreprise de troisième niveau, paie les factures et en veut à son patron.

Oui, ce sont des archétypes, et chacun doit équilibrer le pragmatisme avec ses passions, mais c'est la différence essentielle. Certes, quelqu'un avec l'esthétique du programmeur peut également poser la question, mais plus dans le contexte de "laquelle sera l'utilisation la moins gaspilleuse de mon temps". Mais je suppose que c'est l'impulsion des carriéristes qui pose cette question, car le carriériste a bien plus peur de faire une erreur que l'apprenant, et l'apprenant fait généralement un meilleur programmeur parce que l'apprenant n'a pas peur des erreurs. L'apprenant, comme le programmeur, embrasse l'échec dans la recherche de compétences.


9

Oui, l'apprentissage de langages fonctionnels comme Scheme et Haskell est une bonne introduction à la programmation fonctionnelle. En ce qui concerne vos camarades de classe se plaignant de Perl, bien que Perl ne soit pas aussi populaire qu'autrefois, c'est certainement encore un langage largement utilisé dans les affaires.

Je peux comprendre vos camarades de classe qui souhaitent apprendre des langages pratiques utilisés dans le monde réel, mais je pense qu'ils ratent le point qu'une fois que vous êtes un programmeur expérimenté et que vous avez été exposé à plusieurs paradigmes de programmation, l'apprentissage de nouvelles langues est principalement une question de choix la nouvelle syntaxe. Ainsi, tant que vous êtes familiarisé avec les concepts, vous pouvez «vous spécialiser» dans la langue que votre employeur éventuel privilégie sans trop de difficulté.


5

Peut-être parce que les gens ont été influencés par des déclarations telles que la pièce de pêche à la traîne classique d'Edsger Dijkstra, "Il est pratiquement impossible d'enseigner une bonne programmation à des étudiants qui ont déjà été exposés à BASIC: en tant que programmeurs potentiels, ils sont mutilés mentalement au-delà de tout espoir de régénération." ( lien )

Cela fait craindre de subir des lésions cérébrales permanentes si vous apprenez la «mauvaise» langue. Votre exemple Perl n'est pas surprenant, car Perl est l'un de ces langages qui invoque souvent des critiques comme celle-ci de la part de ses détracteurs.


5

Votre première langue doit se concentrer sur les concepts, pas sur la syntaxe ou les idiomes. En utilisant cela comme ligne directrice:

  • Perl signifie beaucoup de recherche de variables spéciales et de syntaxe arcanique
  • PHP signifie mélange de concepts en raison de sa croissance organique
  • Java signifie un peu de confusion car tout n'est pas vraiment un objet
  • Assembly / C / C ++ signifie une tonne de trucs de bas niveau, ce qui est génial si vous voulez faire du développement de systèmes embarqués, mais porte atteinte aux concepts de niveau supérieur
  • SQL est utile pour voir comment le langage naturel peut (et ne peut pas) être mappé au code et aux structures de données
  • Visual Basic pour Applications se concentre sur des éléments jetables à usage spécial et, en tant que tel, il est beaucoup trop facile d'ignorer des concepts importants tels que la gestion correcte des erreurs et la refactorisation
  • LISP ressemble à une syntaxe simple, mais a également beaucoup trop d'expressions sténographiques qui sont franchement dénuées de sens sans une connaissance détaillée de leurs noms complets
  • Haskell ressemble souvent beaucoup aux mathématiques, mais peut rapidement dégénérer en soupe syntaxique
  • Python ... En fait, Python est le seul langage auquel je ne trouve aucune objection sérieuse pour les débutants. Peut-être simplement parce que c'est la dernière langue que j'ai apprise, et la prochaine langue m'apprendra l'erreur de mes voies.

J'ai remarqué que vous n'avez rien écrit sur C # ou VB.Net.
HK1

4

Demandez à vos camarades de classe comment ils savent qu'une langue est «mauvaise» s'ils ne l'ont pas utilisée. Vous ne pouvez déterminer ce que vous aimez qu'en utilisant une grande variété de langues.

Beaucoup de mes camarades de classe ont rechigné à l'idée d'avoir à apprendre une langue qu'ils n'auraient plus jamais à utiliser, mais je ne comprends pas très bien d'où vient cette peur d'apprendre des langues moins populaires.

Sans les connaître, je ne peux pas dire avec certitude pourquoi ils se sentiraient ainsi. Ils sont peut-être paresseux. Peut-être qu'ils ont déjà utilisé la langue et ne l'aimaient pas. Peut-être ont-ils peur d'essayer une autre langue. Qui sait. Ce que je sais, c'est qu'en tant qu'étudiant CS, chercheur, et ayant travaillé dans l'industrie, la connaissance d'une variété de langues est un atout énorme et vous ne savez jamais ce que vous allez utiliser ou non. Exemple: lorsque j'ai appris C pour la première fois, mon professeur nous a présenté les scripts de shell et les utilitaires de ligne de commande comme grepet awk. Mes amis n'ont pas pris la peine de les apprendre à un niveau de compétence. Je les utilise maintenant tous les jours au travail.

Je prends un cours de moteurs de recherche ce semestre, ce qui se fait en Perl et je vois encore des camarades de classe se plaindre du choix de la langue.

Perl est très puissant et si vous savez l'utiliser, il peut vous faciliter la vie. Il est également similaire à Python et Python est largement utilisé par l'un des meilleurs recruteurs d'étudiants CS: Google. Vos camarades de classe devraient manger ça. FWIW, je connais perl et python à un niveau intermédiaire (pas un débutant mais pas un expert).

Je peux comprendre avoir une langue préférée et ne pas aimer les autres, mais pourquoi certains s'énervent-ils en l'apprenant en premier lieu?

Jeune et vain? J'étais comme ça aussi. Mais mon "ennui" était plus dans le domaine des mathématiques. Donc, à partir de cette expérience, je parierais qu'ils en ont assez parce qu'ils n'aiment pas apprendre de nouvelles choses ou que de nouvelles langues sont difficiles à apprendre pour eux. (Mais alors, tout ce qui mérite d'être connu ne tombera pas sur vos genoux, je dis)

Pouvez-vous vraiment apprendre la "mauvaise" langue? Apprendre quelque chose comme Scheme ou Haskell n'est-il pas un bon exercice mental, sinon rien, et utile au moins à une exposition à différentes façons de résoudre les problèmes?

À la première phrase: Non, mais vous pouvez certainement apprendre des langues que vous préféreriez ne pas avoir + toux + Lisp + toux + =)

Pour le reste: oui! Vous devez apprendre autant de langues que possible pour découvrir ce que vous aimez et élargir vos horizons. Il n'est pas nécessaire de les maîtriser tous, mais avoir une connaissance pratique est toujours utile. Vous ne savez jamais quand une langue que vous pensiez être une perte de temps à apprendre est utile.


1
Quel est le problème avec Lisp?!?! :)
Michael K

1
+1 pour «apprendre autant de langues que possible». Si vous connaissez une variété de langues, il devient trivial d'en choisir une pour une tâche donnée.
Michael K

1
@Michael: De plus, cela facilite l'apprentissage d'un nouveau, puisque vous connaissez déjà la plupart des concepts.
David Thornley

@Michael: Rien de mal avec Lisp =). Je ne suis simplement pas un type de langage de programmation fonctionnel. De plus, tant de parenthèses !! Cependant, j'ai vu des solutions TRÈS élégantes implémentées en Lisp. Beaucoup de respect pour les gourous Scheme et Lisp.
aqua

3

Parce que l'embauche de programmeurs est un processus arbitraire et capricieux, le simple fait est que si vous choisissez la mauvaise technologie, vous pourriez vous retrouver dans la voie du dodo

À la première page, à tout moment, vous verrez une ferveur religieuse proche de croyances telles que:

  1. Un diplôme d'études collégiales en informatique est nécessaire pour être un bon programmeur.
  2. Une maîtrise en informatique rend les gens mauvais programmeurs.
  3. Les certifications sont absolument nécessaires pour faire avancer votre carrière.
  4. Les certifications sont un drapeau rouge indiquant un mauvais programmeur.
  5. Un diplôme d'études collégiales dans un domaine autre que l'informatique a tendance à donner les meilleurs programmeurs.
  6. Vous n'êtes pas un bon programmeur, sauf si vous programmez également le soir et le week-end.
  7. et ça continue.

La seule constante à travers tout cela est que 99% des entreprises veulent que vous ayez X ans d'expérience avec la technologie Y ... Et comme une personne ne dispose que de tant de cycles disponibles, ce qu'elle y consacre est très important.


2

Je pense que la crainte de choisir la «mauvaise» langue à apprendre est principalement due au manque d'informations et au manque de conseils , tels que:

  • Illusion de la balle d'argent . L'idée fausse qu'il y a la bonne langue pour le travail, l'environnement ou le projet. Et si vous choisissez le mauvais, vous êtes grillé.
  • Ne pas comprendre que la programmation transcende les langages . La langue n'est qu'un outil, comme une machine à écrire ou un ordinateur pour écrire. Il ne s'agit pas d'apprendre les nuances de l'outil (syntaxe), mais ce que l'outil permet (concepts, abstractions, etc.) de créer.

C'est pourquoi, par exemple, Scheme est une excellente langue d'enseignement. La programmation, c'est deux choses: l'abstraction et la réutilisation. Le schéma a exactement deux caractéristiques: l'abstraction de fonction et l'appel de fonction (c'est-à-dire la réutilisation). Heck, il n'a même pas de syntaxe!
Jörg W Mittag

2

Nous sommes exposés à plus d'opinions.

Comparé à la façon dont les choses ont pu être faites dans le passé, il y a plus de doutes quant à la façon dont nous passons notre temps parce que nous sommes exposés à plus d'opinions - tout le monde a son avis sur ce que devrait être le premier langage de programmation et puisqu'il est un sujet si capricieux, n'importe qui peut justifier n'importe quoi .

En raison de notre mode de vie rapide, tout le monde a une peur innée de perdre son temps. La crainte accentuée d'apprendre la mauvaise langue est simplement le résultat de personnes facilement exposées à une multitude d'opinions.


1

C'est l'aversion générale d'apprendre quelque chose qui a une utilité douteuse. Je peux voir que la piqûre ici est encore pire, car c'est la classe que les gens veulent suivre et leur apprentissage de quelque chose qu'ils pensent est inutile. Je sais que si j'allais au collage, je voudrais apprendre quelque chose que je peux utiliser dans le monde réel.

La seule partie où je pourrais être en désaccord avec ces autres personnes, c'est quand une langue est largement utilisée et qu'ils ne veulent tout simplement pas sortir de leur bulle pour l'apprendre. Ce n'est qu'alors que la plainte n'a pas de sens.


1

Pourquoi est-ce «peur». Je dirais que c'est de l'animosité d'avoir été nourri de force avec quelque chose que vous ne voulez pas ou que vous ne jugez pas important. Aucun langage n'est faux mais nous avons peu de temps pour nous concentrer sur les choses. Je devais faire mes cours CS avec Java et n'en étais pas content. Pas parce que je craignais que Java ne soit pas le mauvais langage, mais ce n'était pas là que ma carrière était orientée.

Maintenant, Java est utile non? LOL Tout le monde apprend Java. C'est ce que vous ne voulez pas concourir. Votre CV sera dans une pile de 1000 avec le titre Diplômé CS récent qui connaît Java. Votre schéma d'apprentissage est probablement mieux adapté à l'employabilité, car c'est le signe secret que vous êtes allé dans une université d'élite et non dans un collège communautaire dinky.

Je dirais également que ce type d'animosité est beaucoup plus large que CS en général, mais indique l'enseignement supérieur en général. Je suis sûr que l'instructeur a choisi Perl parce qu'il connaît Perl et peut le noter facilement et craint d'apprendre de nouvelles langues que les étudiants préféreraient apprendre. Je pense que c'est votre propre éducation et vous devriez être en mesure de définir les technologies que vous jugez nécessaires pour votre propre succès.

(PS MIT a abandonné Schema et est passé à Python)


Un peu triste de ne pas abandonner Scheme, SICP est quelque chose que chaque programmeur devrait lire. J'ai tendance à le promouvoir à chaque occasion.
Zachary K

Cela me rappelle mes jours à l'université. Quelques années après mes débuts, le département CS est passé du C ++ au Java comme principal langage d'enseignement. Quelques années après (lorsque j'essayais d'enseigner des didacticiels sur la structure des données), il était clair qu'aucun des étudiants ne comprenait quoi que ce soit au sujet de l'allocation de mémoire (par exemple, ils étaient complètement perdus sur la pile par rapport au tas). Par conséquent, ils n'ont pas saisi les opérations de base sur les structures de données que nous avons essayé de leur enseigner. Peu de temps après, le C ++ est redevenu le langage préféré.
smithco

Dans la pratique, l'apprentissage de nouvelles langues est facile une fois que vous comprenez la programmation. Les gens recommandent des langages comme C car il vous oblige à déclarer des pointeurs et à allouer de la mémoire et à protéger l'accès en écriture à vos pointeurs ... quand vous pensez en ces termes, tout le reste est assez facile car vous considérez déjà toutes ces choses. Il est plus difficile de faire l'inverse - en commençant par un langage plus abstrait, puis en construisant l'expérience pour comprendre toutes les choses sous-jacentes qui se produisent.
dcgregorya

1

Le temps est le bien le plus rare de tous, une fois sorti du monde réel - et personne ne veut perdre du temps sur des compétences qui ne lui apporteront aucun avantage réel.

Cela étant dit, je ne pense pas qu'il y ait un `` mauvais '' langage à apprendre - mais j'aurais aimé découvrir Ruby il y a des années au lieu de lutter pour faire des choses avancées en PHP ...

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.