it-swarm-fr.com

Java ou C ++ pour les cours de CS universitaires?

Je suis en train de me faire inscrire à l'école pour obtenir un diplôme CS. L'école que je cherche offre en fait des offres Java et C++ - basées sur les cours de développement de logiciels d'introduction (programmation orientée objet, modèles de conception, ce type de chose). C'est le choix de l'étudiant qui suive de suivre, mais il n'y a que le temps de suivre une.

Savoir ce que vous savez maintenant, si vous aviez le choix, alliez-vous jeter votre base de curriculum CS en Java ou C++ ?

Mon débat actuel ressemble actuellement à ceci:

Un bon ami (qui a un doctorat en Ai) est tout à savoir Java comme meilleur choix, quel que soit ce que je fais, si seulement pour ouvrir plus de possibilités d'emploi plus tard, bien qu'il puisse être biaisé depuis tout de son travail a été dans Java (il l'aime). Je vis dans la région de Boston, MA, USA et je vois une quantité égale de Java et C travail.

Sur le côté retournement, bien que je n'ai pas encore encore été réglé sur ce que je veux faire avec le diplôme lorsque j'aurai fini, ma préférence serait de se développer pour le Mac, que je fais maintenant, même si elle est limitée. À cette fin, je reçois déjà une exposition limitée à C++, mais j'en ai eu aucune avec Java et je regarde mes projets à mon travail de jour, je ne vois pas de besoin de l'utiliser à tout moment, "bientôt" mesuré d'au moins deux ans.

Je devrais probablement noter que je suis un adulte retour à l'école après 20 ans (j'ai actuellement Non degré de tout type) Je cherche donc à maximiser l'opportunité et le temps passé de la meilleure Je peux. Je suis un peu penché en direction de C++, mais je suis toujours ambivalent, et à l'extérieur, des conseils objectifs aideraient ici.

Ou je pouvais juste penser trop fort à ce sujet.

Mise à jour : Il s'avère que la sélection de la langue n'était pas si claire, car je suppose initialement. Bien que quelques cours de base se soient concentrés sur Java, certains autres cours de base fonctionnent principalement dans C et Java, mais aussi quelques autres ont jeté une bonne mesure. En fait, mon reste de mon semestre va être dans l'objectif-C après avoir passé du temps dans Java et JavaScript. Le dernier semestre était C, JavaScript et PHP, plus quelques autres ont été lancés dans missions requises. Puisque les choses étaient à peu près divisées dans l'ensemble du milieu, et je reçois toujours des réponses à cela, j'essaie maintenant de travailler mon curriculum tel que je réponds à toutes les exigences pour le diplôme, mais d'absorber autant de langues que je Peut raisonnablement gérer. Jusqu'à présent, mes notes n'ont pas souffert d'essayer de faire cela.

11
Philip Regan

J'irais personnellement avec C++, car cela vous donnera des informations sur la manière dont les parties de Java fonctionnent sous la hotte (pointeurs par exemple). Déménagement sur Java de C++ est assez trivial, alors que la déplacement de l'inverse est sans doute plus difficile.

La chose vraiment difficile à propos du Java Eco-System est un grand nombre de cadres, de bibliothèques, etc. - ils sont peu susceptibles de couvrir tout cela à l'université de toute façon.

À la fin de la journée, cela ne va pas d'affaire Ça Beaucoup de la langue que vous choisissez, tant que vous apprenez les principes.

Ma pichet va me tuer pour avoir approuvé C++ ;-)

51
Martijn Verburg

Je dois être en désaccord avec la plupart des gens préconisant Java ici. Apprendre C++, même si vous n'avez pas étudié l'architecture d'ordinateur et de microprocesseur, vous donne tellement d'informations inestimables dans la manière dont les programmes informatiques fonctionnent et fonctionnent.

Nota bene, je suis ne pas préconiser Vous ne devriez pas apprendre Java (mieux encore, C #) Parce que ceux-ci sont des langues modernes et de développement d'applications rapides et d'énormes cadres ont été Construit autour d'eux vous permettant d'accéder à beaucoup de fonctionnalités "libres", telles que l'accès à fichier abstrait et similaire, mais un véritable ingénieur logiciel doit connaître au moins certains C++, C ou au moins assembler, car c'est ce qui vous sépare du script-kiddie les types.

Une fois que vous êtes raisonnablement compétent avec C++, confiants avec la gestion de la mémoire et STL, la prise en charge Java/C # devrait être une brise.

18
Jas

Les écoles et les érudits qui avocatent Java Comme le premier choix devrait avoir la tête examiné (ou simplement obtenir un véritable emploi là-bas.) Je dis cela comme une personne qui a fait à la fois l'application et le développement du système dans Java Pour les 12 dernières années. Java est une langue atroceuse pour l'enseignement.

La raison est la suivante: sauf la personne douée, la plupart des étudiants peuvent (et seront probablement jamais) saisir l'orientation objet sans comprendre la programmation modulaire. Et ils ne peuvent pas comprendre la programmation modulaire sans la première compréhension de la programmation structurée dans une langue de procédure. Plain et simple. Testament de cela (entre autres) est que même si nous avons connu OO pendant 3 à 4 décennies maintenant, les gens écrivent toujours des hyper-spaghettis dans la pratique.

En outre, une personne s'appuie uniquement sur une langue basée sur GC (que ce soit Java ou .NET) ne peut jamais vraiment se rapprocher du matériel. À moins que toute votre ambition soit de faire des pages Web dynamiques, devinez quoi? Vous devez être à l'aise avec vous approcher de la langue.

Vous allez dans une école CS pour devenir un scientifique et un programmeur informatisé bien équilibré (espérons-le avec de nombreuses heures de crédit de pratiques de programmation pratique dans de nombreuses langues de programmation.) Si vous êtes tout ce que vous savez, c'est Java ( Ou .net ou c ou Python quoi que ce soit), vous êtes un "programmeur Java" (pas un programmeur capable de travailler sur Java, mais un "programmeur Java"). Et cela a le plus de sens que de dire que vous êtes un "charpentier de marteau" ou un "mécanicien à vis à vis phillip", n'est-ce pas.

Une bonne école vous exposera à C (ou à un autre langage procédural comme Pascal ou ADA), puis C++ et un assemblage, vous laissant apprendre Java vous-même que vous recherchez des cours de Capstone de projet sur votre Junior/Année senior. En outre, il devrait vous fournir une exposition aux langues fonctionnelles afin de comprendre le concept de transmission de blocs de calcul comme des arguments, des calculs libres d'effet latéral, une transparence de l'emplacement et similaires (qui ont des applications pratiques réelles, même sur le Web.)

Vous devez savoir ce qu'est un segfault. Vous devez savoir quelle pagination, la mémoire virtuelle et toute cette merde signifient. Vous devez savoir comment décomposer les problèmes de modules (qu'ils soient de procédure et de bassin oo). Vous devez savoir comment OO _ systèmes sont vraiment implémentés sous la hotte (afin que vous sachiez le coût.) Vous devez savoir où OO abstraction pause (et ils font parce que le monde et Des problèmes complexes ne sont pas nécessairement orientés objet.)

Vous devez connaître toutes ces choses afin que vous deveniez un scientifique informatique bien équilibré capable de travailler soit sur l'entreprise, soit à la très faible niveau de mise en œuvre du système du système, que ce soit pour le secteur commercial ou le secteur public, à la fois grande taille et petite escalader.

Des universitaires qui poussent pour Java comme langue unique et unique pour les gouverner tous sont totalement désemparés de ce que l'industrie a vraiment besoin. Désemparés. Impardonnable désemparé. C'est ce qui se passe quand ils travaillent sur des tours d'ivoire regardant l'industrie à distance.

Ils ont transformé des départements de sciences informatiques en écoles professionnelles coûteuses de 4 ans en train d'annuler des poneys d'une émission de langues-émissions. Et cela pourrait être pardable s'ils pouvaient au moins enseigner aux élèves des compétences d'entreprise/entreprise/organisationnelles (c'est-à-dire abandonner la façade du CS et adopter un programme d'études.) Mais ils ne font même pas cela, ce que je pense que c'est un grand mauvais service à l'industrie, à l'économie et en fin de compte des étudiants.

Je vous suggérerais de lire Joel Spolsky 'Piece sur "Java Schools".

http://www.joelonsoftware.com/articles/theperilsofjavaschools.html

En résumé, s'ils ne vous apprennent pas un langage de programmation procédural (que ce soit industriel tel que C ou ADA ou une personne suffisamment bonne pour enseigner comme Pascal), et ils vous donnent si C++ (si vous avez de la chance) ou Java/C # (Si vous êtes malchanceux), je chercherais une autre école. Un simple et simple, d'un gars qui a utilisé Java pour gagner sa vie dans le monde réel pendant un certain temps.

9
luis.espinal

Je pense que beaucoup dépend de votre personnalité. Au moins de mon point de vue, Java et C++ a des orientations radicalement différentes qui font appel à des types de personnes sensiblement différentes.

Lorsque vous y allez, Java== est vraiment surtout une bibliothèque de grande classe, avec une langue suffisante pour pouvoir instantiier des objets et invoquer des méthodes de cette bibliothèque. "Apprendre Java" consiste, dans Une grande partie de la mémorisation (ou du moins de prendre conscience de) Qu'est-ce qui se trouve dans la bibliothèque et comment elle est organisée, vous pouvez donc trouver les choses que vous voulez quand vous les souhaitez.

C++ place beaucoup moins l'accent mis sur la fourniture de code pré-écrit. Bien qu'il s'agisse d'une bibliothèque (STL1), cette bibliothèque est de moins sur le code incluse qu'il s'agit d'un style et d'un ensemble de principes. Il est tout à fait possible d'écrire du code clairement et facilement reconnaissable comme code "stl", même s'il utilise peu ou même aucun du code pré-écrit du tout.

Il existe également une différence assez importante dans la manière dont les langues sont utilisées. Java a mis l'accent sur la langue simple. Cela facilite la construction d'outils qui manipulent Java code de différentes manières (par exemple, pour refactoring) . Cela signifie également que vous avez tendance à besoin des outils pouvant le faire, car le refactoring implique souvent des modifications assez importantes à de grandes quantités de code.

C++ est un beaucoup une langue plus complexe, ce qui signifie (entre autres) que les outils de construction pour manipuler le code source C++ sont énormément plus difficile que pour Java. L'équilibre à cela est qu'il est beaucoup moins nécessaire - un travail de refactorisation qui pourrait impliquer des centaines de modifications apportées à des dizaines de fichiers dans Java peut être accompli par (par exemple) changer un seul paramètre de modèle dans C++.

Java accorde beaucoup plus d'importance à être facile à apprendre. C++ place beaucoup plus d'importance à être facile à utiliser - mais (malheureusement) seulement si vous savez vraiment ce que vous faites.

Je ne vais pas défendre l'un ou l'autre. Mon opinion sur les langues est beaucoup moins pertinente que votre idée d'avoir une idée de ce à quoi attendre de chacun et de prendre un regard honnête sur vous-même pour savoir qui est susceptible de mieux vous convenir.

1Oui, je sais que ce n'est pas vraiment précis, mais j'essaie de garder cela de se transformer en livre ...

4
Jerry Coffin

Je ne peux pas croire que les gens préconisent C++ comme langue maternelle! Vous passerez la majeure partie de votre temps à écrire une plaque de chaudière et à essayer de contourner les limitations et les crochets de poisson dans la langue que d'apprendre à programmer.

Java est une langue beaucoup plus simple et ne sera pas dans la voie de votre apprentissage.

Si vous devez apprendre C++, apprenez les concepts avec Java et ensuite aller à C++ ou mieux encore, obj-C si vous souhaitez écrire un logiciel Mac. Java = et obj-c ne sont pas trop différents.

FYI J'ai passé 10 ans en tant que développeur commercial C++.

3
Henry

C'est difficile parce que Java est indéniablement plus facile à apprendre. Vous allez faire plus tôt avec Java.

C++ est une langue beaucoup plus difficile à travailler. Les pointeurs et la gestion de la mémoire sont conceptuellement et pratiquement délicat pour travailler. C++ ne vous offre pas de filets de sécurité.

À long terme, il serait utile de comprendre toutes les choses que c ++ vous apprend. De plus, la transition de C++ à Java est beaucoup plus facile que l'autre sens.

Mais je me demande si lorsque vous commencez et pendant de nombreux projets de degré, les frais généraux supplémentaires et le débogage que vous devez faire pour obtenir quelque chose de travail en C++ rendraient vos projets plus difficiles, vos délais plus difficiles à rencontrer et votre vie beaucoup plus frustrante . Pour obtenir la même chose en C++ et Java Je dirais que dans presque tous les cas, vous aurez le travail plus rapidement dans Java et rencontrez moins de problèmes ennuyeux . Cela pourrait être une très grosse affaire lorsque vous êtes à la fin d'un semestre et que cinq cours ont besoin de leur objectif de cours le même jour.

De l'autre côté, c'est que si ces essais ne vous causent pas de jeter dans la serviette tout à fait, ils vous feront un meilleur programmeur si vous avez maîtrisé C++. Et si votre carrière est avec c # ou Java ou python et vous n'avez jamais besoin de toucher un autre pointeur dans votre vie, vous apprécierez cela beaucoup plus. ..

2
glenatron

C++ est le plus flexible et offre une plus grande compréhension. Incontestablement, vous gagnerez plus de C++ que de Java. C++ est également plus difficile, car il est plus complexe.

Cela dit, les travaux C++ ne sont pas aussi communs que Java emplois.

Java et son descendant, C #, sont les solutions standard pour l'espace de codage de grand-fer d'entreprise/entreprise. Je recommande vivement d'apprendre l'une des deux de la deuxième année et d'être très à l'aise avec celui-ci à la fin de votre diplôme. Il vous permettra d'obtenir des emplois beaucoup plus facile. Cela ne signifie pas que je pense que ces emplois ont un intérêt intellectuel important en moyenne. J'ai réussi à passer des emplois logiciels CraigsList dans les montagnes Rocky récemment et la plupart des emplois étaient C #/Java et sont liés à ce qui est appelé " [~ # ~ # ~ # ~] " logiciel; Imo c'est très ennuyeux.

2
Paul Nathan

Je recommanderais c ++. J'avais des cours en Java et certains en C++ au collège et les compétences spécifiques à la langue que j'ai apprises de C++ m'ont aidé à apprendre plus tard des langues supplémentaires. De plus, bien que je vois beaucoup plus Java que des ouvertures de travail C++, la plupart recherchent une version complète Java pile, comme:

  • EJB 1.x/2.0, JNDI, JMS, JTA/JTS, RMI, JDBC, Servlets, JSP, SAX/DOM, Services Web, SOAP, WSDL, UDDI, JAXB, JavaMail, WAP, WML, HTML
  • Tomcat, Apache Xalan, Apache Xerces, JSERV, JRUN, JBUILDER, JURNJ, Web Logic 5.x/6.x, WebSphere 3.5/4

Et les chances sont un Java== Curriculum basé ne vous préparera pas beaucoup mieux qu'un c ++ basé sur une liste comme celle-là.

2
Chris

Ayant enseigné à la fois C++ et Java au niveau collégial, je recommanderais fortement Java.

Java assiste dans le processus d'apprentissage et encourage un bon comportement de programmation. Les bibliothèques intégrées pour Java sont utiles et facilement disponibles dans chaque installation. Être capable de créer une application d'interface graphique dans une phrase, en utilisant les bibliothèques intégrées disponibles dans tous Java Installation et correspondant à tous les didacticiels Les élèves trouvent dans une recherche Google, sont essentielles pour aider les élèves à aller au-delà de la langue et à commencer à comprendre les concepts de programmation .

Les IDes pour Java permettent de fournir un soutien aux étudiants débutants et continus. Porter des outils de refactorisation puissants dans la conversation tôt (tout en discutant de l'OOP, par exemple) aidera les étudiants à apprendre à écrire du code de maintenance.

Bien que C++ soit une langue utile de savoir, les concepts supplémentaires appris en C++ ne valent pas vraiment l'effort supplémentaire de la langue dans son ensemble. Il y a un grand ensemble supplémentaire de "gotchas" qui doit être enseigné qui peut être introduit ultérieurement (problèmes de gestion de la mémoire et débordements de tampon pour nommer un couple). Obliger les étudiants à comprendre ceux-ci avant de passer à des concepts tels que la complexité et l'héritage algorithmiques vous ralentissent, la manière dont un conducteur doit comprendre la pression des pneus avant que la conduite ne ralentitait pas le conducteur. Bien sûr, vous devez le savoir. Mais il vous suffit de le savoir comme quelque chose que vous obtiendrez faux un jour, pas comme un bloc de construction d'un concept plus important.

1
Alex Feinman

Je pense que la plus grande question à vous demander est de vous demander de faire un bon programmeur ou de vous concentrer sur l'informatique. Si CS est votre objectif et que vous souhaitez être sur une route de doctorat, alors peut-être Java est la voie à suivre. Java fournit le Java CLASSIONS CLASSES, qui ont beaucoup de structures de données prématurées et d'algorithmes. L'avantage de ceci est Twofold: Tout d'abord, vous devez jouer avec les structures de données et les algorithmes pour voir ce qu'ils font avant de vous inquiéter. Deuxièmement, cela offre aux professeurs la possibilité d'enseigner aux principes CS qui utilisent des structures de données sans avoir à s'inquiéter de la Nitty Gritty. Plus tard, ils peuvent revenir en arrière et avoir leurs élèves créer les structures à partir de zéro.

C++ d'autre part est une langue de niveau inférieure. Cela vous oblige à considérer les pointeurs et la collecte des ordures. La courbe d'apprentissage est un peu plus raide, mais à la fin lorsque vous vous retrouvez sur la circulation de la route avec des cadres externes, vous vous sentirez moins comme si vous comptez simplement sur une magie cachée. De plus, de nombreuses grandes entreprises utilisent toujours C++. Il est plus difficile d'aller de Java à C++ que c ++ à Java.

0
Kavet Kerek