Software Development

Robert C. Martin: "Agile Software Development - Principles, Patterns, and Practices", Prentice Hall, 2002
This book presents the principles of the Agile Manifesto along with the Practices of eXtreme Programming and the principles of object-oriented design. These latter ones give you a grip on concepts that you may have been following intuitively without having been able to name them. The examples in the book are rigorously developed by test driven development. An example is available online among other sample chapters.

Andrew Hunt, David Thomas, Ward Cunningham: "The Pragmatic Programmer: From Journeyman to Master", Addison-Wesley Pub Co, 1999
Very gripping metaphors for the software development process. A good starting point for finding out what crafts are worth learning as a software developer.

Brian W. Kernighan, Rob Pike: "The Practice of Programming", Addison-Wesley Pub Co, 1999
From the UNIX/C-gurus. A pragmatic view of the software developer's tasks treating among other subjects: debugging, choice of programming language, coding style and their impact on the project at hand.

Eric M. Burke and Brian M. Coyner: "Java Extreme Programming Cookbook", O'Reilly, 2003
Test Driven Development, Recipes for ant, Tomcat, JUnit, XDoclet, HttpUnit. Highly recommendable

Ernest Friedman-Hill: "Jess in Action", Manning Publications, 2003
The book starts out with a short general intro to rule based systems and then dives into a hands-on Jess experience with several real-world scenarios. The author of the book is the creator of Jess himself and he manages to quickly fascinate for the subject.


Andrei Alexandrescu: "Modern C++ Design", Addison Wesley, 2001
Hot Stuff! Applying the "Strategy" Design Pattern at compile time, only it's called "policy" here... After all you can develop a concrete library of Design Patterns... To use Scott Meyers' words: if this doesn't blow your socks off, it must be because you're already barefoot...

Ulla Kirch-Prinz, Peter Prinz: "C++ lernen und professionell anwenden", mitp-Verlag, Bonn, 3. Auflage, 2005

These comments are in German, since it's a German book. (Though, surprisingly, this book got translated into English!)

   Das Prinz-Buch ist ganz brauchbar beim Codieren von Zeile zu Zeile C++.
   Ansonsten ist es nicht auf dem Stand von C++ und ein denkbar ungünstiges
   Vorbild für objektorientierte Programmierung.

   z.B.: p. 233, 227: Verwendung von "static", um ein Element modulglobal zu machen.

   Gemäss [Stroustrup], p. 200: "In C and older C++ programs, the keyword
   static is (confusingly) used to mean 'use internal linkage' (§B2.3)
   Don't use static except inside functions (§7.1.2) and classes (§10.2.4)"

   D.h. anstatt

     static int gModulGlobal = 0;

   soll gemäss Stroustrup

     namespace { int gModulGlobal = 0; }

   verwendet werden.

   Ich habe meine Studierenden darauf hingewiesen, dass die Musterlösung 
   zur Aufgabe in Kapitel 26 gut als Gegenbeispiel für objektorientierte 
   Programmierung verwendet werden kann.

   Siehe S. 606:
   Im Kopierkonstruktor wird abhängig vom Typ des vorliegenden Elements Code
   ausgeführt. Dies ist im allgemeinen ein Anzeichen dafür, dass die
   Möglichkeiten des Polymorphismus nicht genutzt, sondern mühsam und
   schlecht wartbar "von Hand" implementiert wurden. 

   Was passiert z.B. wenn ein neuer Cell-Typ eingeführt wird? Dann muss 
   wieder InhomList angepasst werden.

   In diesem Sinne ist es auch keine gute Idee, dass die Klasse InhomList selber
   die Cell-Objekte herstellt. Dann müssen wir nämlich für jeden
   neuen Cell-Typ auch die InhomList-Klasse wieder anpassen.

   Ich habe deshalb die doppelt geführten Methoden "insertAfter" und "insert"
   entfernt und die Konstruktion der Cell-Objekte dem Client von InhomList

   Auch die Cell-Hierarchie ist problematisch:
   Cell<-BaseEl<-DerivedEl. Statt von einer konkreten Klasse abzuleiten 
   sollte eine gemeinsame abstrakte Oberklasse eingeführt werden.
   Dazu z.B. [Meyers96], p. 168: "The way to say that two classes have
   something in common is not to have one class inherit from the other, but to
   have both of them inherit from a common base class." (detaillierter:

   Das Buch verweist ausserdem auf kein einziges anderes Buch, und es 
   enthält auch keine Bibliographie. Sehr verdächtig.

[Prinz]      Peter Prinz et al: "C++ Lernen und professionell anwenden",
             3. Auflage, mitp-Verlag, Bonn, 2005.
[Stroustrup] Bjarne Stroustrup: "The C++ Programming Language Special
             3rd Edition)", Addison-Wesley Professional, 2000.
[Meyers95]   Scott Meyers: "min, max, and more", C++ Report, Januar 1995.
[Meyers96]   Scott Meyers: "Effective C++ (1st edition, Eleventh printing, August 1996)"


Serge Demeyer et al.:"Object-Oriented Reengineering Patterns" ., Morgan Kaufmann, 2002
Substantial contribution to the subject. Focuses on the reengineering of object-oriented legacy systems with their very particular challenges.


John Crisp:"Introduction to Microprocessors and Microcontrollers, 2nd edition" , Newnes, 2003
Introductory level. Detail: unfortunately fails to present the easily applicable horner rule to convert hex numbers to decimal.
Includes basic circuit diagrams.


Melody Y. Ivory:"Automated Web Site Evaluation" , Kluwer Academic Publishers, 2003
Provides a classification framework for automated web site evaluation tools and applies it to a vast collection of such tools. Furthermore explores strategies in enhancing web sites after evaluation. The author's mainspring is enabling users to easily interact with information. Definitely worth a read for web design assignees.


Neil Stephenson : "In the beginning... was the command line", Avon books, 1999. Available online: