Interview: Wie werde ich ein guter Softwareentwickler – Java

Von | 7. März 2012

JavaWie bereits angedroht, hier das erste Interview zu dem Oberthema “Wie werde ich ein guter Softwareentwickler”. Vielen Dank an Christian Ullenboom der sich für uns mit den Fragen bezugnehmend auf Java beschäftigt hat.

Vorstellung

Hallo Christian, vielen Dank das du dir die Zeit nimmst diese Fragen rund um Java zu beantworten. Damit wir wissen mit wem wir es eigentlich zu tun haben, wäre es klasse wenn du ein paar Stichworte zu deiner Person hättest:

Ich bin Christian Ullenboom, komme vom Niederrhein (NRW) und schätzt man die Lebenserwartung auf 77 Jahre, so betrete ich gerade die zweite Hälfte. In der ersten Hälfte kam ich an der Universität mit Java in Kontakt, davor programmierte ich fast ausschließlich Assembler, ich denke so um die 6 Jahre. Über einen Univortrag über Java rutschte ich in den Job als Referent und so entstand das Buch „Java ist auch eine Insel“ , das ursprünglich eine Schulungsunterlage war. Die Insel erfährt fast jedes Jahr ein Update und nun sind es auch schon 2 Bände mit über 2000 Seiten. Meine Schulungs- und Beratungstätigkeit habe ich in meiner zweiten Lebenshälfte reduziert und heute kümmere ich mich mehr um tutego, einem Schulungsunternehmen, das mit über 60 verschiedenen Java-Seminaren zur Größten seiner Art gehört. Neben der üblichen Aktualisierung der Insel (auf Java 8 vorbereiten, Korrekturen, Erweiterungen) schreibe ich unregelmäßig an zwei anderen Büchern (Code-Style und Google Guava) und immer mal wieder was im Blog. Neben Java beschäftigen mich Heimcomputer und Retro-Konsolen; mein Wunsch ist, das umfangreichstes Museum Deutschlands aufzubauen, und eine Menge anderer Sachen.

Einsatzfeld

Interessant ist sicherlich für einen angehenden Entwickler was du mit Java so alles anstellst. Gibt es ein Einsatzfeld wofür Java besonders geeignet oder auch nicht geeignet ist, und wenn ja warum?

Die Java SE steht bei meiner Arbeit im Mittelpunkt, sowohl in Projekten, als auch als Berater und Autor. Allgemein sehe ich die Stärken von Java im Backend und wenn Java zu lahm wäre, würden es eBay, Amazon, Google, Oracle nicht so umfangreich einsetzen – Performance ist also überhaupt kein Thema. Bei Rich-Clients sehe ich Java weniger, es sein denn, die Lösungen sollen plattformunabhängig sein. Aber vieles geht in Richtung Web-App und dann sind wir wieder auf der Serverseite und auch da ist Java mit GWT und JSF gut positioniert. Ein neues Einsatzfeld für Java sind Smartphones mit Android. Für Entwickler ist das ein spannender Markt, auch weil man hier mit Apps vielleicht noch ein paar Euro nebenbei verdienen kann. Allgemein gesprochen ist Java eine Sprache für alles und nichts und die Stärke liegt für mich nicht in der super tollen Syntax oder der Leistungsfähigkeit der Sprache – das aktuelle C+ hat Closures und vieles mehr, sondern im Tooling, das bisher in der Qualität allen anderen Sprachen fehlt. Häufig wird die Argumentation aber ausschließlich über die Sprache selbst geführt, das ist IMO ein Fehler. Für Java gibt es hervorragende IDEs, Build-Tools, Gui-Builder, Refactoring-Unterstützung, Debugger, Profiler,sodass ich mir zwar noch einiges an der Sprache wünsche (Closures, Collection-Literale), aber gut damit leben kann. Persönlich mag ich neben Java noch Python und Groovy und ich verfolge auch die Neuerungen in C# und C++.

Fähigkeiten

Kommen wir zum Kern des kleinen Interviews, welche Fähigkeiten sollte ein angehender Java-Entwickler deiner Meinung nach unbedingt mitbringen?

Neugierde, Ausdauer und der Wunsch sich konstant weiterzubilden müssen (stark) ausgeprägt sein. Der Anfang ist schwer, es gibt unglaublich viele Sache zu lernen. Zu Beginn stehen die Syntax der Sprache und die Technologie, aber dann sollte man sich weiter in Richtung Architektur/ Design, Design-Pattern, Best Practices, Idiome, Refactoring bewegen. Das ist wichtiger für große Projekte und Fragen wie „nutzen wir eine ArrayList oder eine LinkedList“ rücken in den Hintergrund (ArrayList ist fast immer die beste Alternative). Gleichzeitig sollten Entwickler aber immer verfolgen was sich so tut, und in den Neuerungen fit bleiben, etwa was sich durch Java 7 verändert hat. Für Entwickler habe ich daher eine spezielle Rubrik „Die wöchentliche Dosis Java“  entwickelt, sodass man sich jede Woche mit etwas Neuem beschäftigen kann und somit immer besser und besser wird. Ich lade alle Leser ein, die Fragen durchzugehen, und zum Beispiel im Team alle 2 Wochen einen Freitagnachmittag dafür zu reservieren und die Aufgaben zu lösen und Lösungen im Blog zu diskutieren.

Welche 3 Fragen würdest du einem „Java“ – Azubi bei einem Vorstellungsgespräch stellen, und was damit bezwecken?

Nur drei Fragen? :) Normalerweise halte ich ein Schwätzchen über eine halbe Stunde und dann teste ich das Wissen in vier Feldern: 1. Die Sprache Java, 2. Architektur/Design, 3. Java SE allgemein, 4. spezielle Technologien, die der Kunde einsetzt. Die Fragen könnten also lauten (für fertige Entwickler allerdings, nicht Azubis): Bereich 1: „Gib mir ein kleines Beispiel zu Generics und wozu man super und extends braucht“, „Erkläre mir AutoClosable und was das mit den Ausnahmen zu tun hat, die in einem finally-Block geworfen werden.“. Zu 2:„Was ist das Interessante an IoC bzw. DI?“ oder „Was spricht dafür und dagegen Domain-Objekte in einer Enterprise-Anwendung direkt an den Rich-Client zu schicken versus dedizierte Transfer-Objekte zu nutzen?“ Bereich 4: „Was unterscheidet Comparable und Comparator und wo werden sie eingesetzt?“, „Was kann man alles mit regulären Ausdrücken machen?“. Bereich 4: „Welches Problem löst ein Left-Join und haben Sie das schon einmal in einer JPA-Anfrage genutzt?“, „Für welche Anwendungsfelder ist RMI, CORBA, REST oder SOAP am Besten geeignet?“ oder „Mit welchen SwingX-Komponenten hatten Sie schon Kontakt und wie sind Ihrer Erfahrungen?“

Was unterscheidet nach deiner Ansicht einen guten von einem schlechten Java Entwickler?

Ungeduld und Ignoranz gegenüber vorhandener Lösungen gepaart mit Überheblichkeit sind Anzeichen eines schlechten Entwicklers. Schlecht ist ja ein Begriff, dem man mit der Frage kommen muss, was dann gut ist. Ein guter Entwickler nimmt sich Zeit für die Modellierung, ist umfangreich gebildet, diskutiert seine Ansätze und glaubt nicht, dass die erste Lösung auch die Beste ist. Je fundamentaler eine Entscheidung für ein großes Projektes ist, desto weniger darf nur eine Person diese Entscheidung fällen, sondern ein Team muss zentrale Technologien abwägen und sich auf ein Design verständigen; ein guter Entwickler weiß das und forciert nicht seine eigene Lösung ohne mit den anderen Teammitgliedern diskutiert zu haben. Ein schlechter Entwickler bildet sich nicht weiter, kennt daher keine Standardlösungen, macht viel allein und entwirft alles neu, hat keinen Stil im Code, dokumentiert nichts, und versucht nicht, die Technologie in seiner Gesamtheit zu verstehen, sondern löst Probleme nur punktuell. Er hat noch nie eine Frage in einem Forum gestellt, nie eine Frage beantwortet oder einen Bug gemeldet.

Konzeption & Projekte

Wie wichtig ist für dich bei der Entwicklung mit Java eine umfangreiche Konzeption? Wird direkt mit dem „hacken“ des Codes begonnen, oder werden vorher umfangreiche UML-Diagramme und Co. Entworfen?

Sehr wichtig! Konzeption ist das wichtigste überhaupt. Ohne Planung ist die Gefahr zu groß, dass man alles ein paar Mal umstellen muss – das kostet Zeit und somit Geld. Obwohl Änderungen Teil des alltäglichen Refactorings sind, sind Architekturänderungen später viel zu aufwändig, sodass ich zentrale Klassen und Abhängigkeiten gerne zu Beginn richtig haben möchte. Allerdings beginnt die Konzeption nicht nur auf der Ebene der klassischen Architektur und des Designs mit der UML (ohne Tool für mich, auf Papier), sondern auch beim API-Design, sodass ich schon recht früh eine Anwenderklasse entwerfe um zu schauen, wie sich die Bibliothek oder Funktionalität anfühlt. Das heißt: die Anwendungsfälle stehen am Anfang, dann überlege ich mir eine API mit leeren Rümpfen, modelliere die Klassen und Beziehungen. Das schiebe ich dann sooft hin und her, bis die Client-API optimal für den Anwendungsfall ist und mir die Lösung testbar erscheint. Dann programmiere ich die Funktionalität aus.

Arbeitsumgebung

Zum Ende noch etwas zum Entspannen, was bevorzugst du wenn es um deine Arbeitsumgebung geht?

Homeoffice oder Büro:

Bevorzugt zuhause, fast nie in Büros. Oft schreibe ich in Hotels oder auf Reisen im Flugzeug, Bahn, Bus. 150 Seiten meines Google-Guava Buchs sind in Neuseeland,
Australien und in Indonesien entstanden – die Strecken sind echt weit dort …

Windows, OS X oder Linux:

Mit Linux hatte ich seit Anfang des neuen Unix-Systems zu tun, etwa um 1996. Zu der Zeit entwickelte ich mit C++ und X11/Motif. Dann folgte ausschließlich Windows, und ich begann intensiver mit der Java-Entwicklung. Apple-Rechner zwischendurch brachten OS X zwangsläufig mit (Mac OS kenne ich auch noch), wobei ich nicht gerne mit OS X arbeitete. Als Java-IDE ausschließlich Eclipse.

Notebook oder Desktop:

20 Jahre hatte ich Desktop-PCs, erst vor 2 Wochen gab ich meinen letzten ab. Heute stöpselte ich das Laptop (Lenovo T400s) per DVI-Kabel an ein Dell-Display und an eine Funk-Tastatur/-Maus wenn ich am Tisch arbeiten möchte. Die Daten liegen auf einem Netzwerkserver und in einer Dropbox. Ein zweites billiges Laptop (aktuell lenovo X121e) nehme ich auf Reisen mit.

Stille oder Rauschen:

Stille, aber bisweilen schalte ich gut ab und nehme die Welt draußen dann nicht mehr so war.

Raucher oder Nichtraucher:

Obwohl geräuchertes länger haltbar ist, bin ich Nichtraucher.

Lieblings-Link:

http://reader.google.com/ mit zurzeit 90 abonnierten Feeds.

Mir bleibt vorerst nur zu sagen, Danke Christian für diese wirklich ausführlichen Antworten, ich bin mir sicher das es einige angehende und auch fertige (ist man jemals fertig?) Entwickler gibt die einen großen Nutzen daraus ziehen können. Und wer sich näher mit Java beschäftigen möchte, ist sicherlich auf den von dir genannten Blogs bestens mit Material versorgt.

5 Kommentare bei “Interview: Wie werde ich ein guter Softwareentwickler – Java

  1. Pingback: Interview mit Christian Ullenboom über die Frage: “Wie werde ich ein guter Softwareentwickler”

  2. Ursderbaer

    “Und wer sich näher mit Java beschäf­ti­gen möchte, ist sicher­lich auf den von dir genann­ten Blogs bes­tens mit Mate­rial versorgt.”

    Der LINK Blogs wirft ein Error 404!!!

    1. Arne Post author

      Danke für den Hinweis, das “Problem” ist beseitigt.

  3. Pingback: Interview: Wie werde ich ein guter Softwareentwickler - PHP (Geek Pub)

  4. Pingback: Interview: Wie werde ich ein guter Softwareentwickler - Perl (Geek Pub)

Kommentare bereits geschlosen.