EDIT: Cette question semble au premier abord dénigrer Java, et je suppose qu'à ce stade, c'est un peu. Cependant, le point le plus important que j'essaie de faire valoir est la raison pour laquelle une seule langue est choisie comme étant l'unique solution à tous les problèmes. Java se trouve être celui qui est utilisé, c'est donc celui que j'ai dû battre ici, mais je ne suis pas intentionnel d'en déchirer un nouveau :)
Je n'aime pas Java dans la plupart des milieux académiques. Je ne dis pas que le langage lui-même est mauvais - il a plusieurs aspects extrêmement souhaitables, surtout la possibilité de fonctionner sans recompilation sur la plupart des plates-formes. Rien de mal à utiliser la langue de votre prochaine application ^ TM. (Pas quelque chose que je ferais personnellement, mais c'est plus parce que j'ai moins d'expérience avec ça, plutôt que sa conception est mauvaise)
Je pense que c'est un gaspillage que des cours de CS de haut niveau soient enseignés en utilisant Java comme langage. Trop de mes camarades de classe ne peuvent pas faire un programme qui en vaut la peine, car ils ne savent pas comment travailler dans un monde sans ramassage des ordures. Ils ne comprennent pas fondamentalement les machines pour lesquelles ils programment. Quand quelqu'un peut travailler en dehors d'un monde de collecte des ordures, il peut travailler à l'intérieur de celui-ci, mais pas l'inverse. GC est un outil, pas une béquille. Mais la façon dont il est utilisé pour enseigner aux étudiants en informatique est une béquille.
L'informatique ne devrait pas enseigner une suite complète de cours adaptés à une seule langue. Les étudiants partent avec l'idée que tout bon design est un design Java idiomatique, et que le design orienté objet est la VRAIE VOIE QUI EST LA SEULE FAÇON QUI PEUT ÊTRE FAITE. D'autres langues, dont au moins une n'étant pas une poubelle, devraient être utilisées dans l'enseignement, afin de permettre au diplômé de mieux comprendre les machines.
Il est gênant qu'une personne titulaire d'un doctorat en sciences sociales d'une institution respectée ne puisse pas programmer sa sortie d'un sac en papier.
Le pire, c'est que lorsque je parle à ces professeurs de CS qui comprennent vraiment comment les choses fonctionnent, ils partagent des sentiments comme celui-ci, que nous rendons un mauvais service à nos étudiants en faisant tout en Java. (Notez que ce qui précède serait le même si je le remplaçais par un autre langage, généralement l'utilisation d'un seul langage est le problème, pas Java lui-même)
Au total, je sens que je ne peux plus respecter aucun type de diplôme du tout - quand je ne vois pas ceux qui m'entourent capables de programmer leur chemin pour sortir des problèmes de fizzbuzz.
Pourquoi / comment en est-il arrivé ainsi?
la source
Réponses:
Ce n'est pas un problème Java, c'est un problème d'enseignement. Ne pas savoir programmer n'est pas une faute de langue, c'est la faute des étudiants. Il en va de même pour tous vos problèmes, GC, connaissances de base de la machine, comment les choses fonctionnent "sous le capot" pour ainsi dire.
Votre principal reproche concernant la collecte des ordures me jette légèrement. Sauf si vous effectuez un garbage collection C ou C ++, c'est généralement très bien et ce n'est pas un problème. Préférez-vous qu'ils apprennent tous l'assemblage? Les langues de niveau supérieur strictes sont très utiles pour l'enseignement. Il vous donne la flexibilité des bibliothèques, des packages et d'autres subtilités lorsque vous en avez besoin, sans aucun des confusions de langage "sucre" présentes dans la plupart des autres langages de niveau supérieur (PHP, Ruby, Python, Perl).
la source
Les universités font-elles vraiment cela? Ou est-ce juste une perception que les gens ont lorsqu'ils obtiennent un mauvais candidat à un entretien d'embauche?
J'ai obtenu mon diplôme CS il y a 4 ans et bien que Java ait été utilisé dans les cours d'introduction, il n'a pas été particulièrement souligné par la suite. Du haut de ma tête, les cours obligatoires de base exigeaient que vous appreniez Java, C, C ++, SML (langage de programmation fonctionnel), assembleur, matlab et CAST (langage de description de circuit). Cela ne prend pas en compte tous les cours CS mathématiques et théoriques et bien sûr, la demi-douzaine de cours CS électifs qui vous auraient exposé à beaucoup plus. De parler avec des amis dans un certain nombre d'universités différentes, il ne semblait pas que ce qu'ils faisaient était très différent.
S'il y a des universités qui n'enseignent que Java, alors c'est bien une tragédie. Non pas parce que Java est mauvais, mais parce que ce n'est qu'un outil parmi tant d'autres qui devrait être disponible pour un programmeur. Un développeur qui ne connaît que Java équivaut à un charpentier qui ne sait utiliser qu'un marteau. Cependant, j'ai du mal à croire que c'est vraiment le cas, du moins pour les universités respectées. Je soupçonne que c'est juste la perception de voir de mauvais candidats et de blâmer l'école pour l'incompétence des candidats plutôt que le manque de motivation / motivation / curiosité / professionnalisme / etc. du candidat.
la source
Je suis vraiment surpris que ce soit la situation de nombreuses écoles. Quand j'ai obtenu mon diplôme CS, j'ai eu une série de cours de langues qui comprenaient toutes les langues populaires de la journée (c'était il y a près de 40 ans): assembleur (Univac 1108 et MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp et Algol 68. Je ne peux pas imaginer avoir une seule langue enseignée. Ou comment j'ai pu apprécier ce que les compilateurs devaient faire sans avoir écrit certains programmes d'assembleur.
Nous avons utilisé Algol et FORTRAN pour la plupart des cours sur les données et les algorithmes. J'aurais aimé passer plus de temps avec Lisp - à la place, nous avions juste une introduction et maintenant j'essaye de réapprendre certains des concepts. Nous avons utilisé SNOBOL4 pour écrire des analyseurs syntaxiques - et sa correspondance de motifs avec le retour arrière a construit une bonne base pour le travail ultérieur des bibliothèques regex incluses dans de nombreux langages modernes.
Cette introduction à une demi-douzaine de langues a suscité un intérêt pour moi qui n'a pas cessé depuis.
la source
Pour avoir la vraie raison, vous devriez demander aux personnes qui dirigent ces institutions (et même alors, elles pourraient ne pas vous le dire).
Plusieurs raisons possibles (et je ne défends ni n'accuse personne ici, je suppose):
Vous pouvez faire avancer les choses en Java
Java est un langage à usage général et en tant que tel peut être utilisé pour résoudre de nombreux problèmes.
Beaucoup d'enseignants comprennent Java
Il est difficile d'enseigner une langue que vous ne comprenez pas
Java est populaire
Ce qui signifie qu'il existe de nombreuses ressources Java - livres, communauté active, bibliothèques de codes, etc.
Java est facile
Vous n'avez pas besoin de comprendre beaucoup de choses ou de théorie de bas niveau pour faire Java. Vous ne le faites peut-être pas bien , mais au moins vous pouvez faire avancer les choses.
Java est omniprésent
Vous pouvez l'exécuter sur plus ou moins n'importe quoi.
Il y a des emplois pour les programmeurs Java
De nombreux emplois nécessitent Java - les enseignants sont censés préparer les étudiants au monde réel.
Le temps est limité
Sur de nombreux cours, il n'y a pas de temps pour enseigner plusieurs langues, théories, concepts de bas niveau, etc.
C'est ce que veulent les étudiants
De nombreux étudiants ont déjà entendu parler de Java (et l'ont même utilisé). Ils aiment parce que c'est familier.
la source
C'est ce que l'industrie a demandé. Il y avait une pénurie de développeurs Java, les écoles ont donc commencé à les créer. Les entreprises ont des développeurs qui peuvent commencer à travailler dès qu'ils franchissent la porte.
Quoi qu'il en soit, la langue n'a pas d'importance. Ils pouvaient enseigner un langage non GC et produire de mauvais programmeurs. L'utilisation des écoles de langues est un détail d'implémentation. Les écoles devraient enseigner les concepts. Si ce n'est pas le cas, c'est l'école qui est le problème, pas la langue avec laquelle ils enseignent. Ce n'est pas parce que quelqu'un ne sait pas ce qu'est un pointeur qu'il ne peut pas être un programmeur efficace.
GC est de toute façon la voie de l'avenir.
la source
Paresse et motif de profit. Java obtient la plupart des gens 80% du chemin, avec 20% de l'effort. Cependant, cela produit souvent des codeurs vaudous "singe voir singe faire" qui n'ont pas une compréhension approfondie de ce qui se passe et sont incapables de creuser plus profondément que des outils de haut niveau.
Enseigner correctement le C / C ++ est difficile. Même quand c'est bien fait, beaucoup ne comprendront pas complètement les concepts de bas niveau comme les pointeurs (il y a des études à ce sujet). De plus, il ne semble pas immédiatement pertinent sur le marché du travail.
la source
Je suis plutôt d'accord mais dans une certaine mesure.
Si vous devez enseigner CS cource axé sur les structures de données ou les algorithmes. Éliminer la plupart des choses inutiles est une bonne chose. Vous ne voulez pas que les élèves gèrent des trucs de bas niveau lorsqu'ils apprennent des concepts de haut niveau.
D'un autre côté, des trucs de bas niveau devraient également être enseignés. Juste pour avoir plus de programmeurs polyvalents.
la source
Comme toujours, il s'agit de savoir ce que vous voulez enseigner et combien de temps vous avez pour le faire.
Faire des choses en Java signifie que vous n'avez pas à gérer les pointeurs errants et free / malloc. Cela signifie beaucoup moins de bogues difficiles à trouver.
Cela ne signifie pas que vous ne devriez pas en apprendre davantage sur la machine sous-jacente - que vous devez être bon dans le métier - mais que vous devriez peut-être choisir le bon outil pour le travail. Les algorithmes de haut niveau ne sont peut-être pas le meilleur sujet pour le cours d'assembleur.
la source
Est-ce trop demander de leur apprendre quelque chose sur le fonctionnement réel des ordinateurs ? Cela n'a aucun sens pour moi que tout plan de cours CS n'inclue pas quelque chose de systèmes d'exploitation et d'architecture informatique. Je ne dis pas que vous devriez être en mesure de concevoir un ordinateur au dos d'une enveloppe, mais un aperçu général met toutes les langues en perspective. Je veux dire, Java s'exécute dans une machine virtuelle!
la source
En toute honnêteté, je ne pense pas que vous devriez perdre le respect de tous les diplômes et surtout pas du CS car la seule langue enseignée est Java.
Toute composition décente. sci student comprend que son diplôme CS n'est rien de plus qu'un morceau de papier et que la vraie connaissance proviendra de projets personnels et d'études personnelles. J'aimerais penser que les bons étudiants savent qu'ils ont besoin de connaître le C et d'apprendre à faire avancer les choses sous Linux / Unix et à savoir comment NE PAS tenir la main dans les langages modernes.
la source
Je ne vois aucun problème avec l'utilisation de Java. Le plus gros problème (comme vous l'avez mentionné) est lorsque les universités enseignent la programmation impérative comme le meilleur et le seul moyen de résoudre tous vos problèmes. C'est très loin de la vérité. Par exemple, au lieu d'utiliser trois langages impératifs (ou pire encore le même langage) pour trois cours différents, ils devraient utiliser trois paradigmes de programmation différents. Un exemple est Java (impératif), Prolog (déclaratif) et Haskell (fonctionnel).
Quant à savoir pourquoi cela se produit, je pense que c'est une combinaison de (1) politique - les présidents ne sont pas ouverts d'esprit ou n'ont pas d'avantages personnels / sponsors, et (2) la paresse - les professeurs étaient autrefois étudiants et ils enseignent tout ce qu'ils savent ou aiment.
la source
Collège Calvin à Grand Rapids Mi. Une fois qu'ils sont passés de Java à Python pour des cours de programmation d'introduction, le professeur incrédule a mentionné à un groupe d'entre nous vers la fin de son semestre, "Beaucoup d'entre eux peuvent réellement programmer, c'est incroyable". Sa stupéfaction contraste avec les expériences précédentes avec Java. Cela ne fait pas de Java un mauvais langage, juste difficile à reprendre à zéro. Je dirais la même chose à propos de C, ou C ++ ou de tout langage qui nécessite une connaissance intime des schémas ou types d'allocation de mémoire.
la source
J'ai obtenu un diplôme en ingénierie des systèmes informatiques, j'ai donc étudié l'assemblage, les microprocesseurs, le VHDL, ce que sont les portes logiques et comment en créer une bascule, j'ai étudié les circuits électriques, les amplificateurs opérationnels, les filtres passe-bas, l'amplitude modulation, construit un circuit dans un laboratoire qui ressemblerait à un clavier de téléphone, sali avec un analyseur logique, a pris des cours de physique. Du côté de Linux - j'ai recompilé un noyau avant, j'ai écrit un petit pilote de périphérique et un système de fichiers de devoirs.
Mais j'ai réalisé que j'aime beaucoup plus les trucs de haut niveau. Je préfère Python à C. J'aime C # et j'adore le garbage collector. J'aime les mathématiques et les algorithmes et les structures de données, mais je ne suis pas un fan particulier des pointeurs - je peux jouer avec eux; Je ne veux tout simplement pas.
Donc, vous pensez que l'université devrait enseigner plus de C, moins de Java. Quelqu'un d'autre pense qu'ils devraient tout enseigner dans Scheme. Spolsky prendra les deux.
Oui, il est vrai qu'un diplôme universitaire n'est qu'une feuille de papier, mais "ne laissez pas la scolarité entraver vos études". Il y a toujours Wikipédia, Stack Overflow, Coursera.org, etc. On dirait que les universités traditionnelles perdront de leur importance.
Si je pouvais faire des études de premier cycle partout, alors je serais allé dans une autre école, je n'aurais pas étudié le génie électrique, mais plutôt les mathématiques, CS + mineure en physique et en français. Scratch French; J'aurais dû étudier à l'étranger en Suisse et y apprendre 5 langues naturelles. Je retournerais aussi et trouverais une personne qui m'a convaincu que je devais absolument prendre une introduction aux cours d'économie au collège afin de survivre dans le monde réel et lui donner une tape sur la tête avec ma collection de livres de Milton Friedman (les rares livres sur le sujet de l'économie que j'ai lus qui ne craignent pas). Je ne paierais pas non plus d'argent pour le livre Freakonomics 1 ou un livre sur la langue Perl.
Avec le recul, j'aurais fait beaucoup de choses différemment. Tout ce que je peux faire maintenant, et je vous le recommande, c'est de choisir votre propre aventure: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html
Avec le recul, j'aurais gagné 100 milliards de dollars en bourse maintenant, et je l'aurais investi dans la recherche sur le cancer, j'aurais engagé des scientifiques pour débarrasser le monde des déchets plastiques; J'aurais donné assez d'argent à la campagne de Ron Paul pour que la guerre au Moyen-Orient se termine il y a plus de 3 ans.
Reconnaissez maintenant que vous ne récupérerez jamais votre temps, alors essayez de le dépenser judicieusement.
la source
Il y a quelques années, j'ai lu quelque part qu'au Royaume-Uni, la décision Java a été prise pour inciter davantage d'étudiants à la programmation. Apparemment, c'était plus facile pour le cerveau à cause du manque de pointeurs désagréables et de gestion de la mémoire, etc. Je suppose que c'est la raison pour laquelle Python est rapidement adopté comme le nouvel «outil d'apprentissage». Je serais d'avis que votre cours uni typique ne fera pas de vous un programmeur. Tout ce qu'il est censé faire, c'est vous armer d'une certaine quantité de connaissances et vous préparer à la programmation. Le jour où l'on peut s'appeler programmeur vient généralement pas mal de temps après uni et quand ce moment arrive, les pointeurs, la récupération de place et les paradigmes de programmation autres que la POO ne devraient pas être un problème.
la source
Pourquoi Java est-il utilisé?
Trois raisons:
Java utilise la syntaxe de style C. De nombreux programmeurs le connaissent, ce qui réduit la courbe d'apprentissage.
L'argent a été dépensé pour commercialiser Java comme cool et moderne. Mais par rapport au lisp, java vit à l'âge de pierre.
La JVM. JVM est la seule chose cool à propos de Java qui est légitime, pas seulement du battage publicitaire. Bien que la JVM doive être saluée comme une plate-forme pour l'exécution de programmes, elle ne mérite pas en soi l'existence du langage Java. Vous pouvez théoriquement et pratiquement compiler de nombreux langages différents pour la JVM.
la source
Votre question soutient les conclusions d'une autre personne qui a écrit un article disant que Java est tellement cool mais pas assez lourd pour le calcul scientifique. Je pense qu'il devrait simplement utiliser Big Decimal avec toutes ses précisions fines, NAN, etc. et continuer.
Je veux vivre uniquement dans un monde de collecte automatique des ordures. Son plus sain, plus propre, plus soigné, esthétique, évite le gaspillage d'argent sur les dépenses de santé, est plus souhaitable - ne pas avoir à marquer quelque chose comme indésirable - simplement en le déréférençant ou en le définissant sur null ou lorsque je quitte le champ d'application, l'article est automatiquement étiqueté pour la collecte des ordures ..
Ok, maintenant je ne parle que de Java, mais ce serait très utile si cela fonctionne aussi dans le vrai scénario d'ordures. Java est écrit une fois exécuté n'importe où, ce qui est assez bon pour moi pour qu'il soit utilisé comme langage dans les écoles. Aucune fuite de mémoire et être apprécié par les programmeurs heureux qui ne veulent pas passer du temps à baliser chaque objet qu'ils utilisent et cesser de s'utiliser est une bonne logique de la part de Java.
Java a des pointeurs - enfin nous les appelons des références. String s1 = "Hello"; String s2 = "Hello"; String s3 = new String ("Bonjour");
s1 et s2 pointeront vers le même objet String - qui est par référence s1 == s2, s1.equals (s3) mais s1 == s3 est faux parce que s3 est un nouvel objet de référence - c'est l'arithmétique java des références et I comprendre tout cela désolé, je ne souhaite pas être étiqueté comme quelqu'un qui ne comprend pas les complexités sous-jacentes de l'arithmétique des pointeurs en C ou C ++.
la source