Design, effektive Programmierung, Idiome, Best Practice, Testen Hits und Flops

Java Extreme Programming Cookbook
Eric M. Burke, Brian M. Coyner. O’Reilly. ISBN 0-596-00387-0. März 2003. 288 Seiten
Viele XP-Bücher konzentrieren sich auf die „menschliche“ Seite der XP-Entwicklung, aber nicht auf die Tools, die bei der XP-Entwicklung einen großen Stellewert einnehmen. Diese Lücke versucht das Buch mit einer Vorstellung der Tools und Technologien zu füllen, die Anfang 2000 von Bedeutung waren: EJB 2, JUnit 3, CVS. Dumm ist nur, dass die Technologien und Tools heute an Bedeutung verloren haben und durch neuere Produkte ersetzt wurden, sodass auch das Buch heute nicht mehr sonderlich spannend ist und als veraltet gelten kann. Java EE 5 (bzw. Java EE 6) ersetzen für Enterprise-Produkte die J2EE 1.4, JUnit 3 ersetzt heute JUnit 4, Cactus wird nicht mehr weiterentwickelt, und Subversion ersetzt CVS. Für ein Buch, das es nicht nur bei den Konzepten belässt, sondern auch technisch tiefer geht ein Problem. Weiterhin ist die ausschließliche Betrachtung von Open Source etwas einschränkend. (Und der Titel des Buches ist nicht „Java XP Programming Cookbook with Open Source Tools“!) Es ist zwar toll, dass Open-Source Produkte nichts kosten und auch sehr verbreitet sind, aber Hersteller wie Atlassian bieten sehr gute Projekte, die bei der XP-Entwicklung helfen. Weiterhin fehlen in meinen Augen einige zentrale Tools, und es reicht nicht, XP auf Ant, JUnit (zzgl. HttpUnit, JUnitPerf), Mocking, XDoclet zu beschränken. Hier gibt es bessere Bücher. Februar 2009

Pragmatic Unit Testing in Java with JUnit
Andy Hunt, Dave Thomas. The Pragmatic Bookshelf. ISBN 0-9745140-1-2. September 2003. 146 Seiten
Kompaktes und nicht allzu tiefes Buch zu Testkonzepten und dem Testframework JUnit 3.x. Gut gefallen haben mir die Vorstellung des CORRECT-Prinzips (Conformance, Ordering, Range, Reference, Existence, Cardinality, Time), die Kurzvorstellung von Mock-Objekten (hier hätte ich mir allerdings etwas mehr Hinweise gewünscht, wobei immerhin Frameworks wie EasyMock zur Sprache kommen) und die Diskussion, wie die Testbarkeit das Systemdesign (positiv) beeinflusst. Die Codequalität ist in Ordnung, aber Anweisungen wie Integer.valueOf(val).intValue() hätte ich gerne als Integer.parseInt(val)gesehen, denn der Aufbau eines Wrapper-Objekts (lassen wir das Caching aus Java 5 außen vor) ist völlig unnötig (aber immerhin ist die Fabrikmethode noch besser als new Integer(val), denn sie kann immerhin auf die gecachten Wrapperobjekte im JDK zurückgreifen ). Schade, dass es im folgenden Beispiel einen Compilerfehler gibt, denn der Autor wollte gerade die semantischen Fehler von den syntaktischen Fehlern unterscheiden:

public void addit(Object anObject)
{ 
  List myList = new List;
  myList.add(anObject);
  myList.add(anObject);
  // more code... 
}

Die Namenskonvention von Sun halten die Autoren bei Variablennamen nicht ein: small_listbig_listnaughty_urlnext_indexstr_ftemp_fatemp_cmockJukebox_controlnum_lines, eine Klase Klasse MyStack ist nicht besser und die Parametervariable aString und aThing (finde ich besonders kreativ). Allerdings ist das alles nicht konsistent falsch, denn es gibt auch ingredientsText oder exitButton. Größtes Dilemma dieser Ausgabe ist aber ihr Alter, da nicht der JUnit 4.x-Zweig verwendet wird ebenso wenig wie Java 5, also keine Generics oder Annotationen. Mit der relativ flachen Beschreibung ist das Buch heute wenig attraktiv gibt aber dennoch einen pragmatischen Einblick ins Testen. Februar 2009

Beautiful Code: Leading Programmers Explain How They Think
Andy Oram, Greg Wilson. O’Reilly. 2007. 618 Seiten
Bekannten Autoren und Software-Architekten geben in 33 Kapiteln viele Beispiele ihrer Kunst, und Einblicke in ihr Schaffen. Doch sehr spezielle Beispiele in diversen Programmiersprachen machen es für Java-Programmierer schwer, hier ›schönen Code‹ zu entdecken. Unter dem Strich bleibt nicht viel für Java-Entwickler über, wenn Programmiersprachen wie C, Ruby, LISP ihren Platz finden und Algorithmen vorgestellt werden, die für die allermeisten kaum relevant sind. Interessant ist es allemal, und wer sich viel Zeit für die Einarbeitung nimmt, wird auch sicherlich viel entdecken, zumal das Design einen größeren Stellenwert einnimmt, als der Quellcode an sich. Bei den wenigen Java-Programmen gibt leider etwas zu bemängeln. Einmal ein einfacher Fehler auf Seite Seite 478, in dem die Klammerung falsch ist:

class Sample {}
 public static void main(String[] argv) {
  System.out.println("Hello World");
}

Der zweite Hammer haut aber stärker rein und ist definitiv kein Beispiel für ›Beautiful Code‹. Seite 332 stellt eine EJB Session-Bean FileReaderBean vor, die über eine FileInputStream Daten vom Dateisystem holt – das ist nun wirklich nicht in Ordnung. Toll finde ich, dass die Erlöse an Amnesty International gehen: ›All royalties from this book will be donated to Amnesty International.”. Das Kapitel 4 Finding Things (PDF) ist online.

Bug Patterns in Java
Eric Allen. Apress. ISBN 1590590619. 2002. 264 Seiten
Obwohl in dem Buch für erfahrene Java-Entwickler nicht so viel Neues zu finden ist, gefällt mir doch der Stil des Autors. Sätze wie „Sherlock Holmes, the world’s greatest detective and master debugger.“ oder „The whole is greater than the sum of its parts.“ lockern seine Liste von Fehlermustern erfolgreich auf. Im Besonderen lenkte Eric meine Aufmerksam auf die Tatsache, dass Assertions ja eigentlich an die Schnittstellen müssen und nicht an die Klassen. Auf diesem Weg werden Klassen der Intention Folge leistend tatsächlich funktional implementiert. Über seine Aussage „Use checked exceptions to ensure that all clients handle exceptional conditions.“ sollte man gründlich nachdenken. Interessant ist auch die Überlegung zu den Zuständen vom Iterator: „One example of an accessor that modifies state is the next method in java.util.Iterator. It is natural to call this method to retrieve the next element while iterating over a Collection, but if it’s called more than once in a single iteration, an element may be lost. It would have been better to separate next() into two methods: one to retrieve the current element, and one to move forward by one element.“. September 2007

Better, Faster, Lighter Java
Justin Gehtland, Bruce A. Tate. O’Reilly. ISBN 0596006764. 2004. 250 Seiten
Schmales Buch über Dies und Das, weder Fisch noch Fleisch. Eine Prise Anti-Pattern, altbekanntes zu Design, ein wenig XP und Hibernate sowie eine kleine Einführung in Spring. Ich bin für absolute Aussagen auch nicht so zu haben, so wie Bruce sie schon in seinem ersten Buch „Bitter Java“ machte: „No entity beans and CMP altogether. Entity beans are unwieldy albatrosses that take tremendous energy to understand, code, tune, and maintain. Better solutions are out there; find them.“, „No stateful session beans Avoid stateful session beans. You’re better off using HTTP sessions or databases, depending on your solution. Those solutions are more broadly adopted and won’t tie you to EJB for the long term.“ Und später „EJB Vendors and customers alike spend too much time building on this dead-end technology.“ Für Konfigurationen hätte durchaus ein Hinweis auf das Apache-Commons Configuration Paket fallen dürfen, wenn denn schonhttp://commons.apache.org/digester/ erwähnt wird. Gut finde ich etwa die Tabelle „Java’s most common golden hammers“ und die Auseinandersetzung mit Frameworks, die die Welt nicht wirklich braucht. September 2007

Java in Practice. Design Styles and Idioms for Effective Java
Nigel Warren, Philip Bishop. Addison-Wesley. ISBN 0201360659. Ende 1998. 209 Seiten
Wer mit Java beginnt, kann etwas lernen, erfahrene Entwickler mit OOP- und Pattern-Hintergrund werden sich langweilen. Merkwürde Namenskonventionen irritieren, so enden Attribute mit einen Unterstrich und auf Seite 112 wird kommentiert: „classFinalize() […] will be called by the runtime when the class is unloaded“. Aber in Die Spezifikation der virtuellen Maschine (1987!) wird schon erklärt, dass das nie implementiert wurde. Ein Update täte dem Buch gut, denn der Titel ist großartig. Denn der Bezug auf alte Datenstrukturen wie Vector oder Schnittstellen wie Iterator sollten der Vergangenheit anhören. August 2006

Java Platform Performance. Strategies and Tactics
Steve Wilson, Jeff Kesselman.Addison-Wesley. ISBN 0201709694. 2000. 230 Seiten
Mal ganz nett für zwischendurch. So richtig harte Informationen findet man aber nicht. Einiges ist unvollständig, wie die Optimierung von Swing-Renderern. Java EE Themen fehlen komplett. Das Buch ist auch komplett onlineNovember 2006

Design mit Java. Bessere Applets und Anwendungen
Peter Coad, Mark Mayfield
Peter Coad gilt als Objektguru. In diesem Buch beschreibt es Strategien zum bessern Design in fünf Kapiteln: Design am Beispiel, Komposition statt Vererbung, Design mit Schnittstellen, Threads, Benachrichtigungen. Besonders gut hat mir Design mit Schnittstellen gefallen. Leider sind seine Bücher von einem gewöhnungsbedürftigen Schreibstil. Über die fast 300 Seiten ziehen sich Beispiele und Bauanleitungen. Die Schreibweise macht mir ein bisschen zu schaffen, da der Text häufig im Frage/Antwortstil gehalten ist. Man muss sich immer durch Beispiele kämpfen, Quellcode und UML-Diagramme lesen, was anstrengend ist.Februar 2001

Java2 Designmuster und Zertifizierungswissen
Friedrich Esser. Galileo Press. ISBN 3-934358-66-7. 2001. 654 Seiten
Eines vorweg. Das Buch hat mit Zertifizierungswissen so ziemlich gar nichts zu tun und wenn man die Designmuster der GoF sucht, wird man hier ebenfalls nicht fündig. Vermutlich hätte ich mir das Buch sonst auch nicht zugelegt, aber so hat es mir der Galileo-Verlag geschenkt, als ich mich zum ersten mal mit meiner Lektorin getroffen habe. Als ich dann mit dem Lesen anfing war ich dennoch sehr zufrieden. Man muss jedoch damit leben, dass das Buch keine vernünftige didaktische Einführung gibt (obwohl des nach dem Inhaltsverzeichnis den Anschein hat); es ähnelt mehr oder weniger einem Sammelsurium von interessanten Themen und Dingen. Immer wieder werden Design-Ansätze verglichen. Wer also schon mit Java umgeben kann, der findet hier immer noch nette Codebeispiele. Meine Empfehlung. August 2001

Performant Java programmieren. Performance-Fallen erkennen und vermeiden
Hendrik Schreiber. Addison-Wesley. ISBN-13: 978-3827320032. 2002. 328 Seiten
Führt in die Optimierung von Java SE Anwendungen ein. Die Optimierungen wirken heute vielfach kleinkariert. Eine Aktualisierung täte dem Buch gut.

Java Performance Tuning
Jack Shirazi. O’Reilly & Associates, Inc. ISBN 0-596-00377-3. 2. Auflage 588 Seiten
Ich kenne nur die erste Auflage und da steht kaum etwas drin, was man wirklich für Enterprise-Applikationen verwerten kann. Die Tipps sind zwar OK, und auch so weit richtig, doch in der ersten Auflage finden sich — Ooh — null Seiten Datenbanken, 0 Seiten EJB, 0 Seiten Swing/AWT. Was will man damit? Zwar schön zu wissen, dass if mal schneller ist als ein switch, aber seien wir doch mal ehrlich: Für wen sind solche Optimierungen interessant? Da ist es doch schon wichtiger zu vermitteln, dass es Connection-Pools gibt und was es für EJB-Pattern gibt. Das Buch enthält fast nur Wischi-Waschi-Optimierungen und die richtig harten Sachen fehlen. Demokapitel über verteilte Programmierung. Am Besten ist da die Webseite vom Autor. November 2001

Sun Performance and Tuning: Java and the Internet
Adrian Cockcroft (Hui, der wurde in der Schule bestimmt immer gehänselt.), Richard Pettit
Die Autoren beschreiben alle optimierbaren Bereiche eines Computers wie Netzwerk, Disk-Array, Speicher usw. Mit vorgestellten Tools werden Schwachstellen aufgezeigt bzw. gelehrt, wie diese zu beheben sind. Mein Interesse galt in erster Linie Java, was aber nur sehr mangelhaft beschreiben wird. Der Titel verspricht mehr. Dafür fand ich TCP/IP Optimierung ganz gut. Sonst ist das Buch nach meiner Einschätzung ehr was für Systemadministratoren. Februar 2k