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

Java Extre­me Pro­gramming Cook­book
Eric M. Bur­ke, Bri­an M. Coy­ner. O’Reilly. ISBN 0−596−00387−0. März 2003. 288 Sei­ten
Vie­le XP-Bücher kon­zen­trie­ren sich auf die „mensch­li­che“ Sei­te der XP-Ent­wick­lung, aber nicht auf die Tools, die bei der XP-Ent­wick­lung einen gro­ßen Stel­le­wert ein­neh­men. Die­se Lücke ver­sucht das Buch mit einer Vor­stel­lung der Tools und Tech­no­lo­gi­en zu fül­len, die Anfang 2000 von Bedeu­tung waren: EJB 2, JUnit 3, CVS. Dumm ist nur, dass die Tech­no­lo­gi­en und Tools heu­te an Bedeu­tung ver­lo­ren haben und durch neue­re Pro­duk­te ersetzt wur­den, sodass auch das Buch heu­te nicht mehr son­der­lich span­nend ist und als ver­al­tet gel­ten kann. Java EE 5 (bzw. Java EE 6) erset­zen für Enter­pri­se-Pro­duk­te die J2EE 1.4, JUnit 3 ersetzt heu­te JUnit 4, Cac­tus wird nicht mehr wei­ter­ent­wi­ckelt, und Sub­ver­si­on ersetzt CVS. Für ein Buch, das es nicht nur bei den Kon­zep­ten belässt, son­dern auch tech­nisch tie­fer geht ein Pro­blem. Wei­ter­hin ist die aus­schließ­li­che Betrach­tung von Open Source etwas ein­schrän­kend. (Und der Titel des Buches ist nicht „Java XP Pro­gramming Cook­book with Open Source Tools“!) Es ist zwar toll, dass Open-Source Pro­duk­te nichts kos­ten und auch sehr ver­brei­tet sind, aber Her­stel­ler wie Atlas­si­an bie­ten sehr gute Pro­jek­te, die bei der XP-Ent­wick­lung hel­fen. Wei­ter­hin feh­len in mei­nen Augen eini­ge zen­tra­le Tools, und es reicht nicht, XP auf Ant, JUnit (zzgl. HttpU­nit, JUnit­Perf), Mocking, XDo­clet zu beschrän­ken. Hier gibt es bes­se­re Bücher. Febru­ar 2009

Prag­ma­tic Unit Tes­ting in Java with JUnit
Andy Hunt, Dave Tho­mas. The Prag­ma­tic Books­helf. ISBN 0−9745140−1−2. Sep­tem­ber 2003. 146 Sei­ten
Kom­pak­tes und nicht all­zu tie­fes Buch zu Test­kon­zep­ten und dem Test­frame­work JUnit 3.x. Gut gefal­len haben mir die Vor­stel­lung des COR­RECT-Prin­zips (Con­for­mance, Orde­ring, Ran­ge, Refe­rence, Exis­tence, Car­di­na­li­ty, Time), die Kurz­vor­stel­lung von Mock-Objek­ten (hier hät­te ich mir aller­dings etwas mehr Hin­wei­se gewünscht, wobei immer­hin Frame­works wie Easy­M­ock zur Spra­che kom­men) und die Dis­kus­si­on, wie die Test­bar­keit das Sys­tem­de­sign (posi­tiv) beein­flusst. Die Code­qua­li­tät ist in Ord­nung, aber Anwei­sun­gen wie Integer.valueOf(val).intValue() hät­te ich ger­ne als Integer.parseInt(val)gese­hen, denn der Auf­bau eines Wrap­per-Objekts (las­sen wir das Caching aus Java 5 außen vor) ist völ­lig unnö­tig (aber immer­hin ist die Fabrik­me­tho­de noch bes­ser als new Integer(val), denn sie kann immer­hin auf die gecach­ten Wrap­per­ob­jek­te im JDK zurück­grei­fen ). Scha­de, dass es im fol­gen­den Bei­spiel einen Com­pi­l­er­feh­ler gibt, denn der Autor woll­te gera­de die seman­ti­schen Feh­ler von den syn­tak­ti­schen Feh­lern unter­schei­den:

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

Die Namens­kon­ven­ti­on von Sun hal­ten die Auto­ren bei Varia­blen­na­men nicht ein: small_listbig_listnaughty_urlnext_indexstr_ftemp_fatemp_cmockJukebox_controlnum_lines, eine Kla­se Klas­se MyStack ist nicht bes­ser und die Para­me­ter­va­ria­ble aString und aThing (fin­de ich beson­ders krea­tiv). Aller­dings ist das alles nicht kon­sis­tent falsch, denn es gibt auch ingredientsText oder exitButton. Größ­tes Dilem­ma die­ser Aus­ga­be ist aber ihr Alter, da nicht der JUnit 4.x-Zweig ver­wen­det wird eben­so wenig wie Java 5, also kei­ne Gene­rics oder Anno­ta­tio­nen. Mit der rela­tiv fla­chen Beschrei­bung ist das Buch heu­te wenig attrak­tiv gibt aber den­noch einen prag­ma­ti­schen Ein­blick ins Tes­ten. Febru­ar 2009

Beau­ti­ful Code: Lea­ding Pro­gramm­ers Exp­lain How They Think
Andy Oram, Greg Wil­son. O’Reilly. 2007. 618 Sei­ten
Bekann­ten Auto­ren und Soft­ware-Archi­tek­ten geben in 33 Kapi­teln vie­le Bei­spie­le ihrer Kunst, und Ein­bli­cke in ihr Schaf­fen. Doch sehr spe­zi­el­le Bei­spie­le in diver­sen Pro­gram­mier­spra­chen machen es für Java-Pro­gram­mie­rer schwer, hier ›schö­nen Code‹ zu ent­de­cken. Unter dem Strich bleibt nicht viel für Java-Ent­wick­ler über, wenn Pro­gram­mier­spra­chen wie C, Ruby, LISP ihren Platz fin­den und Algo­rith­men vor­ge­stellt wer­den, die für die aller­meis­ten kaum rele­vant sind. Inter­es­sant ist es alle­mal, und wer sich viel Zeit für die Ein­ar­bei­tung nimmt, wird auch sicher­lich viel ent­de­cken, zumal das Design einen grö­ße­ren Stel­len­wert ein­nimmt, als der Quell­code an sich. Bei den weni­gen Java-Pro­gram­men gibt lei­der etwas zu bemän­geln. Ein­mal ein ein­fa­cher Feh­ler auf Sei­te Sei­te 478, in dem die Klam­me­rung falsch ist:

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

Der zwei­te Ham­mer haut aber stär­ker rein und ist defi­ni­tiv kein Bei­spiel für ›Beau­ti­ful Code‹. Sei­te 332 stellt eine EJB Ses­si­on-Bean File­Re­ader­Be­an vor, die über eine FileInputStream Daten vom Datei­sys­tem holt – das ist nun wirk­lich nicht in Ord­nung. Toll fin­de ich, dass die Erlö­se an Amnes­ty Inter­na­tio­nal gehen: ›All royal­ties from this book will be dona­ted to Amnes­ty Inter­na­tio­nal.”. Das Kapi­tel 4 Fin­ding Things (PDF) ist online.

Bug Pat­terns in Java
Eric Allen. Apress. ISBN 1590590619. 2002. 264 Sei­ten
Obwohl in dem Buch für erfah­re­ne Java-Ent­wick­ler nicht so viel Neu­es zu fin­den ist, gefällt mir doch der Stil des Autors. Sät­ze wie „Sher­lock Hol­mes, the world’s grea­test detec­tive and mas­ter debug­ger.“ oder „The who­le is grea­ter than the sum of its parts.“ lockern sei­ne Lis­te von Feh­ler­mus­tern erfolg­reich auf. Im Beson­de­ren lenk­te Eric mei­ne Auf­merk­sam auf die Tat­sa­che, dass Asser­ti­ons ja eigent­lich an die Schnitt­stel­len müs­sen und nicht an die Klas­sen. Auf die­sem Weg wer­den Klas­sen der Inten­ti­on Fol­ge leis­tend tat­säch­lich funk­tio­nal imple­men­tiert. Über sei­ne Aus­sa­ge „Use che­cked excep­ti­ons to ensu­re that all cli­ents hand­le excep­tio­nal con­di­ti­ons.“ soll­te man gründ­lich nach­den­ken. Inter­es­sant ist auch die Über­le­gung zu den Zustän­den vom Ite­ra­tor: „One examp­le of an acces­sor that modi­fies sta­te is the next method in java.util.Iterator. It is natu­ral to call this method to retrie­ve the next ele­ment while ite­ra­ting over a Collec­tion, but if it’s cal­led more than once in a sin­gle ite­ra­ti­on, an ele­ment may be lost. It would have been bet­ter to sepa­ra­te next() into two methods: one to retrie­ve the cur­rent ele­ment, and one to move for­ward by one ele­ment.“. Sep­tem­ber 2007

Bet­ter, Fas­ter, Ligh­ter Java
Jus­tin Geht­land, Bruce A. Tate. O’Reilly. ISBN 0596006764. 2004. 250 Sei­ten
Schma­les Buch über Dies und Das, weder Fisch noch Fleisch. Eine Pri­se Anti-Pat­tern, alt­be­kann­tes zu Design, ein wenig XP und Hiber­na­te sowie eine klei­ne Ein­füh­rung in Spring. Ich bin für abso­lu­te Aus­sa­gen auch nicht so zu haben, so wie Bruce sie schon in sei­nem ers­ten Buch „Bit­ter Java“ mach­te: „No ent­i­ty beans and CMP alto­ge­ther. Ent­i­ty beans are unwiel­dy alba­tros­ses that take tre­men­dous ener­gy to under­stand, code, tune, and main­tain. Bet­ter solu­ti­ons are out the­re; find them.“, „No sta­te­ful ses­si­on beans Avo­id sta­te­ful ses­si­on beans. You’re bet­ter off using HTTP ses­si­ons or data­ba­ses, depen­ding on your solu­ti­on. Tho­se solu­ti­ons are more broad­ly adop­ted and won’t tie you to EJB for the long term.“ Und spä­ter „EJB Ven­dors and custo­mers ali­ke spend too much time buil­ding on this dead-end tech­no­lo­gy.“ Für Kon­fi­gu­ra­tio­nen hät­te durch­aus ein Hin­weis auf das Apa­che-Com­mons Con­fi­gu­ra­ti­on Paket fal­len dür­fen, wenn denn schonhttp://commons.apache.org/digester/ erwähnt wird. Gut fin­de ich etwa die Tabel­le „Java’s most com­mon gol­den ham­mers“ und die Aus­ein­an­der­set­zung mit Frame­works, die die Welt nicht wirk­lich braucht. Sep­tem­ber 2007

Java in Prac­tice. Design Styles and Idi­oms for Effec­tive Java
Nigel War­ren, Phi­lip Bishop. Addi­son-Wes­ley. ISBN 0201360659. Ende 1998. 209 Sei­ten
Wer mit Java beginnt, kann etwas ler­nen, erfah­re­ne Ent­wick­ler mit OOP- und Pat­tern-Hin­ter­grund wer­den sich lang­wei­len. Merk­wür­de Namens­kon­ven­tio­nen irri­tie­ren, so enden Attri­bu­te mit einen Unter­strich und auf Sei­te 112 wird kom­men­tiert: „class­Fi­na­li­ze() […] will be cal­led by the run­ti­me when the class is unloa­ded“. Aber in Die Spe­zi­fi­ka­ti­on der vir­tu­el­len Maschi­ne (1987!) wird schon erklärt, dass das nie imple­men­tiert wur­de. Ein Update täte dem Buch gut, denn der Titel ist groß­ar­tig. Denn der Bezug auf alte Daten­struk­tu­ren wie Vector oder Schnitt­stel­len wie Iterator soll­ten der Ver­gan­gen­heit anhö­ren. August 2006

Java Plat­form Per­for­mance. Stra­te­gies and Tac­tics
Ste­ve Wil­son, Jeff Kesselman.Addison-Wesley. ISBN 0201709694. 2000. 230 Sei­ten
Mal ganz nett für zwi­schen­durch. So rich­tig har­te Infor­ma­tio­nen fin­det man aber nicht. Eini­ges ist unvoll­stän­dig, wie die Opti­mie­rung von Swing-Ren­de­rern. Java EE The­men feh­len kom­plett. Das Buch ist auch kom­plett onlineNovem­ber 2006

Design mit Java. Bes­se­re App­lets und Anwen­dun­gen
Peter Coad, Mark May­field
Peter Coad gilt als Objekt­gu­ru. In die­sem Buch beschreibt es Stra­te­gi­en zum bes­sern Design in fünf Kapi­teln: Design am Bei­spiel, Kom­po­si­ti­on statt Ver­er­bung, Design mit Schnitt­stel­len, Threads, Benach­rich­ti­gun­gen. Beson­ders gut hat mir Design mit Schnitt­stel­len gefal­len. Lei­der sind sei­ne Bücher von einem gewöh­nungs­be­dürf­ti­gen Schreib­stil. Über die fast 300 Sei­ten zie­hen sich Bei­spie­le und Bau­an­lei­tun­gen. Die Schreib­wei­se macht mir ein biss­chen zu schaf­fen, da der Text häu­fig im Frage/Antwortstil gehal­ten ist. Man muss sich immer durch Bei­spie­le kämp­fen, Quell­code und UML-Dia­gram­me lesen, was anstren­gend ist.Febru­ar 2001

Java2 Design­mus­ter und Zer­ti­fi­zie­rungs­wis­sen
Fried­rich Esser. Gali­leo Press. ISBN 3−934358−66−7. 2001. 654 Sei­ten
Eines vor­weg. Das Buch hat mit Zer­ti­fi­zie­rungs­wis­sen so ziem­lich gar nichts zu tun und wenn man die Design­mus­ter der GoF sucht, wird man hier eben­falls nicht fün­dig. Ver­mut­lich hät­te ich mir das Buch sonst auch nicht zuge­legt, aber so hat es mir der Gali­leo-Ver­lag geschenkt, als ich mich zum ers­ten mal mit mei­ner Lek­to­rin getrof­fen habe. Als ich dann mit dem Lesen anfing war ich den­noch sehr zufrie­den. Man muss jedoch damit leben, dass das Buch kei­ne ver­nünf­ti­ge didak­ti­sche Ein­füh­rung gibt (obwohl des nach dem Inhalts­ver­zeich­nis den Anschein hat); es ähnelt mehr oder weni­ger einem Sam­mel­su­ri­um von inter­es­san­ten The­men und Din­gen. Immer wie­der wer­den Design-Ansät­ze ver­gli­chen. Wer also schon mit Java umge­ben kann, der fin­det hier immer noch net­te Code­bei­spie­le. Mei­ne Emp­feh­lung. August 2001

Per­for­mant Java pro­gram­mie­ren. Per­for­mance-Fal­len erken­nen und ver­mei­den
Hen­drik Schrei­ber. Addi­son-Wes­ley. ISBN-13: 978–3827320032. 2002. 328 Sei­ten
Führt in die Opti­mie­rung von Java SE Anwen­dun­gen ein. Die Opti­mie­run­gen wir­ken heu­te viel­fach klein­ka­riert. Eine Aktua­li­sie­rung täte dem Buch gut.

Java Per­for­mance Tuning
Jack Shira­zi. O’Reilly & Asso­cia­tes, Inc. ISBN 0−596−00377−3. 2. Auf­la­ge 588 Sei­ten
Ich ken­ne nur die ers­te Auf­la­ge und da steht kaum etwas drin, was man wirk­lich für Enter­pri­se-Appli­ka­tio­nen ver­wer­ten kann. Die Tipps sind zwar OK, und auch so weit rich­tig, doch in der ers­ten Auf­la­ge fin­den sich — Ooh — null Sei­ten Daten­ban­ken, 0 Sei­ten EJB, 0 Sei­ten Swing/AWT. Was will man damit? Zwar schön zu wis­sen, dass if mal schnel­ler ist als ein switch, aber sei­en wir doch mal ehr­lich: Für wen sind sol­che Opti­mie­run­gen inter­es­sant? Da ist es doch schon wich­ti­ger zu ver­mit­teln, dass es Con­nec­tion-Pools gibt und was es für EJB-Pat­tern gibt. Das Buch ent­hält fast nur Wischi-Waschi-Opti­mie­run­gen und die rich­tig har­ten Sachen feh­len. Demo­ka­pi­tel über ver­teil­te Pro­gram­mie­rung. Am Bes­ten ist da die Web­sei­te vom Autor. Novem­ber 2001

Sun Per­for­mance and Tuning: Java and the Inter­net
Adri­an Cock­croft (Hui, der wur­de in der Schu­le bestimmt immer gehän­selt.), Richard Pet­tit
Die Auto­ren beschrei­ben alle opti­mier­ba­ren Berei­che eines Com­pu­ters wie Netz­werk, Disk-Array, Spei­cher usw. Mit vor­ge­stell­ten Tools wer­den Schwach­stel­len auf­ge­zeigt bzw. gelehrt, wie die­se zu behe­ben sind. Mein Inter­es­se galt in ers­ter Linie Java, was aber nur sehr man­gel­haft beschrei­ben wird. Der Titel ver­spricht mehr. Dafür fand ich TCP/IP Opti­mie­rung ganz gut. Sonst ist das Buch nach mei­ner Ein­schät­zung ehr was für Sys­tem­ad­mi­nis­tra­to­ren. Febru­ar 2k