EDIT: Diese Frage scheint zunächst Java zu Bashing, und ich denke, an diesem Punkt ist es ein bisschen. Allerdings ist der größere Punkt den ich versuche zu machen, warum jeder eine einzige Sprache als ein Ende gewählt wird alle alle Lösung für alle Probleme sein. Zufällig wird Java verwendet, also musste ich es hier übertreffen, aber ich bin nicht gewollt, Java neu zu rippen :)
Ich mag Java in den meisten akademischen Situationen nicht. Ich sage nicht, dass die Sprache selbst schlecht ist - sie hat einige äußerst wünschenswerte Aspekte, vor allem die Fähigkeit, auf den meisten Plattformen ohne Neukompilierung ausgeführt zu werden. Es ist nichts falsch daran, die Sprache für Ihre nächste App ^ TM zu verwenden. (Nicht etwas, was ich persönlich tun würde, aber das ist mehr, weil ich weniger Erfahrung damit habe, als dass das Design schlecht ist.)
Ich halte es für eine Verschwendung, dass High-Level-CS-Kurse unter Verwendung von Java als Sprache unterrichtet werden. Zu viele meiner Kommilitonen kann nicht Programm Pfifferling wert, weil sie nicht wissen, wie man Arbeit in einer nicht-Garbage Collection Welt. Sie verstehen die Maschinen, für die sie programmieren, grundsätzlich nicht. Wenn jemand außerhalb einer müllsammelnden Welt arbeiten kann, kann er innerhalb einer arbeiten, aber nicht umgekehrt. GC ist ein Werkzeug, keine Krücke. Aber die Art und Weise, wie Informatikstudenten unterrichtet werden, ist wie eine Krücke.
Informatik sollte nicht eine ganze Reihe von Kursen unterrichten, die auf eine Sprache zugeschnitten sind. Die Schüler verlassen die Idee, dass alle einen gutes Design idiomatisches Java-Design ist, und dass Objektorientiertes Design ist der ein wahrer Weg, der einzige Weg ist, die Dinge getan werden können. Andere Sprachen, mindestens einer von ihnen kein Müll gesammelt Sprache zu sein, sollte in der Lehre eingesetzt werden, um den Absolventen ein besseres Verständnis der Maschinen zu geben.
Es ist eine Schande, dass jemand mit einem PHD in CS aus einer angesehenen Institution nicht ihren Weg aus einer Papiertüte programmieren.
Schlimmer noch: Wenn ich mit CS-Professoren spreche, die tatsächlich verstehen, wie die Dinge funktionieren, teilen sie die folgenden Gefühle, dass wir unseren Schülern einen schlechten Dienst erweisen, indem wir alles in Java erledigen. (Beachten Sie, dass das oben Genannte gleich wäre, wenn ich es durch eine andere Sprache ersetzen würde. Im Allgemeinen ist die Verwendung einer einzigen Sprache das Problem, nicht Java selbst.)
Insgesamt habe ich das Gefühl, dass ich keinen Abschluss mehr respektieren kann - wenn ich nicht sehe, dass meine Mitmenschen in der Lage sind, sich aus Fizzbuzz-Problemen herauszuprogrammieren.
Warum / wie kam es so sein?
quelle
Antworten:
Dies ist kein Java Problem, es ist ein Lehr Problem. Nicht zu wissen, wie man programmiert, ist kein Sprachfehler, sondern der Fehler der Schüler. Das Gleiche gilt für alle Ihre Fragen, GC, Wissen Basismaschine, wie die Dinge funktionieren „unter der Haube“ sozusagen.
Ihre Haupt meckern über Garbage Collection wirft mich leicht. Es sei denn, Sie tun C oder C ++ Garbage Collection ist in der Regel sehr gut und kein Problem. Möchtest du lieber, dass sie alle Montage lernen? Höhere Sprachen zwar streng sind, sind für den Unterricht sehr nützlich. Es gibt Ihnen die Flexibilität von Bibliotheken, Paketen und anderen Feinheiten, wenn Sie es benötigen, ohne die verwirrende Sprache "Zucker", die in den meisten anderen höheren Sprachen (PHP, Ruby, Python, Perl) vorhanden ist.
quelle
Tun die Universitäten das wirklich ? Oder ist dies nur eine Wahrnehmung, die die Leute bekommen, wenn sie einen schlechten Kandidaten für ein Vorstellungsgespräch bekommen?
Ich habe vor 4 Jahren meinen CS-Abschluss gemacht und während Java in den Einführungskursen verwendet wurde, wurde es danach nicht besonders betont. Aus der Spitze von meinem Kopf, der Kern erforderlichen Kurse erforderlich Sie Java, C, C ++, SML (funktionale Programmiersprache), Montag, Matlab und CAST (Schaltungsbeschreibungssprache) zu lernen. Dies gilt nicht berücksichtigt alle mathematischen und theoretischen CS Kurse und natürlich mehr die Hälfte Dutzend Wahl CS-Kurse, die Sie zu einem ganzen Bündel ausgesetzt wäre. Nach Gesprächen mit Freunden an verschiedenen Universitäten klang es nicht so, als wäre das, was sie taten, viel anders.
Wenn es Universitäten gibt, die ausschließlich Java unterrichten, dann ist das in der Tat eine Tragödie. Nicht weil Java schlecht ist, sondern weil es nur ein Werkzeug von vielen ist, das einem Programmierer zur Verfügung stehen sollte. Ein Entwickler, der nur Java kennt, ist gleichbedeutend mit einem Tischler, der nur weiß, wie man einen Hammer benutzt. Es fällt mir jedoch schwer zu glauben, dass dies wirklich der Fall ist, zumindest für angesehene Universitäten. Ich vermute, dass dies nur die Wahrnehmung ist, schlechte Kandidaten zu sehen und die Schule für die Inkompetenz der Kandidaten verantwortlich zu machen, anstatt den eigenen Mangel an Antrieb / Motivation / Neugier / Professionalität usw.
quelle
Ich bin wirklich überrascht, dass dies die Situation so vieler Schulen ist. Als ich meinen CS-Abschluss machte, hatte ich eine Reihe von Sprachkursen, die alle gängigen Sprachen des Tages umfassten (dies war vor fast 40 Jahren): Assembler (Univac 1108 und MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp und Algol 68. Ich kann mir nicht vorstellen, dass nur eine Sprache unterrichtet wird. Oder wie ich verstehen konnte, was Compiler tun mussten, ohne Assembler-Programme geschrieben zu haben.
Wir haben Algol und FORTRAN für die meisten Daten- und Algorithmuskurse verwendet. Ich hätte gern mehr Zeit mit Lisp verbracht hat - stattdessen hatten wir eine Einführung nur und jetzt sind versucht, einige der Konzepte neu zu lernen. Wir haben SNOBOL4 zum Schreiben von Parsern verwendet - und der Pattern Matching mit Backtracking bildete eine gute Grundlage für die spätere Arbeit der Regex-Bibliotheken, die in vielen modernen Sprachen enthalten sind.
Diese Einführung in ein halbes Dutzend Sprachen hat ein Interesse an mir geweckt, das seitdem andauert.
quelle
Um den wahren Grund herauszufinden, müssten Sie die Leute fragen, die diese Institutionen leiten (und selbst dann sagen sie es Ihnen vielleicht nicht).
Mehrere mögliche Gründe (und ich verteidige hier niemanden und beschuldige ihn auch nicht):
Sie können sich was in Java getan
Java ist eine Allzwecksprache und kann als solche verwendet werden, um viele Probleme zu lösen.
Viele Lehrer verstehen Java
Es ist schwierig, eine Sprache zu lehren, dass Sie nicht verstehen,
Java ist beliebt
Das bedeutet, dass es viele Java-Ressourcen gibt - Bücher, eine aktive Community, Codebibliotheken usw.
Java ist einfach
Sie müssen nicht viel über einfache Dinge oder Theorien wissen, um Java zu machen. Sie können es vielleicht nicht gut machen , aber zumindest können Sie Dinge erledigen.
Java ist allgegenwärtig
Sie können es auf mehr oder weniger alles ausführen.
Es gibt Jobs für Java-Programmierer
Es gibt viele Jobs, die Java brauchen - Lehrer sollen Schüler auf die reale Welt vorbereiten.
Die Zeit ist begrenzt
In vielen Kursen fehlt die Zeit, um mehrere Sprachen, Theorien, einfache Konzepte usw. zu unterrichten.
Es ist das, was die Schüler wollen
Viele Studenten haben bereits von Java gehört (und sogar Java verwendet). Sie mögen, weil es vertraut ist.
quelle
Darum hat die Branche gebeten. Es gab einen Mangel an Java-Entwicklern, sodass die Schulen damit begannen, sie zu erstellen. Unternehmen haben Entwickler, die ihre Arbeit aufnehmen können, sobald sie durch die Tür gegangen sind.
Wie auch immer, die Sprache spielt keine Rolle. Sie könnten eine Nicht-GC-Sprache unterrichten und trotzdem schlechte Programmierer hervorbringen. Die Verwendung der Sprachschulen ist ein Implementierungsdetail. Schulen sollten Konzepte vermitteln. Wenn dies nicht der Fall ist, dann ist es die Schule, die das Problem ist, nicht die Sprache, mit der sie unterrichten. Nur weil jemand nicht weiß, was ein Zeiger ist, heißt das nicht, dass er kein effektiver Programmierer sein kann.
GC ist sowieso der Weg der Zukunft.
quelle
Faulheit und Gewinnmotiv. Mit Java bekommen die meisten Leute 80% des Weges, mit 20% des Aufwandes. Dies führt jedoch häufig dazu, dass Voodoo-Programmierer "Affen sehen Affen tun", die nicht genau wissen, was passiert, und nicht in der Lage sind, tiefer zu graben als Werkzeuge auf hoher Ebene.
C / C ++ richtig zu unterrichten ist schwierig. Selbst wenn dies gut gemacht wird, werden einige Konzepte auf niedriger Ebene wie Zeiger nicht vollständig verstehen (es gibt Studien dazu). Darüber hinaus scheint es auf dem Arbeitsmarkt nicht unmittelbar relevant zu sein.
quelle
Ich stimme meistens aber bis zu einem gewissen Grad zu.
Wenn Sie CS unterrichten möchten, konzentrieren Sie sich auf Datenstrukturen oder Algorithmen. Das meiste unnötige Zeug aus dem Weg zu räumen, ist eine gute Sache. Sie wollen nicht, dass die Schüler sich mit einfachen Dingen auseinandersetzen, wenn sie Konzepte auf hohem Niveau erlernen.
Auf der anderen Seite sollte auch Low-Level-Zeug unterrichtet werden. Nur damit wir mehr Allround-Programmierer bekommen.
quelle
Wie immer ist es eine Frage, was Sie unterrichten möchten und wie viel Zeit Sie dafür haben.
Wenn Sie Dinge in Java tun, müssen Sie sich nicht mit verirrten Zeigern und free / malloc auseinandersetzen. Das bedeutet, dass es weniger schwer zu findende Bugs gibt.
Dies bedeutet nicht, dass Sie sich nicht mit der zugrunde liegenden Maschine auseinandersetzen sollten - was Sie für das Handwerk benötigen -, sondern dass Sie vielleicht das richtige Werkzeug für den Job auswählen sollten. Hochwertige Algorithmen sind möglicherweise nicht das beste Thema für den Assembler-Kurs.
quelle
Ist es zu viel verlangt, ihnen etwas darüber beizubringen, wie Computer wirklich funktionieren? Für mich macht es keinen Sinn, dass ein CS-Kurs keine Betriebssysteme oder Computerarchetekturen enthält. Ich sage nicht, dass Sie in der Lage sein sollten, einen Computer auf der Rückseite eines Umschlags zu entwerfen, aber eine allgemeine Übersicht lässt alle Sprachen in Betracht ziehen. Ich meine, Java läuft in einer virtuellen Maschine!
quelle
Ehrlich gesagt denke ich nicht, dass Sie den Respekt für alle Grade verlieren sollten und besonders nicht für CS, da die einzige gelehrte Sprache Java ist.
Jeder anständige comp. sci-Student versteht, dass sein CS-Abschluss nichts anderes als ein Stück Papier ist und dass echtes Wissen aus persönlichen Projekten und persönlichem Studium resultiert. Ich würde gerne glauben, dass die guten Schüler wissen, dass sie C kennen müssen und lernen, wie man Dinge unter Linux / Unix macht und wie man NICHT von modernen Sprachen beherrscht wird.
quelle
Ich sehe kein Problem mit der Verwendung von Java. Das größte Problem (wie Sie bereits erwähnt haben) ist, dass Universitäten Imperative Programmierung als beste und einzige Möglichkeit zur Lösung all Ihrer Probleme lehren. Dies ist sehr weit von der Wahrheit entfernt. Anstatt beispielsweise drei imperative Sprachen (oder schlimmstenfalls dieselbe Sprache) für drei verschiedene Kurse zu verwenden, sollten sie drei verschiedene Programmierparadigmen verwenden. Ein Beispiel ist Java (imperativ), Prolog (deklarativ) und Haskell (funktional).
Was den Grund angeht, denke ich, dass dies eine Kombination aus (1) Politikern, die nicht aufgeschlossen sind oder persönliche Vorteile / Sponsoren haben, und (2) Faulheit ist. Professoren waren einst Studenten und unterrichten, was immer sie wissen oder mögen.
quelle
Calvin College in Grand Rapids Mi.Nr. Als sie zu Einführungskursen von Java zu Python wechselten, sagte der ungläubige Professor gegen Ende seines Semesters zu einer Gruppe von uns: "Viele von ihnen können tatsächlich programmieren, es ist unglaublich." Sein Erstaunen stand im Gegensatz zu den bisherigen Erfahrungen mit Java. Dies macht Java nicht zu einer schlechten Sprache, nur schwer von Grund auf zu verstehen. Ich würde das Gleiche über C oder C ++ oder eine Sprache argumentieren, die genaue Kenntnisse über Speicherzuweisungsschemata oder -typen erfordert.
quelle
Ich habe einen Abschluss in Computersystemtechnik, also habe ich Baugruppen, Mikroprozessoren, VHDL studiert, was die Logikgatter sind und wie man daraus ein Flip-Flop erstellt, ich habe elektrische Schaltungen, Operationsverstärker, Tiefpassfilter und Amplitude studiert Modulation, baute eine Schaltung in einem Labor, die wie eine Telefontastatur klingt, mit einem Logikanalysator vermischt, nahm einige Physikstunden. Auf der Linux-Seite habe ich vorher einen Kernel neu kompiliert, einen winzigen Gerätetreiber und ein Hausaufgaben-Dateisystem geschrieben.
Aber dann merkte ich, dass ich mehr High-Level-Sachen viel mehr mag. Ich bevorzuge Python gegenüber C. Ich mag C # und ich liebe den Garbage Collector. Ich mag Mathematik und Algorithmen und Datenstrukturen, aber ich bin kein besonderer Fan von Zeigern - ich kann mich mit ihnen anlegen; Ich will einfach nicht.
Sie denken also, dass die Universität mehr C und weniger Java unterrichten sollte. Jemand anderes meint, dass sie alles im Schema unterrichten sollten. Spolsky wird beides nehmen.
Ja, es stimmt, dass ein Universitätsabschluss nur ein Stück Papier ist, aber "lassen Sie nicht zu, dass der Schulbesuch Ihre Ausbildung beeinträchtigt". Es gibt immer Wikipedia, Stack Overflow, Coursera.org usw. Es sieht so aus, als würden die traditionellen Universitäten an Bedeutung verlieren.
Wenn ich einen Bachelor machen könnte, wäre ich auf eine andere Schule gegangen, ich hätte keine Elektrotechnik studiert, sondern Mathe, Nebenfach Physik und Französisch. Scratch Französisch; Ich hätte im Ausland in der Schweiz studieren und dabei 5 natürliche Sprachen lernen sollen. Ich würde auch zurückgehen und eine Person finden, die mich davon überzeugt hat, dass ich unbedingt eine Einführung in den Wirtschaftsunterricht am College machen muss, um in der realen Welt zu überleben und ihm mit meiner Sammlung von Milton Friedmans Büchern (den wenigen) auf den Kopf zu schlagen Bücher zum Thema Wirtschaft, die ich lese, die nicht saugen). Ich würde auch kein Geld für das Buch Freakonomics 1 oder ein Buch über Perl-Sprache bezahlen.
Im Nachhinein hätte ich vieles anders gemacht. Alles, was ich jetzt tun kann und das empfehle ich Ihnen, ist, Ihr eigenes Abenteuer zu wählen: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html
Im Nachhinein hätte ich 100 Milliarden Dollar an der Börse verdient und in die Krebsforschung investiert. Ich hätte Wissenschaftler engagiert, um die Welt von Plastikmüll zu befreien. Ich hätte genug Geld für die Kampagne von Ron Paul gespendet, damit der Krieg im Nahen Osten vor mehr als 3 Jahren sein würde.
Erkennen Sie jetzt, dass Sie Ihre Zeit nie mehr zurückbekommen. Versuchen Sie also, sie mit Bedacht einzusetzen.
quelle
Vor ein paar Jahren las ich irgendwo, dass in Großbritannien die Java-Entscheidung getroffen wurde, mehr Studenten zum Programmieren zu bewegen. Anscheinend war es für das Gehirn einfacher, weil es an fiesen Zeigern und Speichermanagement usw. mangelte. Ich würde vermuten, dass dies der Grund ist, warum Python schnell als neues "Lernwerkzeug" eingeführt wird. Ich bin der Meinung, dass Ihr typischer Uni-Kurs Sie nicht zum Programmierer machen wird. Alles, was es tun soll, ist, Sie mit einem gewissen Maß an Wissen auszustatten und Sie für die Programmierung vorzubereiten. Der Tag, an dem man sich selbst als Programmierer bezeichnen kann, kommt in der Regel ein wenig später, und wenn dieser Tag kommt, sollten Zeiger, Garbage Collection und andere Programmierparadigmen als OOP kein Problem sein.
quelle
Warum wird Java verwendet?
Drei Gründe:
Java verwendet eine C-Syntax. Viele Programmierer sind damit vertraut, so dass sich die Lernkurve verkürzt.
Geld wurde ausgegeben, um Java als cool und modern zu vermarkten. Aber im Gegensatz zu Lisp lebt Java in der Steinzeit.
Die JVM. JVM ist die einzig coole Sache an Java, die legitim ist, nicht nur Marketing-Hype. Obwohl die JVM als Plattform für die Ausführung von Programmen gelobt werden sollte, verdient sie nicht die Existenz der Java-Sprache. Sie können theoretisch und praktisch viele verschiedene Sprachen für die JVM kompilieren.
quelle
Ihre Frage stützt die Erkenntnisse einer anderen Person, die einen Aufsatz geschrieben hat, in dem es heißt, Java sei so cool, aber nicht schwer genug für wissenschaftliches Rechnen. Ich denke, er sollte einfach Big Decimal mit all seinen feinen Genauigkeiten, NANs usw. verwenden und damit weitermachen.
Ich möchte nur in einer automatischen Müllsammelwelt leben. Es ist gesünder, sauberer, gepflegter und ästhetischer und verhindert, dass Geld für Gesundheitskosten verschwendet wird. Es ist wünschenswerter - Sie müssen etwas nicht als unerwünscht markieren - indem Sie es einfach dereferenzieren oder auf null setzen oder wenn ich den Bereich verlasse, wird das Objekt automatisch abgerufen markiert für Müllabfuhr ..
Ok, jetzt spreche ich nur über Java, aber es wäre sehr hilfreich, wenn dies auch im richtigen Müllszenario funktioniert. Java wird irgendwo einmal ausgeführt, was für mich gut genug ist, um als Sprache in Schulen verwendet zu werden. Keine Speicherverluste und von glücklichen Programmierern gemocht zu werden, die nicht Zeit damit verbringen möchten, jedes von ihnen verwendete Objekt mit Tags zu versehen und aufhören möchten, sich selbst zu verwenden, ist eine gute Logik für Java.
Java hat Zeiger - nun, wir nennen sie Referenzen. String s1 = "Hello"; String s2 = "Hallo"; String s3 = neuer String ("Hallo");
s1 und s2 zeigen auf dasselbe String-Objekt - dies ist durch Verweis s1 == s2, s1.equals (s3), aber s1 == s3 ist falsch, weil s3 ein neues Referenzobjekt ist - dies ist eine Java-Arithmetik von Referenzen und I Verstehe das alles so leid, ich möchte nicht als jemand bezeichnet werden, der die zugrunde liegenden Komplexitäten der Zeigerarithmetik von C oder C ++ nicht versteht.
quelle