Vor einiger Zeit hatte mir Ralf Westphal ein Rezensionsexemplar seines und Christian Weyers Buch .NET 3.0 kompakt geschickt. Die beiden habe ich im Sommer 2003 beim .NET Summercamp kennengelernt, die die .NET User Group Leipzig schon seit einiger Zeit in eigener Regie organisiert¹. Seitdem haben wir uns näher kennengelernt, nicht nur, weil ich damals für .NET kompakt ein Autogramm haben wollte und Ralf im ersten Moment ziemlich perplex deswegen war. Meine Antwort damals auf seine "Schreibblockade" beim Autogramm war: "Wer Bücher schreibt, muss auch Autogramme geben" und schon hatte ich eines, nachdem sich Ralf dafür selber einen Text dazu einfallen musste. Das von Christian Ad hoc als Text vorgeschlagene "In Liebe" hat er dann doch nicht geschrieben. ;)
Damit gleich zur Frage – kann man mit dem Buch .NET 3.0 kompakt ".NET lieben lernen"? Was ist .NET eigentlich, in was man sich möglicherweise verliebt? Ist das etwas Ernstes, Sinnvolles fürs Leben oder ist es nur einfach wieder ein Hype, quasi wie eine Affäre, nichts langfristiges und auf lange Zeit reizvolles?

Schon bei der Einführung von .NET 1.0 im Jahr 2002 war .NET nicht leicht zu umreißen, zumal plötzlich der Begriff bei den gängigen Produkten von Microsoft wie den Serverbetriebssystemen vom Marketing als Attribut regelrecht missbraucht wurde. .NET war inhärent dabei, selbst, wenn es das nicht war. Schon mit dem Buch
.NET kompakt hat Ralf meiner Meinung nach sehr nachvollziehbare Argumentationsketten geschrieben, was .NET ist und was nicht. Auch bei .NET 3.0 kompakt hat er, dieses Mal zusammen mit Christian, das erneut getan. Dass Ralf ab und zu zulässige, aber für den einen oder anderen Leser etwas an gewöhnungsbedürften Formulierungen verwendet wie ein "... stellt sich wie schon in .NET 2.0... was denn .NET überhaupt sei?" statt einem "was denn .NET überhaupt ist" oder "... der .NET Framework... " statt "das .NET Framework"² tut dem Inhalt nichts ab. Ich finde, das ist irgendwie ein Markenzeichen von Ralf. Doch zurück zu der Frage, ob .NET etwas fürs Leben ist. Das muss jeder selber entscheiden und auch .NET hat irgendwann wie alles einen Nachfolger. Das Buch hilft bei einer Einschätzung dabei und stellt einleitend neben der Beantwortung der Frage was .NET ist und was nicht, auch das veränderte Ökosystem in diesem Umfeld dar. Mit Ökosystem ist dabei das Wirkungsgefüge bei der Softwareentwicklung und mit Veränderung der Weg vom Generalisten zu Spezialisten gemeint. In den wenigsten Büchern steht so was, zumeist werden die jeweiligen Technologien wie ADO.NET oder ASP.NET bzw. ganz dedizierte Themen wie Smart Clients mit .NET in den Vordergrund gerückt aber eine wichtige Einordnung dieser Themengebiete und Hinweise auf Lernkurven fehlen².
Ich bin kein Freund von ewig langen Rezensionen von Büchern, es sei denn, es geht um eine akademisch anspruchsvolle Analyse oder eine Rezension von Ausmaßen der eines Marcel Reich-Ranicki oder Hellmuth Karasek. Zumeist geht es mehr oder weniger um eine Kaufempfehlung für die potentiellen Leser. Ist das Buch gut lesbar oder nicht? Hat es eine klar definierte Zielgruppe oder nicht und trifft der Inhalt die Bedürfnisse dieser? Kommt es mit einer großen Aufmache aber beinhaltet nur heiße Luft? Nicht selten hat ein Buch bei Amazon & Co. schon eine negative Rezension von Kunden bezüglich dieser Punkte erhalten. Demzufolge dürfte es sich um das handeln, was es potentielle Käufer interessiert: Was steht also in dem Buch und wie ist dieser Inhalt? Lohnen sich 17 EUR für Christians und Ralfs Buch?
Das Buch geht auf 221 Seiten auf folgende Inhalte ein
- Was .NET ist
- Welche Leistungsmerkmale von .NET 2.0 / 3.0 die Softwareentwicklung weiter vereinfachen
- Wie Workflows in Anwendungen Einzug halten können
- Wie der SAA-Standard (CUA) überwunden und neue Oberflächen entworfen werden können
- Wie Systeme miteinander verbunden werden können
- Was nach .NET 2.0 / 3.0 kommt
Resultat: Für alle die, die .NET als etwas nicht fassbares, als eine Art "Wolke" Technologie empfinden, ist das Buch lesenswert. Der Begriff .NET wird verständlicher, auch wenn er dadurch nicht unbedingt sofort greifbarer wird, denn wie "ein Mycel durchdringt es die Produkte und Technologien von Microsoft"4. Eingangs wird des Öfteren auf .NET kompakt verwiesen aber ich denke, für jeden .NET-Beginner reichen die Erläuterungen in .NET 3.0 kompakt. Wer .NET wiederum schon kennt, bekommt im Managerstil kurz und prägnant die mit .NET 2.0 / 3.0 verbundenen Neuerungen. Wer dann Lust auf Extension Methods, Lamba-Ausdrücke, Anonyme Typen oder gar LINQ verspürt, findet zwar immer ein kleines Beispiel, aber um von einem "ich hab's mal gesehen" zu "ich kann es anwenden und weiß auch wo und wann" zu kommen, reichen die Inhalte im Buch bei Weitem nicht . Ist das schlimm? Nein, ich finde damit entspricht es sicherlich der Zielgruppe und auch deren Erwartungen und so kann ich es .NET-Beginnern und auch den -Entwicklern, die einen Überblick über neues im .NET-Universum haben möchten, nur empfehlen.
--
Was ist mir bei der Lektüre aufgefallen? Einfach so drauf los geschrieben:
- Bei domänenspezifischen Sprachen sind die Autoren durcheinandergekommen: Sie schreiben von "domänenspezifischen grafischen", dann von "grafischen domänenspezifischen" Sprachen sowie "grafischen Programmiersprachen". Besser ist: Visuelle domänenspezifische Sprachen. Siehe Seite 6, 19 und 209.
- Die Autoren schreiben von der Trennung von Programmcode vom HTML einer Webanwendung und dem Namen dieser Technologie als Code Behind. Der geneigte Leser mag vielleicht denken, dass diese Technologie auch bei .NET 2.0 so heißt. Sie heißt hier ein wenig anders, nämlich Code Beside5. Mit Code Beside kommt die Mächtigkeit dieser Technologie besser zum Ausdruck. Da läuft nicht ominös und nicht-transparent Anwendungscode im Hintergrund, sondern fügt sich neben selbst geschriebenen Anwendungscode und weiteren Beschreibungssprachen nahtlos ein. Diese Technologie ist auch als ein Unterschied der Modellgetriebenen Architektur (MDA; engl. Model Driven Architecture, MDA) zu den domänenspezifischen Sprachen zu sehen. Während bei MDA Anwendungscode in dafür vorgesehende Slots eingefügt wird, wird beim Ansatz der DSLs Anwendungscode neben dem generierten Anwendungscode gestellt. Siehe Seite 22, 105, 110, 128 und noch ein paar Mal mit Buch irgendwo.
- Ich denke "Werttyp-Daten" gibt es nicht und verwirrt nur, besser wäre einfach "Werttypen". Siehe Seite 26.
- Wissen die Leser was mit "... Boxing führt zu einem erhöhten Druck auf den Heap..." gemeint ist? Ich habe da meine Bedenken – es ist ein unglücklich gewähltes Bild. Siehe Seite 27.
- "... den Delegaten-Typ Predicate<T> haben Sie oben ja schon..." – nur leider ist "oben" Seite 33. Ein Buch wird nicht unbedingt linear vom Anfang zum Ende gelesen. Ein Verweis von Seite 47 auf Seite 33 ohne Seitenangabe ist sehr unschön.
- Wir – gemeinsam sind wir stark! Die wichtigste Regel, die leider aber von den wenigsten Autoren beherzigt wird, ist, nicht in der Wir- oder in der Uns-Form zu schreiben. Sehr fraglich, warum das durch das Lektorat gegangen ist, bei den meisten Verlagen ist es absolutes Tabu. Christian wird sich vielleicht noch an das "Wie geht's und denn heute?" erinnern: Vielleicht sind die paar "Wir" eine Hommage an die Kellnerin des Marriott? ;) Im Buch insbesondere ab Seite 61 ff. zu finden.
- "... Bildschirmfoto...", "... Exempel..." – vielleicht meinte der Autor ja "example"? Ein Exempel lässt die Lateiner (lat. exemplum) aufhorchen, denn es ist ein warnendes Beispiel und man spricht daher auch vom Exempel statuieren. Bestimmt ist statt Exempel Beispiel gemeint. Gesehen auf Seite 67, 68 und 98.
- Zwischen dem Kapitel "Code vereinfachen" und "Logik fließen lassen" gibt es einen Stilbruch. Das Kapitel "Code vereinfachen" ist sehr technisch, arbeitet dazu mit wenig bildhaften Darstellungen und enthält sehr viele Fachbegriffe. Das Kapitel "Logik fließen lassen" ist sehr locker geschrieben, und enthält viele Fakten. Das gilt auch für die beiden folgenden Kapitel "Oberfläche aufpeppen" und "Systeme verbinden". Das vorletzte Kapitel "Jenseits von .NET 3.0" ist wiederum im Stil wie "Code vereinfachen" geschrieben. Bei den genannten drei Kapiteln in der Mitte hätte ich mir also weniger Fakten und dafür ein paar mehr Visionen, halt etwas Raum für Ideen was man damit machen kann, gewünscht.
- Das Kapitel "Logik fließen lassen" ist mir persönlich zu lang geraten. Nach etwas mehr als der Hälfte des Kapitels mit insgesamt 43 Seiten, musste ich schauen, wie viel noch kommt. Drei, vier Seiten weniger, damit weniger über Activity-Kategorien, weniger über HandleExternalEventActivity und mehr was man damit machen kann, als wie es funktioniert und das Kapitel wäre optimal.
- "Sie riechen auch... sicherlich... einen erhöhten Mehraufwand in der Programmierung... mit den richtigen Werkzeugen... werden diese... Konzepte schnell automatisiert genutzt werden können." Wo sind Verweise auf das Web? Wo sind Verweise auf Literatur? Das sich irgendwie, irgendwann irgendetwas, irgendwo für die Windows Communication Foundation schon finden wird, ist klar. ;). Gesehen auf Seite 155.
- Sehr gut finde ich, dass die beiden Autoren Web Services "zurechtstutzen". Sie sind "... im WCF-Kontext nur ein kleines Implementierungsdetail in Form eines Bindings...". Vollkommen richtig, doch nach wie vor sind leider einige Berater nicht nur im Bezug auf die Windows Communication Foundation gegenüber "eine Serviceorientierung heißt nicht Web Service-Orientierung" resistent. .NET-Einsteigern sollte das von Anfang an bewusst sein. Gefunden auf Seite 161.
- Manche der Abbildungen sind ganz "schrecklich" – sie haben einen schwarzen Hintergrund. Siehe Seite 99, 128 und Seite 179.
- Die Autoren schreiben, dass Iteratoren und Generics nur eher Verfeinerungen und evolutionäre Schritte gegenüber beispielsweise partiellen Typen sind, die einen größeren Impact haben sollen. Ich finde das stimmt nicht. Sicherlich gibt es solche Techniken schon länger, wie den Templates bei C++ und es gibt auch viel mächtigere Vorangehensweisen wie non-invasive Frames und auch ich hätte mir Generics schon bei .NET 1.0 gewünscht – aber das sie nur eine Verfeinerung sein sollen, würdigt nicht ihre Bedeutung. Mit Generics können Entwurfsmuster wie das Singleton variabel gemacht werden, Generics ermöglichen erst die ab der Aussage, dass es sich bei nur um Verfeinerungen handelt, kommenden 24 Seiten über LINQ & Co. Generics finden eine breite Anwendung. Sie sind mehr als eine einfache Verfeinerung. Warum das auch so in einem früheren Kapitel mit "Generics sind wahrscheinlich das am meisten thematisierte Sprachfeature des .NET Frameworks 2.0... eine gleichermaßen grundlegende wie rundum positive Erweiterung... kaum noch ohne sie auskommen werden." steht? Ich denke da war nicht ein- und derselbe Autor am Werk. Siehe Seite 27 und 185.
- Im Kapitel "Weiterführende Informationen" und dort in den Abschnitten "Literatur" sowie "Links" werden Verweise auf das Internet in Form einiger langer URLs aufgeführt. Ich finde, URLs mit um die 20 Zeichen und mehr sind out, nicht nur, weil Verweise ins Internet relativ schnell veralten. Da muss was anderes her, sei es in der Form wie tinyurl oder einem Werkzeug dafür, sobald es mehr Verweise werden (wie in Programmieren mit dem .NET Compact Framework – ohne jetzt dafür Werbung machen zu wollen und nur weil Ralf diese Lösung selbst gelobt hat). Siehe Seite 210 ff.
- Im Buch wird "Fließquelltext" verwendet; dass erste Buch, was mir in dieser Form aufgefallen ist. Das gefällt mir sehr gut.
¹ Das nächste .NET Summercamp läuft vom 24.09. - 28.09.2007 – Informationen dazu gibt es hier.
² Specializing Generalist – das ist die "besondere" Ausprägung vom Weg zur Spezialisierung. Was soll es ausdrücken? Am besten passt ein Verweis: David Perkins is a specializing generalist. This means that David has applied his general skill set into multiple types of specialized roles. David has consistently used his general skills of problem solving, process identification, and planning to achieve superior results. David has specialized his general skills into the areas of business analysis, solution architecture, high reliability software development, systems engineering, process procedure implementation and project management.
³ Das .NET Framework oder der .NET Framework? Welcher Artikel ist richtig? Für das Genus gibt es bei Entlehnungen bzw. Fremdwörtern zwar keine festen Regeln, aber bestimmte Prinzipien. Ein häufig angewandtes Prinzip ist, dass das Genus der deutschen Entsprechung oder eines sinnverwandten deutschen Wortes übernommen wird. Das wäre bei -work "_das_ Werk". Das komplexe Wort "Framework" hat die Struktur einer Zusammensetzung, wo das Zweitglied Wortart, bei Substantiven auch das Genus und die Bedeutung bestimmt (NET ist dann wieder eine nähere Bestimmung dazu). Man kann sich also auch an analogen Fällen wie _Teamwork, Network_ orientieren, die beide sächlich sind. Teamwork findet man auch im Rechtschreibduden, Network immerhin im "Duden. Deutsches Universalwörterbuch". Die Unsicherheit entsteht sicher hier auch dadurch, dass ".NET Framework" wie ein Eigenname meist ohne Artikel verwendet wird.
Quelle: Frau Dr. Hannelore Poethe von der Universität Leipzig.
4 S. 7
5 Alex Kommentar: Bei ASP.NET 2.0 heißt das Tag, sicher aus Gründen einer Abwärtskompatibilität, immer noch codebehind.