Java se trouve souvent dans le monde universitaire. Quelle en est la raison?
real
monde n'est pas un avantage pour les étudiants ou les entreprises qui souhaitent embaucher des étudiants.
Java se trouve souvent dans le monde universitaire. Quelle en est la raison?
real
monde n'est pas un avantage pour les étudiants ou les entreprises qui souhaitent embaucher des étudiants.
Réponses:
A quelques universités ont quelqu'un qui est assez bien connu que beaucoup (sinon la plupart) tournent autour des décisions que la personne aime, aversions, les opinions, le goût, etc. Juste par exemple, Texas A & M a Bjarne Stroustrup sur le personnel; il n'est probablement surprenant de personne que son programme d'études ait tendance à mettre l'accent sur le C ++.
La plupart des universités sont cependant un peu différentes. Premièrement, les décisions sont souvent prises beaucoup plus au profit de la faculté que des étudiants. Dans de nombreux cas, le critère le plus important est "quelle langue requiert le moins d'effort de notre part?" La plupart d'entre eux sont également prudents dans leur paresse - ils veulent non seulement la langue avec le moins de concepts avancés à apprendre, mais aussi celle qui est (par exemple) la plus lente à innover, à mettre à jour ou à adopter quelque chose de nouveau.
Deuxièmement, la plupart des décisions sont prises par le comité. Cela signifie que la décision finale est rarement (voire jamais) ce que quiconque voulait réellement - c'est juste ce que le moins de membres du comité (en particulier ceux qui ont le plus d'influence) ont trouvé particulièrement répréhensible. C'est comme choisir une saveur de crème glacée. L'un aime vraiment la fraise, mais un autre est allergique aux fraises. Un autre aime vraiment le chocolat, mais quelqu'un d'autre ne peut pas le supporter. Un autre pense que le raisin au rhum est excellent, mais les deux autres craignent que la mention du "rhum" soit interprétée comme encourageant l'abus d'alcool - ils se retrouvent donc avec de la vanille, même si ce n'est vraiment ce que personne voulait.
Enfin, même si cela va généralement directement à l'encontre de la plupart de ce que les deux critères précédents produiraient isolément, ils doivent généralement (ou du moins veulent) être perçus comme répondant aux besoins de l'industrie.
Java est l'intersection de ces trois:
Notez que je ne dis pas vraiment (par exemple) qu'il n'y a rien de plus à savoir sur Java que la notion la plus élémentaire de ce qu'est la POO - seulement que c'est tout ce qu'il faut pour faire ce qui passe pour un travail acceptable d'enseignement.
J'ai étudié l'informatique au début des années 90 juste avant la sortie de Java. L'approche suivie par nos professeurs était la suivante.
Première année: cours d'introduction à la programmation et aux algorithmes en Pascal. Pourquoi Pascal? Parce que c'est un langage propre conçu pour enseigner les concepts de programmation sans possibilité de piratage. Bien sûr, nous les étudiants savions que le langage le plus populaire à l'époque était le C et qu'il y avait un nouveau langage avec une popularité croissante: le C ++. Nous lisions et discutions donc constamment de ces langues et nous faisions de petits projets en les utilisant nous-mêmes. L'idée était donc: en classe, nous faisons la théorie sérieuse (Pascal) tandis qu'à la maison, nous apprenons à pirater (C). :-)
Au cours de la deuxième année, nous avons suivi un cours sur le système d'exploitation au cours duquel on nous a demandé de faire les exercices de C et d'assemblage. Le professeur ne nous a pas donné un cours complet sur C (juste quelques leçons) parce que (1) nous avions déjà eu un cours de programmation pendant la première année et (2) il a dit que tout informaticien qui connaît les concepts de la programmation devrait être capable de lire un livre et d'apprendre un nouveau langage de programmation. Le cours s'est bien déroulé et nous avons tous trouvé normal que le C et l'assemblage soient des sujets pratiques que vous apprenez par vous-même ou discutez dans le couloir avec d'autres étudiants, mais que cela ne valait pas la peine de suivre un cours.
Au cours de la troisième année, nous avons suivi un cours sur les langages de programmation, dans lequel nous avons étudié les différents paradigmes des langages de programmation (impératif, fonctionnel, logique, orienté objet), nous avons appris les concepts généraux et les techniques de mise en œuvre, et révisé les principaux langages de programmation (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Ce que notre professeur nous a dit au début du cours était: vous ne devriez pas évaluer ce cours en pensant au nombre de langages de programmation que vous connaissez à la fin du cours, mais plutôt à tous les concepts généraux que vous avez appris, comment ils sont liés les uns aux autres, à quoi ils servent, comment ils sont utilisés dans quelles langues. Ensuite, apprendre une langue spécifique consiste simplement à lire un livre, à regarder le code existant, à essayer de l'utiliser sur un projet spécifique, etc.
J'ai trouvé cette approche très appropriée et efficace. Je ne pense pas que l'université devrait viser à préparer de bons programmeurs mais plutôt à donner une bonne connaissance qui permette de comprendre la programmation et les langages de programmation. Devenir un bon programmeur ne sera qu'un effet secondaire de cela. J'envisage maintenant de postuler pour un emploi où Ada est requis et je n'ai pas peur de cela, même si je n'ai jamais fait de programmation sérieuse dans Ada auparavant.
Revenons à la question de l'enseignement de Java. Je suppose que Java est souvent utilisé pour l'enseignement car il est suffisamment neutre et permet d'expliquer les principes de programmation en utilisant un langage également proche du monde de l'industrie.
Personnellement, j'utiliserais toujours Pascal ou un langage similaire pour un premier cours, car cela me permettrait de faire la distinction entre les structures de contrôle et les structures de données, qui dans les langages Java / orientés objet sont étroitement intégrées. Donc, à mon avis, Pascal permettrait une introduction plus progressive aux concepts de base de la programmation.
En outre, un informaticien (et un bon programmeur) devrait connaître les mécanismes de base / structures d'exécution comme la pile, le tas, le passage de paramètres, l'allocation de mémoire, les pointeurs ou comment implémenter des types de données abstraits sans utiliser les fonctionnalités intégrées de la langue (listes, ensembles, etc.). Java enlève une grande partie de cela aux programmeurs (c'est bien, bien sûr), mais un débutant devrait en apprendre davantage sur ces choses. Peut-être qu'après un premier cours de programmation en Java, on devrait également suivre un cours plus général sur les concepts des langages de programmation.
Ce ne sont que mon expérience et mes opinions.
J'étais à l'école lorsque Java est sorti. Et mon université a presque changé du jour au lendemain. Les gens étaient étourdis à Java dans le milieu universitaire. J'étais un Jr quand il est sorti, et au moment où ma dernière année, presque tous les universitaires se déplaçaient rapidement pour changer leur programme d'études. Pas seulement à mon université mais partout. C'était vraiment aussi rapide. Notre deuxième cours d'introduction était Pascal, qui s'est rapidement converti à Java en moins d'un an. Pourquoi ont-ils converti si vite? Deux grandes raisons.
Un universitaire veut enseigner la théorie et les algorithmes. Les langages qui vous facilitent l'apprentissage des algorithmes qui ne nécessitent pas beaucoup d'expérience pour fonctionner sont les meilleurs: Scheme, Python, Java, Smalltalk, etc. Plus le langage vous gêne, plus vous êtes distrait de l'apprentissage des vrais algorithmes. À l'époque, les langages de script étaient des citoyens de seconde classe désapprouvés par les employeurs comme bon marché ou rapides et sales. Les universitaires les considéraient comme davantage des copies, mais ce que veulent les employeurs l'emporte également sur les universitaires.
Cela nous amène à la raison suivante. Les employeurs veulent une certaine expérience linguistique, et à l'époque c'était le C / C ++. Mais, C / C ++ prend beaucoup d'expérience pour apprendre, et a beaucoup de cas de coin et si ets ou mais qui sont distrayants. Nous avons appris des cours en C / C ++ mais pas aux niveaux inférieurs. À l'époque, les employeurs étaient fous des programmes CS parce que les étudiants n'étaient pas des gourous du C / C ++.
Java parcourait l'industrie presque aussi vite que le monde universitaire. Alors, finalement, le milieu universitaire obtenait ce qu'il voulait. Langue de haut niveau plus facile à apprendre et langue souhaitée par les employeurs. C'était trop parfait. J'ai eu un ami de retour dans le monde universitaire peut-être 3 ans après mon départ, et il a dit que vous pouviez trouver un livre Java dans chaque sujet CS. C'est à cette vitesse que Java a pris le contrôle du monde universitaire.
Personnellement, je pense que Java n'a pas réduit la CS. Je pense que cela a été une bonne chose car les étudiants peuvent étudier la CS, participer à l'Open Source et trouver du travail même lorsqu'ils sont à l'école. Je crois toujours que vous devriez étudier beaucoup de langues en tant qu'étudiant CS, et cela ne devrait pas être uniquement Java. Mais, s'ils utilisaient tous du python, Joel détesterait aussi le python.
Il y a plusieurs raisons à cela, notamment:
Notez qu'il existe un certain nombre d'écoles qui enseignent le C # pour plusieurs des mêmes raisons. Il existe de nombreuses autres raisons, dont certaines plus spécifiques à chaque école. Essentiellement, Java est devenu le "BASIC" orienté objet d'antan.
*
syntaxe, mais il serait très difficile à utiliser sans une compréhension de base des pointeurs.
J'aime le post de Joel Spolsky intitulé Les périls des écoles Java . Je pense que Berin Loristch a raison de simplifier le cirriculum et de l'appliquer également au monde réel.
J'ai entendu plusieurs fois ce qui suit: "un diplôme en informatique n'est pas un diplôme pour apprendre la programmation, c'est pour apprendre la théorie". Le langage n'a pas nécessairement besoin d'avoir de l'importance (même s'il ne doit pas gêner) tant que la théorie est apprise. Java est un langage relativement facile à maîtriser et qui permet de passer plus de temps à apprendre la théorie derrière tout. C'est l'une des raisons pour lesquelles le MIT utilise Scheme (j'ai donc entendu parler).
Bon nombre des réponses données ci-dessus sont bonnes, mais elles laissent de côté quelque chose.
Java est un langage multiplateforme. Un étudiant peut utiliser son Mac, un autre son PC et un autre son étudiant Unix. Le même code fera la même chose. Pensez à la facilité avec laquelle l'enseignant et le service informatique de l'école peuvent le prendre en charge.
C'était la vraie importance de Java quand il est sorti. La blague était "Code une fois, déboguer partout", mais cela élimine vraiment le matériel et les systèmes d'exploitation de l'équation.
J'ai entendu des professeurs dire qu'ils utilisent Java pour enseigner parce que:
Personnellement, je suis content d'avoir pris CS à Berkeley quand ils ont utilisé Scheme pour enseigner. Même si je n'ai réalisé à quel point une langue était élégante que quelques années plus tard.
Un peu d'histoire
J'ai suivi le seul cours Java offert dans notre école. C'était de la fin des années 90 au début de l'an 2000. Java était en pleine croissance mais n'avait presque pas décollé. Venant de beaucoup de développement en C, j'étais un peu frustré par tout le code passe-partout nécessaire pour que Java soit opérationnel. Je ne pouvais pas me concentrer sur ma tâche. Je ne pouvais pas simplement ouvrir un fichier avec "open". J'ai dû définir la classe puis les importations, etc., etc.
J'étais ingénieur en informatique, j'ai donc d'abord pris la programmation d'assemblage, puis C puis C ++, Scheme et ce cours Java. C'était surtout un programme scolaire orienté C. La classe d'algorithmes a été enseignée en utilisant C.
Quand je suis entré dans l'industrie, Java était clairement le joueur dominant. C'était peut-être le seul acteur lors de la conversion des systèmes COBOL principaux vers les applications commerciales Web Java. Java a fait d'énormes progrès dans le monde des affaires au début des 2000 jours.
En même temps, je ne connaissais pas tous les frameworks Java mais je savais coder et m'adapter à l'environnement Java. Si j'avais suivi des cours de formation sur les bonnes normes de codage Java, j'aurais probablement pu commencer avec un meilleur style Java ou une meilleure connaissance de l'écosystème Java.
Rétrospectivement, je ne pense pas que ce soit important.
Pour répondre à votre question: Pourquoi étudions-nous Java à l'université?
Java doit être enseigné mais pas utilisé dans tous les cours:
Vous devriez apprendre Java à un moment donné au collège si vous apprenez l'informatique. Il est populaire dans le monde des affaires. Vous devriez apprendre Java et peut-être C #. Je ne voudrais pas ABSOLUMENT ne pas enseigner Java comme cours de programmation d'introduction. Et Java ne devrait certainement pas être la langue principale utilisée dans tous les cours.
Sur la critique Java:
Java reçoit beaucoup de critiques et il l'a toujours fait. J'ai lu des magazines Java qui mentionnent Java avec un point d'interrogation "Java est-il prêt pour l'entreprise?". La plate-forme Java est toujours une plate-forme largement utilisée. Mais, pour la plupart des tâches de programmation générales, Java fonctionne bien. Et il n'y a pas de problème majeur avec Java. Cela ne nuira pas à vos compétences. Cela pourrait se produire si vous vous contentez des bibliothèques Java sans savoir ce qui se passe en dessous. Mais Java ne cause aucun type de lésions cérébrales (certains développeurs pensent que cela est vrai).
De plus, pourquoi les développeurs n'attaquent-ils pas C ou C ++? Ou au moins C ++. Les paradigmes de programmation impératifs sont très similaires. Et je n'envisagerais jamais d'écrire une webapp en C ++ mais je pourrais le faire avec Java.
Voici comment je mettrais en place un curriculum:
Les langues que j'ai énumérées dans mon programme sont assez courantes. De nombreuses écoles enseignent plusieurs langues sans problème. Dans l'industrie, vous utiliserez de nombreux langages de programmation différents. Vous utiliserez des langues dont vous n'avez même pas entendu parler.
Le sujet de Java dans les écoles n'est pas un problème, sauf s'ils veulent complètement vous protéger de Java ou s'ils veulent enseigner UNIQUEMENT Java. Dans les deux cas, les écoles sont injustifiées.
(Désolé Ruby lang)
Désolé, longue réponse ennuyeuse uniquement:
(1) Vouliez-vous dire:
"Pourquoi étudions-nous Java à l'université, comme premier langage de programmation?"
(2) Ou voulez-vous dire:
"Pourquoi étudions-nous Java à l'université de toute façon, même si nous apprenons d'autres langages de programmation, avant Java?"
On dirait que vous pensez vraiment aux deux questions.
En cas de (1):
Je ne pense pas que Java (ou .NET C # et Visual Basic) devrait être enseigné comme premiers langages de programmation. Pascal structuré et modulaire devrait être le premier, même s'il semble ancien et obsolète.
Beaucoup de gens pensent que nous devrions enseigner aux gens la programmation orientée objet ou la programmation fonctionnelle immédiatement, simplement à cause de son «battage médiatique» ou de sa «tendance».
J'apprends Pascal structuré comme une petite version de la "programmation orientée objet", pas comme quelque chose de similaire. Je vois un programme structuré comme un seul petit objet.
Après cela, je suggère de continuer les langages fonctionnels et Object Pascal.
Et plus tard, C, C ++, C #, VB.Net, Java.
Les principales raisons pour lesquelles je n'aime pas Java ou C #, en tant que premier langage de programmation, c'est qu'ils ont des concepts de "pointeurs", "pointeurs vers des objets" et "objets" eux-mêmes ("références").
Je crois que les étudiants devraient avoir à l'esprit les différences et les similitudes entre ces concepts. La comparaison des objets Strings en Java est un bon exemple de cette odditie:
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
En cas de (2):
Je pense que Java ou C # devraient être enseignés à l'école, car ils ont plusieurs bonnes fonctionnalités mises à jour et en même temps, ils ont une utilisation réelle.
Vous devriez apprendre Java à un moment donné au collège si vous apprenez l'informatique. Il est populaire dans le monde des affaires. Vous devriez apprendre Java et peut-être C #. Je ne voudrais pas ABSOLUMENT ne pas enseigner Java comme cours de programmation d'introduction. Et Java ne devrait certainement pas être la langue principale utilisée dans tous les cours.
Je ne peux pas être plus en désaccord. Java était le langage de mon collège que vous deviez suivre pour entrer dans le programme CS&E de mon école. Java est extrêmement facile à enseigner. Parce que vous pouvez vous limiter à certains concepts que les "non-programmeurs" peuvent apprendre.
Je ne peux pas non plus dire si vous enseigneriez ou non ABSOLUMENT Java à un cours de programmation d'introduction. Vous avez essentiellement dit que vous ne l'enseigneriez PAS ABSOLUMENT ?
La raison simple a déjà été expliquée. Java n'a aucun frais de licence. Vous pouvez l'enseigner à l'aide d'un éditeur de test de base. Son utilisé pour les mauvaises raisons certainement.
Je ne suis pas d'accord avec une réponse précédente, selon laquelle Java n'a pas rendu les élèves plus «stupides», cela montre vraiment quand ils ont des problèmes avec des concepts vraiment simples comme les tableaux et les listes en C ++.
Le passage de C à Java s'est produit au mauvais moment .
Quelque part vers l'an 2000. J'étais dans la dernière classe C de mon université.
C ++ avait trop de fonctionnalités pour ne pas confondre un novice. (Et c'est toujours le cas. Et prévoit d'en ajouter.)
.NET n'était pas assez mature et était encore plus cher qu'aujourd'hui.
L'objectif C était ancien et son utilisation par Apple volait sous le radar (il n'y avait pas d'iPhone autour)
Je me sens obligé d'ajouter aux réponses ici car je ne vois vraiment aucune de ces réponses couvrant réellement mon point de vue.
Je suis un programmeur amateur. J'étais bien en avance sur la courbe en ce qui concerne les «ordinateurs» et la «programmation». J'ai terminé mes études de premier cycle - Licences - en 2007 et Masters environ deux ans plus tard - 2009. J'ai travaillé avec une pléthore de langages, notamment Assembly, QuickBASIC, C, C ++, Java, PHP, Perl, Python, BASH Scripts, Javascript, COBOL, etc. .
À mon humble avis, le langage utilisé pour enseigner la programmation aux étudiants est un indicateur de l'époque dans laquelle nous vivons actuellement. Par exemple, dans les années 1980, l'assemblage était le langage de bas niveau tandis que le C était considéré comme un langage de haut niveau.
Au cours des années 1990, C ++, Java, Perl et de tels langages ont gagné en importance principalement parce que le niveau était beaucoup plus élevé que C et incorporaient des principes de développement rapide. Ils ont donc cessé d'enseigner l'assemblage aux étudiants CS et ont enseigné le C comme moyen d'exprimer des algorithmes. Lentement, cela a changé au cours de la dernière décennie, où C est considéré comme un langage de bas niveau pour capturer l'essence des algorithmes de manière efficace et sans trop de savoir-faire des «systèmes». Ceci est en fait extrêmement important car l'objectif d'un programme CS devrait être plus «théorique» que pratique et chaque fois que quelqu'un veut écrire un algorithme, s'il / elle s'embourbe avec les allocations de mémoire et l'arithmétique des pointeurs, alors vous n'obtiendrez pas nulle part.
Même aujourd'hui, si vous êtes dans un programme de Master CS, vous devrez remplir certaines exigences `` Systèmes '' (au moins aux États-Unis et cela ne devrait pas être très différent pour les universités américaines), ce qui nécessite que les étudiants soient en mesure de programmer des applications de niveau système et dans certains cas, aussi profond que le piratage au niveau du noyau pour réellement répondre aux exigences. Ainsi, bien que le C ne soit pas la langue de facto enseignée dans les écoles, il est pertinent si vous souhaitez vous spécialiser dans les systèmes ou le calcul haute performance ou de telles niches.
Je voudrais également mentionner un autre point: le C nécessite beaucoup de discipline pour bien faire les choses tandis que les langages tels que Java sont un peu détendus face à de telles contraintes. Cela facilite la conduite des cours sans que les RA / TA ne lancent GDB pour déboguer le programme d'un étudiant :)
Je pense que c'est en grande partie ce qui est utilisé dans l'industrie.
Mon programme CS avait un conseil consultatif industriel, composé de cadres supérieurs d'entreprises locales de technologie et d'aérospatiale, et ils avaient beaucoup à dire sur le programme. Les classes d'introduction CS ont abandonné Pascal en faveur de C l'année où j'ai commencé (1986), en grande partie à la demande de l'IAB. De même, il y a eu un effort pour enseigner l'Ada dans certains des cours de niveau supérieur, car les entreprises aérospatiales locales devaient l'utiliser pour le travail du DoD.
Java est désormais omniprésent, surtout maintenant que les appareils Android décollent. Ça craint d'un point de vue didactique, mais ensuite, C.
Parce qu'ils espèrent que moins d'étudiants échoueront au cours, ce qui est un échec en soi, à mon humble avis. Peut-être l'une des raisons pour lesquelles presque plus personne ne prend les diplômes universitaires au sérieux, du moins ici.
Java est un langage trop simple et n'enseigne pas que le PC a un paradigme de ressources limitées. Alors qu'en même temps, il y a «rien qui ne peut être résolu avec une autre couche d'abstraction».
Oui, c'est bon pour les concepts de POO et les problèmes de jouets, mais cela apprend à aborder les problèmes sous le mauvais angle. Utilisez une construction soignée ici, vissez le reste.
Mais le monde universitaire est connu pour rêver d'IA, de OWL et d'autres technologies de jouets. Alors qu'ils continuent à rechercher de telles choses, parfois, quelqu'un invente quelque chose d'incroyable là aussi, mais si vous voulez être un bon développeur, vous devez l'apprendre de manière indépendante.