Schlagwort-Archive: Softwareentwicklung

Eine gesunde Portion Selbstbeweihräucherung ist wohl nötig, nach dem Lern-Martyrium der vergangenen Wochen: Seit Donnerstag bin ich offiziell ein von Oracle zertifizierter professioneller(!) Java-Programmierer – endlich! Die hierzu nötige zweieinhalbstündige, umgerechnet 215 Euro teure Prüfung habe ich mit sagenhaften 91% glorreich bestanden. Zum Bestehen waren 65% richtige Antworten unter den insgesamt 65 Fragen nötig. Seit geschlagenen vier Jahren schon prokrastiniere ich dieses Thema vor mir her, weil ich genau wusste, was für ein Kraftakt das werden würde. Doch nun habe ich Nägel mit objektorientierten Köpfen gemacht. Ab jetzt bin ich nachweislich ein echter Java-Profi.

Wo die Vorgängerzertifizierung zum OCAJP meist noch ganz essentielle Sprachmechanismen, Konstruktoren, Operatoren, primitive Datentypen und Objekte und ihre Relationen zueinander, Vererbungshierarchien uvm. behandelt, besteht der OCPJP schon zum größten Teil daraus, dass man die halbe Java API auswendig kennen muss. Man sollte wissen welche Klassen und Methoden es gibt, in welchen Packages sie liegen, die dazugehörigen Parameterlisten, Rückgabetypen, welche Checked Exceptions diese werfen können, und das alles zu solch umfangreichen Themengebieten wie Collections/Generics, JDBC, Threads/Concurrency, Input-/OutputStreams, File IO/NIO.2, String-Verarbeitung und diverse andere. Außerdem werden einige Basis-Entwurfsmuster, Abstraktion und professionelles Klassendesign mit allen Fallen und Schikanen thematisiert, was alleine schon Stoff für eine ganze Prüfung gewesen wäre.

Bei allem Stolz auf das tolle Ergebnis, kam es für mich doch eher unerwartet, denn die schiere Menge an Themen, die man für die Prüfung vollständig verinnerlicht haben sollte, konnte einen schon sehr leicht erschlagen. Mein Prüfungsvorbereitungsbuch umfasst knapp 800 Seiten, dazu habe ich gleich zwei offizielle Online-Trainings von Oracle mitgemacht. Insgesamt fand ich den Lernaufwand mit grob geschätzt etwa 90 Nettostunden für meine Verhältnisse bereits enorm – und das obwohl laut Buch 200 Stunden empfohlen werden. Die offiziellen Oracle-Trainings grenzen meiner Meinung nach an Betrug, so behandeln sie nur einen Bruchteil des abgefragten Wissens, und selbst das auch nur oberflächlich, und kosten dazu noch unverschämt viel Geld. Hätte ich mich direkt nach dem Online-Training gutgläubig in die Prüfung gesetzt, wäre ich chancenlos durchgefallen.

Das Buch war schon deutlich hilfreicher, aber dazu musste man den fetten Wälzer erst einmal komplett gelesen haben, was mir schwerfiel. Das Werk scheint zwar bekannt und anerkannt zu sein, jedoch ist es – besonders in der zweiten Hälfte – voller Fehler. Offenbar hatte die Autorin keine Lust mehr, oder hat die Themen selbst nur noch so halb verstanden, über die sie schreiben sollte. Jedenfalls sind nicht wenige ihrer Antworten auf ihre eigenen Übungsfragen schlichtweg falsch, die Aufgaben mitunter fahrlässig missverständlich formuliert, oder sie lässt wichtige Fakten aus den Kapiteln einfach raus, um den Leser dann gezielt bei den darauf folgenden Übungsfragen auf die Schnauze fallen zu lassen. Am Ende habe ich mich über das Buch nur noch geärgert. Trotzdem war es allemal eine passable Vorbereitungsgrundlage.

Schließlich habe ich noch vier unabhängige Mock Exams (mit Erklärungen) absolviert, und ich bin sicher, diese haben mein Prüfungsergebnis am stärksten beeinflusst. Zunächst war ich über den sehr hohen Schwierigkeitsgrad entsetzt, und gleich unter den ersten paar Fragen waren Themen, von denen ich bisher noch nie gehört hatte, wo ich eigentlich nur raten konnte. Allerdings bestätigte mir das Ergebnis am Ende doch, dass es zum Bestehen locker reichen sollte. Dadurch lernte ich, was denn so die typischen Fragestellungen sind, und konnte bei meinen falschen Antworten auch gleich sehen, wo der Fehler lag. Die eigentliche Prüfung kam mir schließlich sogar irgendwie einfacher vor als die Mock Exams – was aber auch daran liegen könnte, dass ich alle Aufgabentypen und die häufigsten Fehler schon kannte, und oft wusste, auf welche Details ich besonders achten musste.

Dummerweise habe ich mir ausgerechnet in der Prüfungswoche die für 2018 längst überfällige Herbst-Erkältung eingefangen, so dass ich, statt mich mit einer Wärmflasche ins Bett zu legen, leider mit Halsschmerzen, dröhnendem Schädel, Triefnase und Husten die Java API pauken und dann sogar die Prüfung mit Handicap ablegen musste. Hätte ich die Prüfung denn nicht kurzfristig verschieben können? Nur theoretisch. Leider war das keine praktikable Option, schon da mein Zertifizierungspfad von Oracle nach Ablauf des Jahres nicht mehr angeboten wird. Hätte ich im Dezember keinen Prüfungstermin mehr bekommen, auf Grund welcher Umstände auch immer, dann hätte ich den OCPJP nicht mehr machen können. Dann hätte ich mit dem OCA Java 8 wieder von vorne anfangen müssen. So gesehen habe ich das Zertifikat also quasi in letzter Minute erlangt.

Ich bin sehr froh, dass das Thema hiermit ein erfolgreiches Ende hat, und ich fürchte, ich kann jetzt erst einmal kein Java mehr sehen. Das war einfach zuviel des Guten. Ist ja zum Glück auch bald Weihnachten, Zeit, mich auf meinen Lorbeeren auszuruhen, und vor allem mich auszukurieren. Und so schnell folgt nun keine nächsthöhere Zertifizierung, was auch gut so ist. Obwohl … ich KÖNNTE natürlich irgendwann die Upgrade-Zertifizierung für Java 8 machen. Naja… nein. Lieber nicht.

ocajpKönnen Klassen in Java „protected“ oder sogar „private“ sein? Welchen Case springt ein Switch mit einem null-String an? Ist ein statischer Konstruktor ein Konstruktor mit „static“-Modifier? Werden Methoden oder Variablen dynamisch oder statisch gebunden? Können Interfaces von mehreren anderen Interfaces erben? Kompiliert eine Klasse mit der Methode „private static void main“ und ist diese startfähig? Wer solche Details nicht weiß, braucht sich über das Thema Zertifizierung noch keine Gedanken machen. Ich mache mir bereits seit Monaten Gedanken.

Seit Anfang der Woche bin ich offiziell ein von Oracle zertifizierter Java-Programmierer – endlich! Die hierzu nötige Prüfung habe ich mit 85% bestanden. Zum Bestehen brauchte man 63% der richtigen Antworten, dieser Wert variiert je nach Schwierigkeitsgrad des Aufgabenkatalogs. In meinem Fall handelte es sich um ziemlich schwere Aufgaben. Zum Vergleich: Nur wenige Jahre zuvor waren zum Bestehen stolze 77% nötig, die Aufgaben also wesentlich einfacher. Zweieinhalb Stunden hat man Zeit, sich beinahe 90 hirnverknotende Codebeispiele durchzulesen, im Kopf zu interpretieren und dann via Multiple-Choice die richtige Antwort anzuklicken – weniger als zwei Minuten pro Aufgabe. Ansatzpunkte gibt es natürlich keine. Ein paar kümmerliche Alibi-Wissensfragen zwischen den endlosen Zeilen voller Quellcode sollen wohl beruhigend wirken. Am Ende hat mir die Zeit gerade so gereicht.

Die fast 200 Euro teure Zertifizierung (Schulungsmaßnahmen nicht eingerechnet) zum sogenannten „Oracle Certified Associate, Java SE 7 Programmer“ (kurz OCAJP) ist die erste, die man als Java-Programmierer absolvieren kann, sie ist mittlerweile Voraussetzung für sämtliche weiteren. Jetzt habe ich die Möglichkeit, mich irgendwann sogar als professioneller Java-Programmierer (OCPJP) zertifizieren zu lassen, was ich definitiv plane, aber bis dahin wartet noch sehr viel mehr an Vorbereitung und Training auf mich. Das gedruckte Zertifikat sollte in den nächsten sieben Wochen bei mir eintreffen, bis dahin kann ich mich an der PDF-Version ergötzen.

Wer sich mit dem Thema noch nie befasst hat, aber neugierig auf die Prüfung ist, sollte gewarnt sein. Die Fragen sind wirklich knallhart. Es wird nie nach den allgemeinen Dingen gefragt, die jeder Java-Programmierer beantworten kann. Es werden gezielt die Schwachstellen abgeklopft, all jene Aspekte und Grenzfälle abgeprüft, die viele eben nicht kennen. Die Prüfung spekuliert darauf, dass viele etwa den einfachen Unterschied zwischen String s = „Hallo“; und String s = new String(„Hallo“); nicht kennen, und fragt dann gerne ganz genau nach, wieviele Objekte der Garbage Collector der JVM aufräumen darf.

Ich bin voller Stolz, diese Hürde erfolgreich genommen zu haben. Der OCAJP war der nächste große Schritt, mich im Bereich Softwareentwicklung bzw. Java-Programmierung zu beweisen und zu etablieren. So ein Zertifikat kann eines Tages den Unterschied zwischen Arbeitslosengeld und Gehalt ausmachen. Oder zwischen Gehalt und Gehalt++. Das muss sich alles noch herausstellen. Bis dahin werde ich weiterhin Erfahrung sammeln und Bücher wälzen.

Zur Zeit befasse ich mich (wieder) privat und beruflich mit dem Thema „Entwurfsmuster“ („Design Patterns„). Meine letzten Versuche, diese Thematik anzugehen, waren zaghaft und wenig erfolgreich. Zu trocken und zu abstrakt. Ich hatte nie das Gefühl, dass ich irgendwas davon irgendwo mal hätte einsetzen können. Inzwischen habe ich den Entschluss gefasst, mir die Entwurfsmuster jetzt endgültig gedanklich anzueignen und damit zu arbeiten. Das bekannte Werk „Entwurfsmuster von Kopf bis Fuß“ („Head First Design Patterns„) bringt dem Leser die einzelnen Muster auf humorvolle bildhafte Weise näher. Ich muss sagen, das gelingt wirklich sehr gut. Zum ersten Mal habe ich den Eindruck, dass ich es verstehe und daraus einen Vorteil ziehen kann.

Vielleicht hatte ich deshalb Schwierigkeiten, mich initial damit anzufreunden, weil die Entwurfsmuster bei mir für ein mittelschweres Trauma gesorgt hatten. Dieses genoss ich vor eineinhalb Jahren, kurz nach meinem Studium, das ich mit einem breiten Grinsen und vor Stolz geschwellter Brust abschloss, und eine Welt erwartete, die taufrische Informatiker mit offenen Armen, einem Glas Sekt, und dem roten Teppich empfangen würde. Damals, in meiner Experimentierfreude, bewarb ich mich bei einer Spieleentwicklerfirma als Junior-Developer für Tools. Freudig erzählte ich davon, dass ich mich für den Richtigen für den Job halte, weil ich viel Erfahrung mit Spielen habe, weil ich das Spiele-Repertoire des Unternehmens kenne und selbst spiele, und ganz besonders weil ich selbst schon etwas Erfahrung im Bereich Spieleentwicklung gesammelt habe, sowohl 2D als auch 3D, sowohl Windows als auch Linux, sowohl Java als auch C++. Bestimmt würde man mir gleich den Arbeitsvertrag rauslegen.

Stattdessen fragte man mich ziemlich ausführlich, ob mir Erich Gamma ein Begriff ist, ob ich weiß wer die Gang of Four ist und was die eigentlich gemacht haben, ob ich irgendwelche Design Patterns kenne und möglichst auch gleich beschreiben könnte, wofür die da sind. Observer hier, Factory da, Design Patterns dort und überall. Ich musste bei jeder Frage abwinken und saß am Ende nur noch mit einem roten Kopf da, wollte nur noch, dass es endlich aufhört. Der Rest des Bewerbungsgesprächs verlief nicht minder ernüchternd. Lauter Begriffe, die ich vielleicht mal gehört hatte, oder eben nichtmal das. Es ging spätestens jetzt nicht mehr darum, ob ich die Stelle bekommen würde oder nicht. Die haben es nämlich geschafft, mir den Job auszureden. Ich wollte die Stelle gar nicht mehr. Ich begann zu zweifeln, ob ich als Entwickler überhaupt geeignet bin. Vielleicht hätte ich als Maurer mehr Glück.

Ich bin aus dem Informatikstudium entlassen worden, ohne dass der Begriff „Entwurfsmuster“ jemals in einer Vorlesung gefallen wäre. Java, PHP, C und C++ waren im Studium eigentlich nicht zu kurz gekommen und auch gab es die eine oder andere Vorlesung zum Thema Software Engineering, wo dann so Dinge wie das Wasserfall-Modell und das V-Modell durchgenommen wurden. Meine Noten waren zumeist überdurchschnittlich. Ich hatte nie Anlass gehabt mich schlecht vorbereitet zu fühlen. In meiner Freizeit hatte ich durchaus das eine oder andere kleine Progrämmchen oder Spielchen entwickelt, aber auch da stieß ich nie auf Entwurfsmuster, wenn ich mal was recherchierte. Und dann stand ich da, mit einem Diplom in der Hand, ohne Kenntnis von Entwurfsmustern. Und so jemanden wollen die Arbeitgeber wohl nicht.

Ich hatte Glück, ich bin nach zehnmonatiger Stellensuche gnädigerweise doch noch in einem IT-Unternehmen angestellt worden. Was sprach am deutlichsten gegen meine Anstellung: die zehnmonatige Stellensuche – „Grenzwertig“, laut Personaler. Dass ich unerfahren bin und keine Entwurfsmuster kenne, ist unproblematisch und lässt sich ändern. Warum nicht gleich so? Dann wären mir auch zehn Monate Unsicherheit erspart geblieben. Hätte meine Arbeitslosigkeit länger als ein Jahr angedauert, wer weiß ob mir mein Diplom dann noch genützt hätte.

Da ich bekennender Fan der Programmiersprache Java bin (aber nicht ausschließlich), möchte ich den Zeitpunkt der Veröffentlichung des JDK7 nutzen und ankündigen, dass wohl in Zukunft auch ein paar Beiträge über Java-Entwicklung folgen werden. Ich bin noch nicht wirklich sicher worüber genau, aber mir wird da schon was einfallen.

Themen, die ich mir vorstellen könnte, wären meine Erfahrungen mit dem JDK7, außerdem diverse Tricks und Techniken, die ich bei meinen zahlreichen kleineren Gamedev-Versuchen (z.B. Spacola Eclipse) gelernt habe. Womöglich profitiert nochmal jemand davon, dann hätte es sich schon gelohnt, darüber zu schreiben. Wenn alles gut läuft, werden sich die Tutorials nicht auf Java beschränken, sondern auch andere Programmiersprachen umfassen, mit denen ich mich befasse. Auch mathematische Probleme, denen man früher oder später zwangsläufig begegnet, könnte ich dabei ansprechen und einen Lösungsansatz aufzeigen.

Was Spacola Eclipse angeht: Die Entwicklung steht nicht still, aber das Spiel ist derzeit nicht meine Top-Priorität, daher geht es verständlicherweise nur langsam voran. Ich habe definitiv neue Ideen, die ich demnächst umsetzen werde. Zunächst will ich eben einige private und berufliche Dinge geklärt wissen, bevor ich mich wieder mit vollem Eifer meinem Hobbyprojekt widmen kann.