Ich bin gerade dabei, mich in die Schule einzuschreiben, um einen CS-Abschluss zu bekommen. Die Schule, die ich mir anschaue, bietet sowohl Java- als auch C ++ - basierend auf den Einführungskursen zur Softwareentwicklung (objektorientierte Programmierung, Entwurfsmuster usw.) an. Es ist die Wahl des Schülers, welcher Spur er folgen soll, aber es bleibt nur Zeit, einer zu folgen.
Wenn Sie wissen, was Sie jetzt wissen, würden Sie, wenn Sie die Wahl hätten, Ihre CS-Lehrplangrundlage in Java oder C ++ festlegen?
Meine aktuelle Debatte sieht derzeit so aus:
Ein guter Freund (der einen Doktortitel in KI hat) wirbt für Java als die bessere Wahl, unabhängig davon, was ich mache, um später mehr Arbeitsmöglichkeiten zu eröffnen, obwohl er möglicherweise voreingenommen ist, da seine gesamte Arbeit in Java war (er) liebt es). Ich lebe in der Region Boston, MA, USA und sehe gleich viel Java- und C-Arbeit.
Auf der anderen Seite, obwohl ich mich noch nicht ganz entschieden habe, was ich mit dem Abschluss machen möchte, wenn ich fertig bin, würde ich es vorziehen, für den Mac zu entwickeln, was ich jetzt mache, wenn auch in begrenzter Kapazität. Zu diesem Zweck habe ich bereits eine begrenzte Erfahrung mit C ++, aber ich hatte noch keine mit Java, und wenn ich mir meine Projekte bei meiner täglichen Arbeit anschaue, sehe ich keine Notwendigkeit, sie bald zu verwenden, "bald" gemessen um mindestens zwei Jahre.
Ich sollte wahrscheinlich beachten, dass ich ein Erwachsener bin, der nach 20 Jahren wieder zur Schule geht (ich habe derzeit keinen Abschluss), also versuche ich, die Gelegenheit und die Zeit, die ich verbringe, so gut ich kann zu maximieren. Ich neige zu C ++, bin aber immer noch ambivalent, und einige externe, objektive Ratschläge würden hier helfen.
Oder ich könnte einfach zu viel darüber nachdenken.
UPDATE: Es stellte sich heraus, dass die Sprachauswahl nicht so eindeutig war, wie ich ursprünglich vermutet hatte. Während sich einige Kernkurse auf Java konzentrierten, arbeiten einige der anderen Kernkurse hauptsächlich in C und Java, aber auch einige andere, die für ein gutes Maß eingesetzt werden. Tatsächlich wird mein Rest meines Semesters in Objective-C sein, nachdem ich einige Zeit in Java und Javascript verbracht habe. Letztes Semester waren C, Javascript und PHP sowie einige andere, die als erforderliche Aufgaben eingesetzt wurden. Da die Dinge in der Mitte insgesamt ziemlich aufgeteilt waren und ich immer noch Antworten darauf bekomme, versuche ich jetzt, meinen Lehrplan so zu gestalten, dass ich alle Anforderungen für den Abschluss erfülle, aber so viele Sprachen wie möglich aufnehmen kann . Bisher haben meine Noten nicht gelitten, dies zu versuchen.
Antworten:
Ich persönlich würde mich für C ++ entscheiden, da es Ihnen Einblicke in die Funktionsweise von Teilen von Java unter der Haube gibt (z. B. Zeiger). Die Umstellung von C ++ auf Java ist ziemlich trivial, während die Umkehrung wohl schwieriger ist.
Das wirklich Schwierige am Java-Ökosystem ist die große Anzahl von Frameworks, Bibliotheken usw. - es ist unwahrscheinlich, dass sie all das an der Universität abdecken.
Am Ende des Tages wird es nicht so wichtig sein , welche Sprache Sie wählen, solange Sie die Prinzipien lernen.
Mein JUG wird mich umbringen, weil ich C ++ unterstützt habe ;-)
quelle
Ich muss den meisten Leuten widersprechen, die hier Java befürworten. Das Erlernen von C ++ bietet Ihnen so viele wertvolle Einblicke in die Funktionsweise und Funktionsweise von Computerprogrammen, auch wenn Sie noch keine Computer- und Mikroprozessorarchitektur studiert haben.
Nota bene, ich befürworte NICHT, dass Sie Java nicht lernen sollten (noch besser C #), da es sich um moderne, schnelle Anwendungsentwicklungsschritte handelt und riesige Frameworks um sie herum erstellt wurden, die Ihnen Zugriff auf viele "kostenlose" Funktionen wie z abstrahierter Dateizugriff und ähnliches, jedoch sollte ein echter Softwareentwickler mindestens einige C ++ -, C- oder zumindest Assembler-Kenntnisse haben, da dies Sie von den Script-Kiddie-Typen unterscheidet.
Sobald Sie mit C ++ einigermaßen vertraut sind und mit Speicherverwaltung und STL vertraut sind, sollte es ein Kinderspiel sein, Java / C # zu erlernen.
quelle
Schulen und Wissenschaftler, die Java als erste Wahl befürworten, sollten ihre Köpfe untersuchen lassen (oder einfach einen richtigen Job bekommen). Ich sage dies als eine Person, die in den letzten 12 Jahren sowohl Anwendungs- als auch Systementwicklung in Java durchgeführt hat. Java ist eine grausame Unterrichtssprache.
Der Grund ist folgender: Abgesehen von Begabten können (und werden die meisten Schüler wahrscheinlich nie) die Objektorientierung erfassen, ohne die modulare Programmierung zu verstehen. Und sie können modulare Programmierung nicht verstehen, ohne zuerst strukturierte Programmierung in einer prozeduralen Sprache zu verstehen. Schlicht und einfach. Ein Beweis dafür (unter anderem) ist, dass die Menschen, obwohl wir OO seit 3-4 Jahrzehnten kennen, in der Praxis immer noch Hyper-Spaghetti schreiben.
Darüber hinaus kann eine Person, die sich ausschließlich auf eine gc-basierte Sprache verlässt (sei es Java oder .NET), der Hardware nie wirklich nahe kommen. Wissen Sie was, es sei denn, Ihr gesamtes Ziel ist es, dynamische Webseiten zu erstellen? Sie müssen sich mit der Sprache vertraut machen.
Sie besuchen eine CS-Schule, um ein vielseitiger Informatiker und Programmierer zu werden (hoffentlich mit einigen Kreditstunden praktischer Programmierpraxis in vielen Programmiersprachen). Wenn Sie nur Java (oder .NET oder C oder Python was auch immer) dann sind Sie ein "Java-Programmierer" (kein Programmierer, der mit Java arbeiten kann, sondern ein "Java-Programmierer"). Und das macht genauso viel Sinn wie zu sagen, dass Sie ein "Hammerschreiner" oder ein "Phillip-Schraubenziehermechaniker" sind, nicht wahr?
Eine gute Schule setzt Sie C (oder einer anderen prozeduralen Sprache wie Pascal oder Ada), dann C ++ und einer Versammlung aus, sodass Sie Java selbst lernen können, während Sie in Ihrem Junior- / Senior-Jahr Projekt-Schlusssteinkurse absolvieren. Außerdem sollten Sie mit funktionalen Sprachen vertraut gemacht werden, damit Sie das Konzept der Übergabe von Rechenblöcken als Argumente, nebenwirkungsfreie Berechnungen, Standorttransparenz und dergleichen verstehen (die auch im Web echte praktische Anwendungen haben).
Sie müssen wissen, was ein Segfault ist. Sie müssen wissen, was Paging, virtueller Speicher und all dieser Mist bedeuten. Sie müssen wissen, wie Probleme in Modulen zerlegt werden (sei es prozedural und OO-basiert). Sie müssen wissen, wie OO-Systeme wirklich unter der Haube implementiert werden (damit Sie die Kosten kennen). Sie müssen wissen, wo die OO-Abstraktion bricht (und das tun sie, weil die Welt und komplexe Probleme nicht unbedingt objektorientiert sind.)
Sie müssen all diese Dinge kennen, damit Sie ein vielseitiger Informatiker werden, der in der Lage ist, entweder im Unternehmen oder auf sehr niedriger Ebene zu arbeiten und Dinge auf Systemebene zu implementieren, entweder für den kommerziellen oder den öffentlichen Sektor, sowohl für große als auch für kleine Rahmen.
Akademiker, die auf Java als die einzige Sprache gedrängt haben, um sie alle zu regieren, wissen überhaupt nicht, was die Branche wirklich braucht. Ahnungslos. Unverzeihlich ahnungslos. Das passiert, wenn sie an Elfenbeintürmen arbeiten und die Industrie aus der Ferne betrachten.
Sie haben die Informatikabteilungen in teure 4-Jahres-Berufsschulen verwandelt, in denen Ponys mit einer Programmiersprache eingesetzt werden. Und das könnte verzeihlich sein, wenn sie den Schülern zumindest grundlegende geschäftliche / unternehmerische / organisatorische Fähigkeiten beibringen könnten (dh die CS-Fassade verlassen und einen MIS-Lehrplan annehmen). Aber sie tun das nicht einmal, was ich für einen großen Nachteil halte für die Industrie, die Wirtschaft und letztendlich die Studenten.
Ich würde vorschlagen, dass Sie Joel Spolskys Artikel über "Java Schools" lesen.
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Zusammenfassend gesagt, wenn sie Ihnen keine prozedurale Programmiersprache beibringen (sei es eine industrielle wie C oder Ada oder eine, die gut genug ist, um wie Pascal zu unterrichten), und sie geben Ihnen, ob C ++ (wenn Sie Glück haben) oder Java / C # (Wenn Sie Pech haben), würde ich nach einer anderen Schule suchen. Schlicht und einfach, von einem Mann, der Java schon seit einiger Zeit für seinen Lebensunterhalt in der realen Welt verwendet.
quelle
Ich denke, viel hängt von Ihrer Persönlichkeit ab. Zumindest aus meiner Sicht haben Java und C ++ radikal unterschiedliche Ausrichtungen, die wesentlich unterschiedliche Arten von Menschen ansprechen.
Java ist eigentlich meistens eine große Klassenbibliothek mit einer Sprache, die ausreicht, um Objekte zu instanziieren und Methoden aus dieser Bibliothek aufzurufen. "Java lernen" besteht zu einem großen Teil darin, sich zu merken (oder zumindest bewusst zu werden), was sich in der Bibliothek befindet und wie sie organisiert ist, damit Sie die gewünschten Dinge finden können, wenn Sie sie möchten.
C ++ legt viel weniger Wert auf die Bereitstellung von vorab geschriebenem Code. Während es eine Bibliothek (STL 1 ) enthält, geht es in dieser Bibliothek weniger um den enthaltenen Code als um einen Stil und eine Reihe von Prinzipien. Es ist durchaus möglich, Code zu schreiben, der klar und leicht als "STL" -Code erkennbar ist, obwohl nur wenig oder gar kein vorab geschriebener Code verwendet wird.
Es gibt auch einen ziemlich wesentlichen Unterschied in der Verwendung der Sprachen. Java hat großen Wert darauf gelegt, die Sprache einfach zu halten. Dies macht es einfach, Tools zu erstellen, die Java-Code auf verschiedene Arten bearbeiten (z. B. zum Refactoring). Dies bedeutet auch, dass Sie in der Regel Tools benötigen , die dies können, da das Refactoring häufig erhebliche Änderungen an großen Codemengen erfordert.
C ++ ist eine viel komplexere Sprache, die Mittel (unter anderem) , dass Werkzeuge Gebäude C ++ Quellcode zu manipulieren , ist enorm schwieriger als für Java. Das Gleichgewicht dazu ist, dass es viel weniger notwendig ist - ein Refactoring-Job, der Hunderte von Änderungen an Dutzenden von Dateien in Java beinhalten kann, kann durch (zum Beispiel) Ändern eines einzelnen Vorlagenparameters in C ++ erreicht werden.
Java legt viel mehr Wert darauf, leicht zu erlernen. C ++ legt viel mehr Wert darauf, einfach zu bedienen zu sein - aber (leider) nur, wenn Sie wirklich wissen, was Sie tun.
Ich werde mich nicht für das eine oder andere einsetzen. Meine Meinung zu den Sprachen ist viel weniger relevant, als dass Sie eine Vorstellung davon haben, was Sie von den einzelnen Sprachen erwarten können, und sich ehrlich ansehen, um herauszufinden, welche wahrscheinlich besser zu Ihnen passt.
1 Ja, ich weiß, dass das nicht wirklich richtig ist, aber ich versuche zu verhindern, dass daraus ein Buch wird ...
quelle
Ich kann nicht glauben, dass die Leute C ++ als Muttersprache befürworten! Sie werden die meiste Zeit damit verbringen, Kesselplatten zu schreiben und zu versuchen, die Einschränkungen und Angelhaken in der Sprache zu umgehen, als tatsächlich das Programmieren zu lernen.
Java ist eine viel einfachere Sprache und steht Ihrem Lernen nicht im Wege.
Wenn Sie C ++ lernen müssen, lernen Sie die Konzepte mit Java und gehen Sie dann zu C ++ oder noch besser zu OBJ-C, wenn Sie Mac-Software schreiben möchten. Java und OBJ-C sind sich nicht zu unähnlich.
Zu Ihrer Information Ich habe 10 Jahre als kommerzieller C ++ - Entwickler verbracht.
quelle
Ich würde C ++ empfehlen. Ich hatte einige Kurse in Java und einige in C ++ im College, und die sprachspezifischen Fähigkeiten, die ich in C ++ gelernt habe, haben mir beim späteren Erlernen weiterer Sprachen mehr geholfen. Obwohl ich viel mehr Java als C ++ - Stellenangebote sehe, suchen die meisten nach einem vollständigen Java-Stack, wie zum Beispiel:
Und es besteht die Möglichkeit, dass ein Java-basierter Lehrplan Sie nicht viel besser vorbereitet als ein C ++ -basierter Lehrplan gegen eine solche Liste.
quelle
Es ist schwierig, weil Java zweifellos leichter zu erlernen ist. Sie werden mit Java eher früher arbeiten.
C ++ ist eine viel schwierigere Sprache. Zeiger und Speicherverwaltung sind konzeptionell und praktisch schwierig zu handhaben. C ++ bietet Ihnen keine Sicherheitsnetze.
Auf lange Sicht wäre es nützlich, all die Dinge zu verstehen, die C ++ Ihnen beibringt. Auch der Übergang von C ++ zu Java ist weitaus einfacher als in die andere Richtung.
Aber ich frage mich, ob zu Beginn und während vieler Studienprojekte der zusätzliche Aufwand und das Debuggen, die Sie leisten müssen, um etwas in C ++ zum Laufen zu bringen, Ihre Projekte tatsächlich schwieriger machen, Ihre Fristen schwieriger einzuhalten und Ihr Leben weitaus frustrierender . Um dasselbe in C ++ und Java zu erreichen, würde ich sagen, dass Sie in fast allen Fällen die Arbeit in Java schneller erledigen und auf weniger störende Probleme stoßen würden. Das könnte eine wirklich große Sache sein, wenn Sie am Ende eines Semesters sind und fünf Kurse am selben Tag ihr Projekt zum Ende des Kurses benötigen.
Die andere Seite davon ist, dass wenn Sie durch diese Versuche nicht das Handtuch werfen müssen, Sie ein besserer Programmierer werden, wenn Sie C ++ beherrschen. Und wenn Ihre Karriere mit C # oder Java oder Python ist und Sie nie einen anderen Zeiger in Ihrem Leben berühren müssen, werden Sie es viel mehr zu schätzen wissen ...
quelle
C ++ ist flexibler und bietet ein tieferes Verständnis. Ohne Frage werden Sie mehr von C ++ als von Java profitieren. C ++ ist auch schwieriger, weil es komplexer ist.
Allerdings sind C ++ - Jobs bei weitem nicht so häufig wie Java-Jobs.
Java und sein Nachkomme C # sind die Standardlösungen für den Codierungsbereich für Unternehmen und Unternehmen. Ich empfehle dringend, eines der beiden in Ihrem zweiten Jahr zu lernen und sich bis zum Abschluss Ihres Studiums damit sehr wohl zu fühlen. Dadurch können Sie Jobs viel einfacher bekommen. Das bedeutet nicht, dass diese Jobs im Durchschnitt ein erhebliches intellektuelles Interesse haben. Ich habe kürzlich Craigslist-Software-Jobs in den Rocky Mountains durchlaufen, und die meisten Jobs waren C # / Java und bezogen sich auf die sogenannte " CRUD " -Software. IMO das ist sehr langweilig.
quelle
Nachdem ich sowohl C ++ als auch Java auf College-Ebene unterrichtet habe, würde ich Java wärmstens empfehlen .
Java unterstützt den Lernprozess und fördert ein gutes Programmierverhalten. Die integrierten Bibliotheken für Java sind nützlich und bei jeder Installation leicht verfügbar. Die Möglichkeit , eine GUI - Anwendung in einem Satz zu erstellen, die integrierten Bibliotheken mit in jedem Java installieren und das Match aller Tutorials die Schüler in einer Google - Suche finden ist, von entscheidenden Bedeutung für die Unterstützung der Schüler über die Sprache und beginnen verstehen Programmierung Konzepte .
Die IDEs für Java bieten Unterstützung für Anfänger und Fortgeschrittene. Wenn Sie leistungsstarke Refactoring-Tools frühzeitig in die Konversation einbeziehen (z. B. während Sie über OOP sprechen), lernen die Schüler, wie man wartbaren Code schreibt.
Während C ++ eine nützliche Sprache ist, sind die zusätzlichen Konzepte, die in C ++ erlernt wurden, den zusätzlichen Aufwand der gesamten Sprache nicht wirklich wert. Es gibt eine große zusätzliche Menge von "Fallstricken", die zu einem späteren Zeitpunkt eingeführt werden müssen (Speicherverwaltungsprobleme und Pufferüberläufe, um nur einige zu nennen). Wenn die Schüler diese verstehen müssen, bevor sie mit Konzepten wie algorithmischer Komplexität und Vererbung fortfahren, werden Sie langsamer. Die Art und Weise, wie ein Fahrer den Reifendruck vor dem Fahren verstehen muss, würde Driver's Ed verlangsamen. Klar, du musst es wissen. Aber Sie müssen es nur als etwas wissen, das Sie eines Tages falsch machen werden, nicht als Baustein eines größeren Konzepts.
quelle
Ich denke, die größere Frage, die Sie sich stellen müssen, ist, ob Sie ein guter Programmierer sein oder sich auf Informatik konzentrieren möchten. Wenn CS Ihr Ziel ist und Sie auf einer Doktorandenroute sein möchten, ist Java vielleicht der richtige Weg. Java stellt die Java-Sammlungsklassen bereit, die viele vorgefertigte Datenstrukturen und Algorithmen aufweisen. Dies hat zwei Vorteile: Erstens können Sie mit den Datenstrukturen und Algorithmen herumspielen, um zu sehen, was sie tun, bevor Sie sich Gedanken darüber machen, wie sie aufgebaut sind. Zweitens bietet dies den Professoren mehr Gelegenheit, CS-Prinzipien zu vermitteln, die Datenstrukturen verwenden, ohne sich um das Wesentliche kümmern zu müssen. Später können sie zurückgehen und ihre Schüler die Strukturen von Grund auf neu erstellen lassen.
C ++ hingegen ist eine niedrigere Sprache. Es zwingt Sie, Zeiger und Speicherbereinigung zu berücksichtigen. Die Lernkurve ist etwas steiler, aber am Ende, wenn Sie sich mit externen Frameworks auf dem Weg zur Programmierung befinden, werden Sie weniger das Gefühl haben, sich nur auf verborgene Magie zu verlassen. Darüber hinaus verwenden viele größere Unternehmen immer noch C ++. Es ist schwieriger, von Java nach C ++ zu wechseln als von C ++ nach Java.
quelle