Wahrscheinlich haben Sie den Namen
Cay S. Horstmann bereits gehört. Er ist eine ziemlich prominente Person in der Java-Welt und Autor zahlreicher Bücher über unsere geliebte Sprache. Darunter sind der klassische Kurs „Core Java“ (veröffentlicht auf Russisch im zweibändigen Buch
„Java. Professional’s Library“ ) und eine Reihe mit einer kurzen Zusammenfassung der Essenz von „Java for Impatient“ (veröffentlicht auf Russisch
„Java SE 8. Einführungskurs“ und
„Java SE 8. Grundkurs“ ). Er trägt den stolzen Titel „Java Champion“. Und unter
diesem Link finden Sie seine Old-School-Website mit interessanten Informationen.
Wir machen Sie auf die Übersetzung eines Artikels für die InformIT- Ressource aufmerksam , in dem Kay mehrere Tipps für Anfänger und Fortgeschrittene als Programmierer gibt, wie sie in ihrem Beruf besser werden können. Eines Tages bat mich Jennifer Bortel, Redaktionsleiterin von InformIT, eine Nachricht darüber zu hinterlassen, wie man ein besserer Java-Programmierer werden kann. Sie schlug vor, dass ich, der Autor von Core Java for the Impatient, vielleicht etwas darüber wüsste. „Es gibt nichts Einfacheres, einfach ein Buch kaufen“, dachte ich zuerst. Aber diese Antwort hat nicht funktioniert, weil ich sie in 1500 Wörter unterbringen muss, und bis jetzt sind es nur 62 davon * (
bei der Übersetzung des Artikels haben wir natürlich nicht versucht, die Anzahl der Wörter beizubehalten - ca. übersetzt ). Ich habe kürzlich eine E-Mail von einem befreundeten Entwickler erhalten, der in einem Interview gefragt wurde, warum der folgende Code nicht threadsicher sei:
class ThreadSafeClass extends Thread
{
private static int count = 0;
public synchronized static void increment()
{
count++;
}
public synchronized void decrement()
{
count--;
}
}
Mein Freund entschied, dass der Code in diesem Beispiel Thread-sicher sei, und ich stimmte ihm zu und stellte fest, dass in der zweiten Methode ein Schlüsselwort fehlte
static
und der Zugriff nach dem Einfügen durch die integrierte Sperre des Klassenobjekts gesteuert wurde. Ich habe auch gesagt, dass dies keine gute Interviewfrage ist, denn wenn Sie einen Thread-Zähler benötigen, ist es besser, ihn zu verwenden
AtomicInteger
. Aber dann wachte ich mitten in der Nacht auf und fragte mich: Was wäre, wenn dieses Wort
static
aus einem bestimmten Grund weggelassen würde? Vielleicht hat ein hinterhältiger Interviewer dieses Beispiel absichtlich so strukturiert, dass die Kandidaten in die Irre geführt werden? Also habe ich dem Entwickler, der die Frage gestellt hat, zurückgeschrieben und gesagt, dass ich mich vorhin wahrscheinlich geirrt habe: In einem Paralleluniversum namens Interview Questions lautet die Antwort auf diese Frage: „Die zweite Methode enthält eine Objektsperre.“ Nach dieser Antwort fragte mich der Typ, ob ich einen YouTube-Kanal betreibe, auf dem ich lehre, wie man mit solchen Interviewproblemen umgeht. Leider mache ich das nicht. Ich unterrichte Informatik und schreibe Bücher, aber mein Hauptziel ist nicht, bessere „Problemlöser für Vorstellungsgespräche“ zu werden, sondern meine Schüler zu besseren Programmierern zu machen. Es war einmal, als
Peter Norvig (
amerikanischer Wissenschaftler auf dem Gebiet der künstlichen Intelligenz, Google-Forschungsdirektor – ca. übersetzt ) einen wunderbaren Artikel auf seinem Blog schrieb. Er argumentierte, dass Bücher, die versprechen, Ihnen Java in 24 Stunden oder 21 Tagen beizubringen, einfach lächerlich seien. Es ist schwer, ihm zu widersprechen: Es dauert 10 Jahre oder vielleicht 10.000 Stunden, um auf irgendeinem Gebiet ein Experte zu werden. Und es ist bekannt, dass Experten Informationen anders verarbeiten als Anfänger. In einem klassischen Experiment wurde erfahrenen und unerfahrenen Schachspielern einige Sekunden lang ein Schachbrett mit einer bestimmten Anordnung der Figuren gezeigt, dann wurde es ausgeblendet und aufgefordert, die Figuren so anzuordnen, wie sie waren. Anfänger kamen mit der Aufgabe nicht so gut zurecht, Experten hatten jedoch keine Probleme. Allerdings nur unter einer wichtigen Bedingung:
Die Anordnung der Figuren muss dem realen Spiel entsprechen . Wenn die Figuren zufällig platziert wurden, waren die Experten beim Wiederaufbau des Bretts nicht besser als die Anfänger.
Deshalb habe ich die Frage aus dem Brief genau so beantwortet, wie ich es getan habe. Mein Hintergrund liegt im eigentlichen Programmieren, nicht im Vorstellungsgespräch, daher habe ich instinktiv das fehlende Schlüsselwort hinzugefügt und bin zu der „falschen“ Schlussfolgerung gekommen. Ich würde gerne glauben, dass ich trotzdem eingestellt würde, nachdem ich erklärt habe, was passiert ist und warum ich ohne meinen Zusatz niemals Code wie das Beispiel schreiben würde. Wenn eine solche Antwort sie nicht zufriedenstellen würde, würde ich vielleicht selbst nicht mit ihnen zusammenarbeiten wollen. |
Ich glaube nicht, dass Sie durch die Vorbereitung auf Zertifizierungsprüfungen oder Vorstellungsgespräche ein besserer Programmierer werden. Ich bin mir auch sicher, dass es auch nicht funktionieren wird, viele Bücher zum Thema Programmierung zu kaufen und sie dann von vorne bis hinten durchzulesen (obwohl ich das als Autor genau dieser Bücher nicht zugeben möchte!).
Tatsächlich besteht ein wirklich guter Weg, ein besserer Programmierer zu werden, darin, so viel Software wie möglich zu erstellen . Von Zeit zu Zeit unterrichte ich an meiner Universität einen Einführungskurs in die Informatik. Dies ist mit Abstand der schwierigste Kurs, den ich je unterrichtet habe. Es ist noch schwieriger als das Aufbaustudium. Als ich als junger Professor anfing zu arbeiten, hielt ich fleißig Vorlesungen für Studenten, in denen ich pflichtbewusst auf Programmierthemen einging, etwa auf den Unterschied zwischen Schleifen
for
und
while
Schleifen
do
. Anschließend habe ich den Schülern vier dreiwöchige Projekte zugewiesen. Und dieses Fach wird seit jeher an allen Universitäten auf diese Weise gelehrt. Nach meinem ersten Versuch beschwerte sich der Dozent des Kurses im zweiten Semester darüber, dass die meisten meiner ehemaligen Studenten nach ihrem ersten Semester Programmieren nicht einmal einfache Schleifen wirklich verstanden hätten. Und solche Ergebnisse gab es auch seit Anbeginn der Zeit. Erinnern Sie sich an den Artikel
„FizzBuzz oder warum Programmierer nicht programmieren können“ ? Beim Erlernen einer Fremdsprache handelt es sich bei den meisten Aufgaben um Übungen und Übungen, nicht um Theorie. Es ist äußerst wichtig, Wissen ins Unterbewusstsein zu „schieben“. Der Wendepunkt kommt, wenn Sie nicht mehr aktiv über jeden Zyklus oder (im Fall Französisch) jedes unregelmäßige Verb nachdenken müssen. Wenn dieser Moment gekommen ist, sind Sie bereit, zum nächsten Level überzugehen. Und an dieser Idee ist nichts Revolutionäres.
Der Schlüssel zu allem ist sofortiges Feedback. Einige Psychologen glauben, dass wir mit computergestütztem Lernen mit sofortigem Feedback viel mehr erreichen könnten. In einem anderen klassischen Experiment beispielsweise absolvierten angehende Piloten eine Schulung, bei der sie immer wieder auf die Instrumententafel schauen und die Bewegung des Flugzeugs beschreiben mussten. Gleichzeitig erhielten sie sofort eine Rückmeldung darüber, ob sie es richtig gemacht hatten oder nicht. Nach zwei Stunden Training übertrafen sie die erfahrenen Piloten. Das bedeutete natürlich nicht, dass sie sofort auf einen echten Flug geschickt werden konnten, aber die vielfältigen und zahlreichen Zifferblätter auf der Instrumententafel machten ihnen keine Sorgen mehr.
Wenn Sie also gerade erst anfangen, Java zu lernen, ist es die beste Idee, zum Üben viele Übungsübungen zu machen. Es gibt eine Vielzahl von Websites und Online-Kursen, die die Richtigkeit Ihres Codes automatisch überprüfen. Wählen Sie eines, das echte Herausforderungen bietet, statt Kauderwelsch. Schließlich möchten Sie, dass Ihr Unterbewusstsein den Code, den Sie tatsächlich schreiben, in der Praxis gut beherrscht. Aus diesem Grund bin ich nicht besonders begeistert von Programmierbeispielen, die künstliche Situationen verwenden, wie zum Beispiel Tierklassen mit Methoden, die miauen und bellen. Nach einiger Zeit beherrschen Sie die Grundlagen der Programmierung. Um zur nächsten Ebene zu gelangen, können Sie ein paar Projekte schreiben. Vor einigen Jahren stellte das InformIT-Portal erfahrenen Programmierern die Frage: „Wie kann ein Programmierer am besten eine neue Sprache lernen?“ Wenn wir ihre Antworten zusammenfassen, können wir zu folgendem Schluss kommen: „Verwenden Sie diese Sprache in Ihrem aktuellen Projekt.“
Überlegen Sie sich also, was Sie schon immer umsetzen wollten – und legen Sie los. Vor zwanzig Jahren, als Java noch sehr jung war,mein Freund und zeitweiliger Co-Autor
Gary Cornell an und sagte: „Kay, wir werden ein Buch über Java schreiben.“ Meine Antwort war, dass weder er noch ich wirklich etwas über diesen Java wüssten, worauf er antwortete: „Na und? Wir haben bereits einen Buchvertrag. Nichts zu tun. Wir mussten uns beeilen, weil jemand anderes die bevorstehende Veröffentlichung des Buches
„Teach Yourself to Be a Java Dummy in 24 Hours“ angekündigt hat ... Ich glaube, es hieß ungefähr so (
Kay macht sich über die Buchreihe „Für Dummies“ lustig - „für Dummies“ kann das Wort „Dummy“ mit „Dummy“ übersetzt werden (Anmerkung des Übersetzers ). Um eine neue Sprache zu lernen, begann ich mit Projekten – ich schrieb ein Programm, das eine Benutzeroberfläche für die Ruhestandsplanung erstellte, und dann ein Programm, das eine Verbindung zu einer Wetterseite herstellte und einen Wetterbericht anzeigte. Danach folgt ein Programm, das die Bewegung von Autos auf der Autobahn simuliert. Damals waren diese Programme einfach großartig!
java.awt
java.net
und Threads (
threads
). Und ich musste lernen, wie man das tatsächlich zum Laufen bringt, und nicht nur, was in der Dokumentation steht. Damals waren das noch ganz andere Dinge. Deshalb war
Core Java [1] ein Hit: Es war nichts für Dummköpfe.
Damals war das Erlernen von Java viel schwieriger. Wir hatten keine Websites wie
Stack Overflow (
und wir hatten auch kein JavaRush – Anmerkung des Herausgebers ). An dieser Stelle formuliere ich die folgenden Ratschläge zur Verbesserung Ihrer Programmierfähigkeiten. Wenn Sie also an Ihrem eigenen Projekt arbeiten, bleiben Sie zwangsläufig irgendwo stecken.
Gehen Sie in diesem Fall in ein Fachforum und versuchen Sie, Antworten zu finden. Glauben Sie mir, das ist eine großartige Idee . Zunächst stellen Sie Fragen, die schon oft gestellt wurden. Aber schon bald werden Sie an Wissen gewinnen und Ihre Fragen werden einzigartiger. Das ist eine erstaunliche Art zu lernen! Dabei geht es natürlich nicht nur darum, einen Code zu kopieren und zu fragen: „Was soll ich jetzt damit machen?“ Sie müssen der Sache auf den Grund gehen und erklären, welche Versuche Sie bereits unternommen haben, um das Problem zu lösen, bevor Sie nicht weiterkommen. Während ich eine Frage schriftlich formuliere, finde ich übrigens in den meisten Fällen die Antwort selbst und muss mir nur noch vor dem Absenden der Frage sagen: „Was ist hier das Problem, das ist eine Selbstverständlichkeit“. . Aber selbst wenn das nicht passiert ... Glauben Sie mir, nachdenkliche Fragen ziehen nachdenkliche Antworten nach sich. Denken Sie daran, den sozialen Gefallen zu erwidern, indem Sie die nachdenklichen Fragen anderer Leute beantworten. Sowohl das Stellen von Fragen als auch das Beantworten durchdachter Fragen machen Sie zu einem besseren Programmierer. „Und was ist mit den Büchern? - du fragst. „Sind sie dank
Google und
Stack Overflow wirklich völlig und unwiderruflich obsolet geworden ?“ Immer wenn ich mit einer neuen Technologie zurechtkomme, glaube ich, dass ich ein mutiger Mensch bin und alle Schwierigkeiten alleine überwinden kann. Aber eine Stunde sinnloser Qual weicht einer Stunde Vernunft – und ich kaufe ein Buch. Technische Bücher sind heutzutage ein tolles Schnäppchen. Wenn ich 40 $ für ein E-Book bezahle und nur eine Frage schnell beantwortet bekomme, habe ich mein Geld bereits zurückbekommen. Ich hasse es, meine Autorenkollegen zu enttäuschen, aber ich habe noch nie ein technisches Buch von Anfang bis Ende gelesen. Ich beginne dort, wo ich denke, dass mein Problem und seine Lösung geschrieben stehen, und lese, bis ich verstehe, wie ich es lösen kann. Aus diesem Grund versuche ich derzeit, Bücher zu schreiben, die so gelesen werden können. Aus diesem Ansatz entstand die Serie „Für die Ungeduldigen“. Und an dieser Stelle sollte ich aufhören – ich habe die redaktionelle Grenze von 1500 Wörtern überschritten.
Lassen Sie mich noch hinzufügen, dass Sie, um ein besserer Programmierer zu werden, zunächst erkennen müssen, dass es viele Wissensebenen gibt.
- „Ziehen“ Sie zunächst grundlegende Sprachstrukturen in Ihr Unterbewusstsein, d. h. bringen Sie deren Wissen durch das Lösen einer Vielzahl von Übungen zur Automatisierung.
- Beginnen Sie so schnell wie möglich mit der Arbeit an echten Projekten, die Sie interessieren.
- Dann treten Sie einer Community bei, in der Sie Fragen stellen und beantworten können.
- Sobald Sie dies getan haben, können Sie in Vorstellungsgesprächen mit Wissen und Erfahrung sprechen. Und es spielt keine Rolle, ob Sie das erfundene Rätsel lösen.
GO TO FULL VERSION