JavaRush /Java-Blog /Random-DE /Fangen wir von vorne an oder „Hallo, Java World!“
articles
Level 15

Fangen wir von vorne an oder „Hallo, Java World!“

Veröffentlicht in der Gruppe Random-DE
Ich möchte diesen Artikel mit einem auf den ersten Blick ungewöhnlichen Exkurs beginnen. Später wird klar werden, warum genau.
Fangen wir von vorne an oder Hallo, Java World!  - 1
Stellen wir uns also jemanden vor. Dieser Jemand möchte den alpinen Skisport beherrschen. Und dafür unternimmt er folgende Schritte:
  • Ausbilder, Lehrbücher, Handbücher usw. - das ist alles vom Bösen. Sie können das Skifahren selbständig erlernen. Außerdem lernte er in der Schule einigermaßen gut Langlaufen. Dementsprechend werden alle Ratschläge von sachkundigeren Personen ignoriert.

  • Die coolste Ausrüstung wird ausgewählt. Nicht unter dem Expertenniveau. Harte Stiefel, die deinen Füßen weh tun. Harte Ski, deren Biegen einen unglaublichen Kraftaufwand erfordert, der die körperliche Fitness von Jemandem bei weitem übersteigt. Na ja, usw.

  • Die Teststrecke ist... nun ja, sagen wir mal, die Strecke, auf der die Weltcup-Riesenslalom-Etappe stattfindet. Das ist genau richtig zum Lernen.
  • Machen Sie im gleichen Sinne weiter.
Hier ist also die Frage. Wie nennt man diesen Jemand? Persönlich würde ich ihn als einen Menschen, der sich seit etwa 20 Jahren mit dem alpinen Skifahren auskennt, (und das ist immer noch sehr milde!) als hoffnungslos bezeichnen. Es ist völlig unmöglich, mit diesem Ansatz etwas zu lernen. Aber ein sicherer Weg, verletzt zu werden. Und das Sicherste ist, den Gedanken ans Skifahren für immer aufzugeben. Ich denke, Sie werden mir in dieser Einschätzung zustimmen. Auf jeden Fall bin ich mir fast sicher, dass dieser Jemand nicht damit rechnen wird, dass man ihm etwas Unangenehmes anspricht. Stellen wir uns nun einen anderen Jemand vor. Lassen Sie ihn beispielsweise Informatikstudent sein. Er verfügt über einige Kenntnisse in C++, C# und Pascal. Er möchte Java lernen. Seine Taten:
  • Literatur, die seinem Wissensstand (offen gesagt Null-Niveau) entspricht, wird beiseite gewischt. Basierend auf einer leichten Vertrautheit mit der erwähnten C++-, C#- und OOP-Theorie.
  • Es wird die leistungsfähigste Programmierumgebung verwendet. Sagen wir Eclipse oder NetBeans. Derjenige, der alles selbst erledigt, einfach einen Knopf drücken.
  • Als Testanwendung wählen wir ... nun, sagen wir mal Chat. Eine Client-Server-Anwendung, der Client-Teil in Form eines Applets, der Server-Teil – ein Webdienst oder schlimmstenfalls Servlets. Genau richtig zum Lernen.
Frage. Wie nennt man diesen Jemand? Wissen Sie, was das Paradoxon ist? Fakt ist, dass es in diesem Fall deutlich weniger unparteiische Gutachten geben wird. Obwohl die Situationen in jeder Hinsicht identisch sind. Es sei denn, die Folgen für Gesundheit und Leben sind im zweiten Fall weniger fatal. Vielleicht ist das das Problem? Die Situationen sind wirklich sehr ähnlich. Ich habe sie ausdrücklich im gleichen Stil beschrieben. Und das Merkwürdige: Während die Absurdität des ersten Szenarios offensichtlich ist, wird das zweite Szenario von einer alarmierenden Anzahl unerfahrener Entwickler verfolgt. Die Beherrschung von Java beginnt mit dem Schreiben von MIDlets, Clients für Datenbanken, Chats, der Erstellung von Websites auf Basis von Servlets ... Sie können noch lange so weitermachen. Aber der Punkt ist dennoch offensichtlich. Gleichzeitig wird Einsteigerliteratur mit Geringschätzung beiseite gelegt. Lesen Sie dies? Mir? Ja, ich schreibe jetzt seit drei Jahren in C++! (Optionen gibt es in Pascal und sogar in Visual Basic.) Und ich weiß, OOP! Nun, im Allgemeinen. Und was dann? Und dann das:
  • Wie konvertiere ich ein Array mit 8 Bytes in ein Array mit einer Länge?
  • Warum passiert das NoClassDefFoundError?
  • Warum starte ich die Anwendung in Eclipse ( NetBeans/IDEA/JBuilder) und alles ist in Ordnung, aber ohne sie tippe ich ein java HelloWorld.classund es erscheint ein Fehler?
  • Warum stürzt es ab ClassNotFoundException?
  • Warum gibt es keine Bibliothek? Ich habe es bereits in „classes.zip“ abgelegt, aber es hat nichts geholfen!
  • Warum erstelle ich ein Array von Objekten, aber wenn ich versuche, ein Element des Arrays zu verwenden, erhalte ich Folgendes NullPointerException?
  • Und warum ...?
  • Und warum ...?
  • Und warum ...?
Warum warum warum? Aber weil Java nicht C++ oder Pascal ist. Und nicht Perl. Die Kenntnis dieser Sprachen hilft meistens nicht nur nicht, sondern behindert auch. Schon allein deshalb, weil diese Sprachen völlig unterschiedliche Ideologien haben. Doch die äußerliche Ähnlichkeit täuscht. Natürlich gibt es auf all diese „Warum“ und „Wie“ Antworten in Büchern. In Literatur auf einfachstem Niveau. Aber es zu lesen ist faul (Optionen: Scham, keine Zeit usw.). Ich kenne eine ganze Reihe von Stereotypen, die von guten C++-Spezialisten auf Java übertragen wurden. Ein aktuelles Beispiel: Sie sollten niemals eine Ausnahme in einem Konstruktor auslösen. Warum? Ja, denn in C++ ist der Zustand eines solchen Objekts nicht definiert. Dementsprechend kommt es zu einem Speicherverlust. In Java gibt es aufgrund des Vorhandenseins eines Garbage Collectors grundsätzlich kein solches Problem. Es gibt jedoch Menschen, die versuchen, solche Situationen zu vermeiden. Ganz nach einem tief verwurzelten Klischee. Und das Schlimmste ist, dass der Code durch diese Bemühungen viel komplizierter wird. Die Syntax ist leicht zu erlernen. Und völlig zu wenig. Viel wichtiger ist die Ideologie der Sprache. Und um es am effektivsten zu meistern, sollten Sie ganz von vorne beginnen. Warum genau und wie? Und das ist eine andere Frage. Also. Wo und wie beginnen. Es hängt davon ab, was Sie erreichen möchten. Wenn Sie ein erfahrener Programmierer werden möchten, können Sie mit fast allem beginnen. Wenn Sie Profi werden möchten, sind die Dinge etwas komplizierter. Meine Erfahrung gibt mir Anlass, Folgendes zu sagen. Der Unterschied zwischen einem professionellen Entwickler und einem „Programmierer“ besteht darin, dass er versteht, was vor sich geht. Er macht etwas mehr, als nur Knöpfe zu drücken. Eine leistungsstarke Umgebung ist eine sehr gute Hilfe. Für diejenigen, die darauf verzichten können. Aber es ist oft das einzige Werkzeug derjenigen, die damit angefangen haben. Und wenn es nicht vorhanden ist, ist der Wert des kodierenden Affen Null. Weil es keine Knöpfe zum Drücken gibt. Im Allgemeinen kann das Drücken einer Taste wirklich monströse Formen annehmen. Einer meiner Kollegen sah ein in Java geschriebenes Produkt. Die Anleitung zur Installation begann mit den Worten: „JBuilder von der Festplatte installieren…“ Nun ist DAS schon fatal. Wenn die Entwickler das Produkt ohne eine Entwicklungsumgebung nicht zum Laufen bringen könnten, dann schaudert es mich, wenn ich daran denke, wie es geschrieben wurde. Zumindest wurde es von Amateuren geschrieben. Was meine ich mit „versteht, was vor sich geht“? Das bedeutet, dass eine Person Folgendes verstehen muss:
  • Was ist eine virtuelle Maschine und warum wird sie benötigt?
  • Was ist eine Klasse aus Sicht einer virtuellen Maschine?
  • Was ist ein Paket?
  • Was ist eine Bibliothek?
  • Wie die virtuelle Maschine nach Klassen sucht und diese lädt; Was ist ein Klassenlader und wie funktioniert er? Wie viele gibt es standardmäßig? Was ist Klassenpfad?
Usw. usw. Die Liste geht weiter. Bitte beachten Sie, dass ich keine spezifischen Kenntnisse des Entwicklers selbst einbezogen habe. Was ist ein Thread, was ist aus OOP-Sicht eine Klasse und wie unterscheidet sie sich von einem Objekt, wie funktionieren Layoutmanager – das alles sollte JEDER Entwickler wissen. Alles, was ich aufgelistet habe, ist eher eine Formsache. Aber sehr oft stellt sich heraus, dass es entscheidend ist, sie zu kennen, um zu verstehen, was falsch funktioniert. Ein Beispiel aus dem Leben. Für die Arbeit mit XML gibt es eine Bibliothek namens xalan. Es enthält mehrere javax.xml...-Pakete – Parser, Transformer usw. Diese Bibliothek ist sehr beliebt. Das Problem besteht darin, dass dieselben Pakete seit Version 1.4 im J2SDK vorhanden sind. Frage. Welche Klasse wird beim Zugriff auf die Klasse javax.xml.transform.stream.StreamSource aus der Bibliothek geladen, wenn xalan auch im Klassenpfad vorhanden ist – Bibliothek oder aus J2SDK? Um diese Frage zu beantworten, müssen Sie wissen, wie der Klassenlader funktioniert. Ich habe einmal eine viertägige Diskussion in einem der Foren gesehen, die letztendlich auf diese Frage hinauslief. Der Code funktionierte nicht richtig, weil der Loader nicht die von ihm erwartete Klasse angenommen hat. Worauf hinaus will ich? Hier gilt: Je leistungsfähiger die Entwicklungsumgebung, desto mehr leistet sie für den Entwickler – desto weniger muss er nachdenken. Und das ist schon oh, wie schlimm. So nah am Affen. Dies führt zu der ersten Schlussfolgerung, so paradox sie auch erscheinen mag:

Fazit 1. Es ist ratsam, mit dem Erlernen von Java OHNE eine leistungsstarke Umgebung zu beginnen.

Ich befürworte das Schreiben in Editoren auf Notepad-Niveau nicht. Aber ich mache das nicht aus dem einzigen Grund: Sie verfügen in der Regel nicht über eine Syntaxhervorhebung. Das ist eine unglaublich praktische Sache, die keine negativen Auswirkungen hat. Sie können so etwas wie Notepad++ verwenden , es versteht Java-Syntax und ist übrigens kostenlos. Ich habe zum Beispiel den Dateityp .java speziell dafür im System registriert. Also ein Texteditor mit Syntaxhervorhebung und einer Befehlszeile. Zwei oder drei Tage der Qual – und zu verstehen, was ein Klassenpfad ist, wie der Dolmetscher gestartet wird und eine Menge anderer Kleinigkeiten – das wird für immer bleiben. Weiter. Meine Erfahrung gibt mir Anlass zu der Annahme, dass es unmöglich ist, Wissen für die zukünftige Verwendung zu erwerben. In dem Sinne, dass es sich lohnt, Literatur nur dann zu lesen, wenn es Fragen gibt, die sie beantwortet. Wenn Sie ein Buch lesen, ohne Fragen dazu zu haben, verschwinden die Informationen innerhalb einer Woche. Ich weiß das sehr gut, auch aus eigener Erfahrung. Ich habe einmal fünfmal angefangen, ein Buch über Servlets zu lesen. Bis ich begann, mich in meiner Arbeit mit ihnen auseinanderzusetzen, wurden die Informationen nicht aufgenommen. Und das ist alles andere als ein Einzelfall. Es war einmal, vor sehr langer Zeit, vor etwa 8-10 Jahren, ich habe Folgendes gelesen, leider kann ich mich nicht mehr an den Autor erinnern: Wie bringt man einer Person eine neue Programmiersprache bei? Sehr einfach. Sie müssen ihm eine Sprache, mehrere Aufgaben und ein Minimum an Dokumentation geben. Dann, nach ein paar Monaten, wenn er zumindest in dieser Sprache zu schreiben beginnt, stellen Sie eine umfassende Dokumentation bereit. Es wird in zwei Wochen wie ein Kriminalroman gelesen, danach ist die Person bereit für die Arbeit. Ich stimme dieser Aussage zu 100 % zu. Einerseits werden in zwei Monaten alle kleineren Probleme behoben sein. Die Antworten auf diese Fragen werden unabhängig voneinander eingeholt, was ihren Wert erheblich steigern wird. Andererseits werden sich bereits klare Fragen bilden, deren Antworten die Dokumentation liefern wird. Dies führt zu der zweiten Schlussfolgerung, die nicht weniger paradox erscheint als die erste:

Fazit 2. Es ist ratsam, mit dem Erlernen von Java OHNE Lehrbücher zu beginnen. Java-API-Dokumentation + Java-Tutorial – das ist mehr als genug.

Die Java-API-Dokumentation ist ein Muss. Ich empfehle dringend, es lokal auf der Festplatte aufzubewahren. Sie müssen sie mehr als einmal kontaktieren, nicht zweimal oder sogar zehn. Persönlich vergeht kein Tag, an dem ich nicht dorthin gehe. Ich empfehle außerdem, das Java-Tutorial lokal aufzubewahren. Dabei handelt es sich um Einstiegsinformationen, die ein Lehrbuch vollständig ersetzen. Allerdings gibt es dort eine ganze Menge davon. Ich muss sagen, dass ich in Bereichen, mit denen ich mich beruflich nicht beschäftige, immer noch etwas Neues für mich finde. Viel lesen ist schlecht. Solange es keine Anfrage gibt, gibt es keine Antwort. Ein wenig lesen ist auch schlecht. Wo ist die goldene Mitte? Ich halte mich an diese Regel: Ich lese, bis es mir so vorkommt, als hätte ich die Antwort auf die Frage erhalten. In 90 % der Fälle ist dies nicht der Fall. Aber genau in diesem Moment ist es am besten, aufzuhören und alleine weiterzumachen. Der erste Anstoß ist gegeben und die eigenständige Lösung des Problems wird noch viel mehr bringen. Natürlich lohnt es sich nach einiger Zeit, sich mit der Literatur zu befassen. Aber nochmal zur Einstiegsliteratur. Auch wenn es den Anschein hat, dass das alles Unsinn ist, lohnt es sich, die ersten Kapitel zu lesen. Ich kann fast garantieren, dass Sie zumindest etwas Neues lernen werden. Und dieses Etwas kann sich später als äußerst wichtig erweisen. OK. Wir scheinen herausgefunden zu haben, worüber wir schreiben sollen. Wie man schreibt – auch. Aber was soll ich schreiben? Denken Sie daran, wo dieser Artikel begann. Sollte ich damit beginnen, ein Instant-Messaging-System zu schreiben? Die Wahl liegt natürlich bei Ihnen. Es scheint mir, dass es sich nicht lohnt. Je komplexer die Aufgabe, desto mehr Fragen tauchen auf. Mangels Erfahrung vermittelt eine solche Anzahl von Fragen das Gefühl der Unmöglichkeit, sie zu lösen, gefolgt von einem Gefühl der eigenen Minderwertigkeit, Dummheit usw. Letztendlich kann dies dazu führen, dass man sich „zum Teufel damit“ entscheidet und mit dem Erlernen der Sprache aufhört. Diese. mit genau dem gegenteiligen Effekt, als nötig war. Dies ist weniger charakteristisch für Java als vielmehr für den Lernprozess selbst. Aber aus irgendeinem Grund vergessen sie das, wenn es darum geht, Programmieren zu unterrichten. In der Zwischenzeit kann eine kleine Aufgabe, die bis zum Ende erledigt ist, viel größere Zufriedenheit und viel größeres Wissen bringen als ein grandioses System, das gleich zu Beginn der Reise aufgegeben wird. Daher die dritte Schlussfolgerung: Schlussfolgerung 3. Es ist ratsam, mit dem Erlernen von Java mit Aufgaben zu beginnen, die Ihrem aktuellen Java-Kenntnisstand entsprechen. Man sollte nicht mit dem Erlernen des Autofahrens auf einem Formel-1-Auto beginnen. Man sollte nicht mit dem Erlernen des alpinen Skifahrens auf der Weltcupstrecke beginnen. Und ebenso sollten Sie nicht damit beginnen, Java zu beherrschen, indem Sie etwas Großes schreiben. Ich verstehe, dass Ehrgeiz anspruchsvoll ist. Aber in diesem Fall sind sie unbegründet. Und je mehr unvernünftige Ambitionen Sie haben, desto geringer sind Ihre Chancen, ein Profi zu werden. Ein bemerkenswertes Phänomen in Bezug auf das Lernen sind seltsamerweise verschiedene Foren. Wenn Sie sie mit Bedacht einsetzen. Mit Bedacht – das bedeutet, dass Sie das Gegenteil tun müssen, nicht wie üblich. Nämlich nicht, Fragen zu stellen, sondern sie zu beantworten. Alles, zu dem Sie die Kraft haben, es zu erreichen. Wenn Sie denken, dass ich selbst alles weiß, irren Sie sich gewaltig. Ja, ich weiß viel. Aber es gibt Bereiche, die ich noch nie gesehen habe. Oder ich habe, aber sehr wenig. Ein klassisches Beispiel aus meiner Praxis ist die Arbeit mit Zertifikaten: Codesignatur, sichere Verbindungen usw. 1998, als ich meine Diplomarbeit schrieb, habe ich das gemacht, aber seitdem hat sich alles sehr verändert. Im Laufe der Jahre häuften sich bei mir Fragen. Ich habe sogar angefangen, etwas Literatur zu lesen. Aber wie ich oben sagte, kann man sich kein Wissen für die zukünftige Verwendung aneignen. Es ist wie ein Brecheisen – es geht in ein Ohr hinein und kommt am anderen wieder heraus. Es gibt kein Ergebnis außer einem Loch im Kopf. Und das hielt bis vor kurzem an, als im Forum eine Frage zu einer SSL-Verbindung mit Tomcat gestellt wurde. Es gab einige Probleme. Und nur diese Frage brachte mich dazu, tiefer zu graben. Und wenn es eine Anfrage gibt, gibt es auch eine Antwort. Ich habe nicht nur herausgefunden, was das Problem der Person war, sondern auch eine Menge anderer nützlicher Informationen gefunden. Endlich habe ich verstanden, wie Zertifikate funktionieren. Der entsprechende Artikel ist in den Plänen. Und das passiert ständig. Ich habe zum Beispiel ziemlich viel mit der GUI gearbeitet. Erst aufgrund einer Frage im Forum habe ich einige der Funktionen von TextLayout verstanden. Vor dieser Frage hatte ich keine Ahnung davon. Ebenso habe ich kürzlich herausgefunden, dass JButton HTML auch als eigenen Header interpretiert. Vorher dachte ich, dass nur JLabel dies tun könnte. Und das ist wiederum dem Forum zu verdanken. Es stellt sich also heraus: Je mehr wir Fragen beantworten, desto mehr lernen wir selbst. Deshalb stimme ich nicht mit der landläufigen Meinung überein, dass jemand, der in einem Forum sitzt, nichts tut. Dies ist alles andere als klar und hängt in erster Linie davon ab, warum genau die Person im Forum ist. Und was macht er hauptsächlich – fragen oder antworten. Tatsächlich können Sie sogar fragen. Aber auch mit Bedacht. Bitten Sie nicht um eine Lösung (und insbesondere nicht mit dem Nachsatz „Bitte denen, die es wissen, geben Sie eine Antwort und stellen Sie keine Fragen!“, die mir erst neulich begegnet sind!), sondern bitten Sie im Gegenteil darum, die Lösung festzulegen Bewegungsrichtung. Es ist völlig verständlich, dass es für einen Anfänger schwierig ist zu verstehen, wo er graben soll, weil ihm einfach die Erfahrung fehlt. Das ist nicht die Schuld der Person und es ist nicht einmal ein Problem. Es ist in Ordnung. Jeder hat das durchgemacht. Ich eingeschlossen. Für mich persönlich ist es viel wichtiger, dass jemand etwas lernen möchte. Und nicht nur eine Antwort bekommen, Nur um es fünf Minuten nach der Teilnahme an einem Programmierpraktikum zu vergessen. Ich werde Ihnen immer die Bewegungsrichtung sagen. Wenn ich ihn selbst kenne. Und wenn ich es nicht weiß, kann ich es zumindest erraten. Und ich werde sicherlich auch nach der Antwort suchen. Aber ich gebe wahrscheinlich nie direkte Antworten – zumindest erinnere ich mich nicht. Aus diesem Grund habe ich übrigens eines der Foren verlassen. Als ich anfing, Leitfragen zu stellen, erklärten sie mir einstimmig, dass es üblich sei, einfach zu antworten. Und mit meinen Fragen kann ich noch weiter gehen. Wenn man bedenkt, dass das Niveau des Forums nicht zuletzt dank dieser Herangehensweise sehr zu wünschen übrig ließ! – Ich habe beschlossen, keine Zeit mehr zu verschwenden. Suchen Sie sich also ein Forum aus, das Ihnen gefällt, und los geht’s. Diese Seite ist übrigens gerade dank eines der Foren entstanden. Nachdem ich einige Zeit dort gesprochen hatte, stellte ich eine Liste der am häufigsten angesprochenen Themen zusammen und erkannte, dass eine solche Website gefragt sein würde. Und so geschah es. Fast alle Artikel sind im Anschluss an einige Diskussionen im Forum entstanden. Oder der Korrespondenz folgen, die ich auch regelmäßig führe. Was ist das Ergebnis? Arbeiten, arbeiten und wieder arbeiten. Je mehr Sie sich in der Anfangsphase erlauben, selbst zu tun, desto weniger Wissen gewinnen Sie. Und je länger der Weg zur Professionalität ist. Aber nur Sie können wählen, wer Sie sein möchten – ein gedankenloser Affe oder ein Profi. Und nur Sie selbst wählen den Weg, auf dem Sie dieses oder jenes erreichen können. Der erste Weg ist klar. Ich habe versucht, den zweiten zu zeigen. Ihr Umzug, meine Herren! Link zur Originalquelle: Fangen wir von vorne an oder „Hallo, Java World!“
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION