Je suis en train de m'inscrire à l'école pour obtenir un diplôme CS. L'école que je regarde propose en fait à la fois Java et C ++ pour les cours d'introduction au développement de logiciels (programmation orientée objet, modèles de conception, ce genre de choses). C'est l'étudiant qui choisit la piste à suivre, mais il n'y a que le temps d'en suivre une.
Sachant ce que vous savez maintenant, si vous aviez le choix, établiriez-vous votre base de programme CS en Java ou C ++?
Mon débat actuel ressemble actuellement à ceci:
Un bon ami (qui a un doctorat en IA) vante Java comme le meilleur choix indépendamment de ce que je fais, ne serait-ce que pour ouvrir plus de possibilités d'emploi plus tard, bien qu'il puisse être biaisé puisque tout son travail a été à Java (il J'adore ça). J'habite dans la région de Boston, MA, USA et je vois une quantité égale de travail Java et C.
D'un autre côté, bien que je ne sois pas encore tout à fait d'accord sur ce que je veux faire avec le degré quand j'ai terminé, ma préférence serait de développer pour le Mac, ce que je fais maintenant, bien que dans une capacité limitée. À cette fin, je reçois déjà une exposition limitée au C ++, mais je n'en ai pas eu avec Java, et en regardant mes projets dans mon travail de jour, je ne vois pas la nécessité de l'utiliser de sitôt, "bientôt" mesuré d'au moins deux ans.
Je devrais probablement noter que je suis un adulte qui retourne à l'école après 20 ans (je n'ai actuellement aucun diplôme), donc je cherche à maximiser les opportunités et le temps passé du mieux que je peux. Je penche en quelque sorte vers le C ++ mais je suis toujours ambivalent, et quelques conseils objectifs extérieurs pourraient aider ici.
Ou je pourrais juste y penser trop dur.
MISE À JOUR: Il s'avère que la sélection de la langue n'était pas aussi claire que je l'avais initialement supposé. Alors que quelques cours de base se sont concentrés sur Java, certains des autres cours de base fonctionnent principalement en C et en Java, mais aussi quelques autres pour faire bonne mesure. En fait, le reste de mon semestre sera en Objective-C après avoir passé du temps en Java et Javascript. Le semestre dernier, C, Javascript et PHP, ainsi que quelques autres ont été ajoutés en tant que devoirs requis. Étant donné que les choses étaient à peu près réparties dans le milieu et que j'obtiens toujours des réponses à cela, j'essaie maintenant de travailler mon programme de manière à répondre à toutes les exigences du diplôme, mais à absorber autant de langues que je peux raisonnablement gérer. . Jusqu'à présent, mes notes n'ont pas souffert en essayant de le faire.
Réponses:
Je choisirais personnellement C ++ car il vous donnera un aperçu du fonctionnement de certaines parties de Java sous le capot (pointeurs par exemple). Passer à Java à partir de C ++ est assez trivial, alors que le déplacement dans l'autre sens est sans doute plus difficile.
La chose vraiment difficile à propos de l'écosystème Java est son grand nombre de frameworks, bibliothèques, etc. - il est peu probable qu'ils couvrent tout cela à l'Université de toute façon.
A la fin de la journée , il ne va pas à la matière que beaucoup la langue que vous choisissez, aussi longtemps que vous apprenez les principes.
Mon JUG va me tuer pour avoir approuvé C ++ ;-)
la source
Je dois être en désaccord avec la plupart des gens qui préconisent Java ici. L'apprentissage du C ++, même si vous n'avez pas étudié l'architecture des ordinateurs et des microprocesseurs, vous donne tellement de précieuses informations sur le fonctionnement et le fonctionnement des programmes informatiques.
Nota bene, je ne préconise PAS que vous ne devriez pas apprendre Java (mieux encore, C #) car ce sont des langages de développement d'applications modernes et rapides et d'énormes frameworks ont été construits autour d'eux vous donnant accès à de nombreuses fonctionnalités "gratuites", comme accès aux fichiers abstraits et similaires, mais un véritable ingénieur logiciel devrait connaître au moins un certain C ++, C ou au moins assembleur, car c'est ce qui vous sépare des types script-kiddie.
Une fois que vous maîtrisez raisonnablement le C ++, que vous maîtrisez la gestion de la mémoire et le STL, choisir Java / C # devrait être un jeu d'enfant.
la source
Les écoles et les universitaires qui préconisent Java comme premier choix devraient faire examiner leur tête (ou simplement trouver un vrai travail.) Je dis cela en tant que personne qui a fait à la fois le développement d'applications et de systèmes en Java au cours des 12 dernières années. Java est un langage atroce pour l'enseignement.
La raison en est la suivante: sauf les surdoués, la plupart des élèves peuvent (et ne le feront probablement jamais) saisir l'orientation des objets sans comprendre la programmation modulaire. Et ils ne peuvent pas comprendre la programmation modulaire sans d'abord comprendre la programmation structurée dans un langage procédural. Clair et simple. Le témoignage de cela (entre autres choses) est que même si nous connaissons l'OO depuis 3-4 décennies maintenant, les gens écrivent toujours des hyper-spaghettis dans la pratique.
De plus, une personne qui s'appuie uniquement sur un langage basé sur gc (que ce soit Java ou .NET) ne peut jamais vraiment se rapprocher du matériel. À moins que votre ambition ne soit de créer des pages Web dynamiques, devinez quoi? Vous devez être à l'aise pour vous rapprocher de la langue.
Vous allez dans une école CS pour devenir un informaticien et un programmeur complet (espérons-le avec quelques heures de crédit de pratique en programmation dans de nombreux langages de programmation.) Si vous ne connaissez que Java (ou .NET ou C ou Python peu importe) alors vous êtes un "programmeur Java" (pas un programmeur qui peut travailler sur Java, mais un "programmeur Java"). Et cela a autant de sens que de dire que vous êtes un "menuisier marteau" ou un "mécanicien de tournevis Phillip", n'est-ce pas?
Une bonne école vous exposera au C (ou à un autre langage procédural comme Pascal ou Ada), puis au C ++ et à un assemblage, vous permettant d'apprendre Java par vous-même tout en poursuivant des cours de synthèse de projet pendant votre année junior / senior. En outre, il devrait vous fournir une exposition aux langages fonctionnels afin que vous compreniez le concept de passage de blocs de calcul en tant qu'arguments, de calculs libres d'effets secondaires, de transparence de l'emplacement et similaires (qui ont de réelles applications pratiques, même sur le Web.)
Vous devez savoir ce qu'est un défaut de segmentation. Vous devez savoir ce que la pagination, la mémoire virtuelle et toutes ces conneries signifient. Vous devez savoir comment décomposer les problèmes dans les modules (qu'ils soient procéduraux et basés sur OO). Vous devez savoir comment les systèmes OO sont réellement mis en œuvre sous le capot (afin d'en connaître le coût.) Vous devez savoir où l'abstraction OO se brise (et ils le font parce que le monde et les problèmes complexes ne sont pas nécessairement orientés objet.)
Vous avez besoin de tout savoir pour devenir un informaticien complet, capable de travailler soit en entreprise, soit à très bas niveau en implémentant des choses au niveau du système, que ce soit pour le secteur commercial ou le secteur public, à grande ou à petite échelle. échelle.
Les universitaires qui ont fait pression pour que Java soit le seul et unique langage à les gouverner ne savent absolument pas ce dont l'industrie a vraiment besoin. Aucune idée. Impardonnable sans aucune idée. C'est ce qui arrive quand ils travaillent sur des tours d'ivoire en regardant l'industrie à distance.
Ils ont transformé les départements d'informatique en écoles professionnelles coûteuses de 4 ans, produisant des poneys à un langage de programmation. Et cela pourrait être pardonnable s'ils pouvaient au moins enseigner aux étudiants des compétences de base en affaires / entreprise / organisation (c'est-à-dire abandonner la façade CS et adopter un programme MIS). à l'industrie, à l'économie et finalement aux étudiants.
Je vous suggère de lire l'article de Joel Spolsky sur "Java Schools".
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
En résumé, s'ils ne vous enseignent pas un langage de programmation procédurale (que ce soit un langage industriel comme C ou Ada ou un assez bon pour enseigner comme Pascal), et ils vous donnent si C ++ (si vous avez de la chance) ou Java / C # (si vous n'avez pas de chance), je chercherais une autre école. Clair et simple, d'un gars qui utilise Java pour vivre dans le monde réel depuis un bon moment.
la source
Je pense que cela dépend beaucoup de votre personnalité. Au moins de mon point de vue, Java et C ++ ont des orientations radicalement différentes qui font appel à des types de personnes sensiblement différents.
Quand vous y arrivez, Java est vraiment surtout une grande bibliothèque de classes, avec suffisamment de langage pour pouvoir instancier des objets et invoquer des méthodes à partir de cette bibliothèque. "Apprendre Java" consiste, en grande partie, à mémoriser (ou du moins à prendre conscience de) ce qui se trouve dans la bibliothèque et comment elle est organisée, afin que vous puissiez trouver les choses que vous voulez quand vous les voulez.
C ++ met beaucoup moins l'accent sur la fourniture de code pré-écrit. Bien qu'elle comprenne une bibliothèque (STL 1 ), cette bibliothèque concerne moins le code inclus que le style et l'ensemble de principes. Il est tout à fait possible d'écrire du code clairement et facilement reconnaissable en tant que code "STL", même s'il n'utilise que peu ou pas du tout de code pré-écrit.
Il existe également une différence assez importante dans la façon dont les langues sont utilisées. Java a mis l'accent sur la simplicité du langage. Cela facilite la création d'outils qui manipulent le code Java de diverses manières (par exemple, pour la refactorisation). Cela signifie également que vous avez généralement besoin d' outils capables de le faire, car le refactoring implique souvent des modifications assez importantes de grandes quantités de code.
Le C ++ est un langage beaucoup plus complexe, ce qui signifie (entre autres) que la création d'outils pour manipuler le code source C ++ est extrêmement plus difficile que pour Java. L'équilibre est qu'il est beaucoup moins nécessaire - un travail de refactorisation qui pourrait impliquer des centaines de modifications de dizaines de fichiers en Java pourrait être accompli en (par exemple) en modifiant un seul paramètre de modèle en C ++.
Java met beaucoup plus l'accent sur la facilité d'apprentissage. C ++ met beaucoup plus l'accent sur la facilité d'utilisation - 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 d'avoir une idée de ce à quoi s'attendre de chacun et de se regarder honnêtement pour déterminer ce qui vous convient le mieux.
1 Oui, je sais que ce n'est pas vraiment exact, mais j'essaie d'éviter que cela ne se transforme en livre ...
la source
Je ne peux pas croire que les gens préconisent le C ++ comme première langue! Vous passerez la majeure partie de votre temps à écrire une plaque de chaudière et à essayer de contourner les limites et les hameçons dans la langue plutôt que d'apprendre à programmer.
Java est un langage beaucoup plus simple et ne gênera pas votre apprentissage.
Si vous devez apprendre le C ++, apprenez les concepts avec Java puis passez au C ++, ou mieux encore, OBJ-C si vous voulez écrire un logiciel Mac. Java et OBJ-C ne sont pas trop différents.
Pour info j'ai passé 10 ans en tant que développeur commercial C ++.
la source
Je recommanderais C ++. J'ai eu quelques cours en Java et certains en C ++ au collège, et les compétences spécifiques au langage que j'ai apprises du C ++ m'ont aidé davantage lors de l'apprentissage de langues supplémentaires plus tard. De plus, bien que je vois beaucoup plus d'offres d'emploi Java que C ++, la plupart recherchent une pile Java complète, comme:
Et les chances sont qu'un programme basé sur Java ne vous préparera pas beaucoup mieux qu'un programme basé sur C ++ contre une liste comme ça.
la source
C'est difficile car Java est indéniablement plus facile à apprendre. Vous ferez plus tôt avec Java.
Le C ++ est un langage beaucoup plus difficile à utiliser. Les pointeurs et la gestion de la mémoire sont conceptuellement et pratiquement difficiles à utiliser. C ++ ne vous offre aucun filet de sécurité.
À long terme, il serait utile de comprendre tout ce que le C ++ vous enseigne. De plus, la transition de C ++ à Java est beaucoup plus facile que dans l'autre sens.
Mais je me demande si lors du démarrage et pendant de nombreux projets de diplôme, les frais supplémentaires et le débogage que vous devez faire pour que quelque chose fonctionne en C ++ rendraient vos projets plus difficiles, vos délais plus difficiles à respecter et votre vie beaucoup plus frustrante. . Pour réaliser la même chose en C ++ et Java, je dirais que dans presque tous les cas, vous obtiendrez un travail plus rapide en Java et rencontrerez moins de problèmes ennuyeux. Cela pourrait être un gros problème lorsque vous êtes à la fin d'un semestre et que cinq cours ont besoin de leur projet de fin de cours le même jour.
L'autre côté de cela est que si ces essais ne vous obligent pas à jeter l'éponge, ils feront de vous un meilleur programmeur si vous maîtrisez le C ++. Et si votre carrière est en C # ou Java ou python et que vous n'avez jamais à toucher à un autre pointeur de votre vie, vous l'apprécierez beaucoup plus ...
la source
Le C ++ est le plus flexible et offre une compréhension plus approfondie. Incontestablement, vous gagnerez plus en C ++ qu'en Java. C ++ est également plus difficile, car il est plus complexe.
Cela dit, les travaux C ++ ne sont pas aussi courants que les travaux Java.
Java et son descendant, C #, sont les solutions standard pour l'espace de codage Big-Iron d'entreprise / entreprise. Je recommande fortement d'apprendre l'une des deux au cours de votre deuxième année et d'être très à l'aise avec celle-ci au moment où vous terminez votre diplôme. Cela vous permettra d'obtenir des emplois beaucoup plus facilement. Cela ne signifie pas que je pense que ces emplois présentent en moyenne un intérêt intellectuel important. J'ai récemment fait un tour dans les emplois de logiciels de craigslist dans les Rocheuses et la plupart des emplois étaient C # / Java et liés à ce qu'on appelle les logiciels " CRUD "; OMI c'est très ennuyeux.
la source
Ayant enseigné le C ++ et Java au niveau collégial, je recommanderais fortement Java .
Java assiste 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 graphique en une phrase, en utilisant les bibliothèques intégrées disponibles dans chaque installation Java et qui correspondent à tous les tutoriels que les étudiants trouvent dans une recherche Google, est crucial pour aider les étudiants à dépasser le langage et à commencer à comprendre les concepts de programmation .
Les IDE pour Java prennent en charge les étudiants débutants et continus. L'intégration précoce d'outils de refactorisation puissants (tout en discutant de la POO, par exemple) aidera les élèves à écrire du code maintenable.
Alors que C ++ est un langage utile à connaître, les concepts supplémentaires appris en C ++ ne valent pas vraiment l'effort supplémentaire du langage dans son ensemble. Il existe un large ensemble supplémentaire de "gotchas" qui doivent être enseignés et qui peuvent être introduits ultérieurement (problèmes de gestion de la mémoire et débordements de tampon pour en nommer un couple). Obliger les étudiants à les comprendre avant de passer à des concepts tels que la complexité algorithmique et l'héritage vous ralentit, la manière exigeant qu'un conducteur comprenne la pression des pneus avant de conduire ralentirait l'Ed. Du conducteur. Bien sûr, vous devez le savoir. Mais il vous suffit de le savoir comme quelque chose que vous vous tromperez un jour, et non comme un élément constitutif d'un concept plus vaste.
la source
Je pense que la plus grande question à vous poser est de savoir si vous voulez être un bon programmeur ou vous concentrer sur l'informatique. Si CS est votre objectif et que vous souhaitez suivre un itinéraire PHD, Java est peut-être la voie à suivre. Java fournit les classes de collections Java, qui contiennent de nombreuses structures de données et algorithmes prédéfinis. L'avantage est double: tout d'abord, vous pouvez jouer avec les structures de données et les algorithmes pour voir ce qu'ils font avant de vous soucier de la façon dont ils ont été construits. Deuxièmement, cela donne aux professeurs plus d'occasions d'enseigner les principes de CS qui utilisent des structures de données sans avoir à se soucier des moindres détails. Plus tard, ils peuvent revenir en arrière et demander à leurs élèves de créer les structures à partir de zéro.
C ++ d'autre part est un langage de niveau inférieur. Il vous oblige à considérer les pointeurs et la récupération de place. La courbe d'apprentissage est un peu plus abrupte, mais au final, lorsque vous vous retrouverez sur la programmation avec des cadres externes, vous vous sentirez moins comme si vous dépendiez simplement de la magie cachée. En outre, de nombreuses grandes entreprises utilisent encore C ++. Il est plus difficile de passer de Java à C ++ qu'à C ++ à Java.
la source