<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schauderhaft &#187; reading</title>
	<atom:link href="http://blog.schauderhaft.de/tag/reading/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 05 Feb 2012 20:46:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>My Study  Technique</title>
		<link>http://blog.schauderhaft.de/2010/06/06/my-study-technique/</link>
		<comments>http://blog.schauderhaft.de/2010/06/06/my-study-technique/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 21:27:46 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[The Rest]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[reading]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=515</guid>
		<description><![CDATA[A couple of days ago my wife asked me: &#8220;How do you learn.&#8221; She is really great at this kind of question, which doesn&#8217;t seem to have an answer. At least I had no idea how I actually was learning. But my impression is that I am learning reasonably well. On the other hand, learning [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago my wife asked me: &#8220;How do you learn.&#8221; She is really great at this kind of question, which doesn&#8217;t seem to have an answer. At least I had no idea how I actually was learning. But my impression is that I am learning reasonably well. On the other hand, learning is something I&#8217;d be glad to improve on. So I started up my browser and searched a little about Study Techniques. Disappointingly most stuff I found was about memorizing stuff. I don&#8217;t know about you, but I don&#8217;t do that. I write stuff down. Instead of filling my head with phone numbers and dates of birth, I try to understand concepts. You know what, I think this is my first study technique:</p>
<p><strong>Don&#8217;t memorize, understand:</strong> Memorizing stuff is hard and mostly useless, when you actually want to apply your knowledge. Of course understanding stuff isn&#8217;t much easier, but it uses much less brain capacity once done, and you can apply your knowledge in new areas as well. So the question is: how do you achieve understanding? Here are my recommendations:</p>
<p><strong>Modify</strong>: When you read or hear something, think about what might happen if you change it a little. Let&#8217;s say you are learning a programming language, e.g. Java. One of the first things you&#8217;ll get taught is how to write a hello world program. Take that program and apply small changes: Add a semicolon on various places; Remove a semicolon; Change names and literals; Change the order of lines and so on. Most of these changes will result in a compilation failure. That&#8217;s great, because now you experience, what kind of mistakes cause which kind of exception. For example you will see that a program needs a main method and you&#8217;ll see what the exception looks like, when there is no such method.</p>
<p><strong>Compare:</strong> Compare the stuff you are learning with stuff you already know. This is extremely important. If you have nothing to compare with, all you can do is memorizing. This becomes extremely obvious, when kindergarten kids ask questions about quantum mechanics or software development. For example my son asked me what all these curly braces are for when programming. Trust me, that&#8217;s hard to explain to a five year old. On the other hand when I learned C, I already knew among others Pascal, so I immediately thought: &#8216;Ok, curly braces are like begin/end, just shorter&#8217;. Often it helps to compare to something, even though the comparison falls apart when looking close enough. Consider for example  the various analogies for software development. In the end they are all wrong, but still they are helpful, especially once you understand which parts of a comparison work and which don&#8217;t</p>
<p><strong>Build a mental model:</strong> Chances are when learning something new, you won&#8217;t understand every detail. Still build a model about what is going on, and about the purpose of different pieces.</p>
<p><strong>Verify (or falsify) your model:</strong> By experimentation, try to verify your model. This will force you to modify your model, until you will have a pretty decent one.</p>
<p><strong>Teach your new knowledge:</strong> When preparing a training, a presentation or a blog post about something, it forces you to really think  through it, thus deepening your understanding.</p>
<p><strong>Practice:</strong> All the stuff should happen during actual experimentation, not just in your head.</p>
<p>The last four steps are all about what you do with knowledge heading your way. So the obvious next question is: &#8220;How do you direct knowledge your way?&#8221;</p>
<p><strong>Read Books for in Depth Information:</strong> I  love the Internet, and you&#8217;ll find almost any information somewhere. But lot&#8217;s of it are just little pieces of wisdom (or stupidity) . The author of a good  book will put much more thought into his writing then the average blog author.</p>
<p><strong>Read Alternative Sources:</strong> Once you have a basic understanding of something read additional sources, for example blogs, Wikipedia articles (possibly in different languages), other books, scientific publications. This serves as repetition, but also as a source of various opinion.</p>
<p><strong>Reread your Sources:</strong> Especially with books I use little <a href="http://www.amazon.de/gp/product/B001HAT3OG?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B001HAT3OG">post-it index markers</a> to mark interesting pieces and some time after I finished a book, I&#8217;ll use these markers to go through the interesting pieces again.</p>
<p><strong>Provide yourself with a constant stream of information about the topic of interest:</strong> A good way for doing this is to subscribe to newsletters, or relevant blogs, or following relevant people on twitter. Of course paper based magazines work just as well. It will cause you to rethink the topic over and over again, thus triggering repetition.</p>
<p><strong>Keep a list of things you don&#8217;t understand yet and work on reducing that list:</strong> When I hear a term which I don&#8217;t know, but which might be interesting for me, I put down a note and look it up on google, wikipedia, or whatever seems appropriate asap. Just as the two points before it is a form of repetition, but it also builds a network of different but related terms, which helps in building comparisons.</p>
<p><strong>Stop reading when it doesn&#8217;t add value:</strong> This is a thing which I had problems with. Once I started a book, I had the habit of finishing it. Same for articles. This is stupid and a wast of time. There are so many great books, articles and sources of information out there. You won&#8217;t be able to read them all. So I consider it a critical thing to identify stuff that doesn&#8217;t add value for you and skip it. If that means skipping the rest of a 600 pages book after reading the table of content, that&#8217;s great. By the way: you absolutely should go through the table of content and the text on a back side of a book, in order to get an impression what the book is all about.</p>
<p>And finally there is the aspect of your environment, which largely affects your capability of learning.</p>
<p><strong>Motivate yourself:</strong> Why do little boys know so much about dinosaurs, often including all the difficult names? Yet grown ups have a hard time distinguishing a <a href="http://en.wikipedia.org/wiki/Brontosaurus">Brontosaurus</a> from a <a href="http://en.wikipedia.org/wiki/Pteranodon">Pteranodon</a>. They find dinosaurs cool. They are big, they are strong, and the boys soon realize, they know more about them than their parents. That is pure motivation. So find out for yourself why you want to learn something. What will be better, easier or more fun in your life once you grappled that new knowledge? Promise yourself a little gift once you are done with a piece of your learning. For tiny steps the gift should be tiny. For me such a little gift often is a tweet, publishing my progress to the world.</p>
<p><strong>Make yourself comfortable:</strong> Find a spot which you can easily access, and which offers everything you need for learning. This might include: Something to eat, to drink, music, a door to close, a comfy chair, a window with a nice view.</p>
<p><strong>Use your knowledge:</strong> In my opinion nothing is so gratifying and motivating as applying new knowledge. And again, you&#8217;ll find the limits of your understanding, giving you a chance to push these limits outward.</p>
<p><strong>Know your preferred time for learning:</strong> There are certain times in the day where I&#8217;m more able to do mentally challenging stuff. For me the best time is the early morning. Your mileage my vary, but I am pretty sure everybody has such a time and should know it.</p>
<p>So these are my study techniques. What are yours?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2010/06/06/my-study-technique/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Debugging Software</title>
		<link>http://blog.schauderhaft.de/2009/07/18/debugging-software/</link>
		<comments>http://blog.schauderhaft.de/2009/07/18/debugging-software/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 05:21:43 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=172</guid>
		<description><![CDATA[Debugging is said to take about just as much time as coding, possibly even longer. Yet I don&#8217;t see a discussion about how to debug. So lets propose my personal process on this: Gather information. Make sure you have reliable information about Which application has a problem What are the steps to reproduce the problem [...]]]></description>
			<content:encoded><![CDATA[<p>Debugging is said to take about just as much time as coding, possibly even longer. Yet I don&#8217;t see a discussion about how to debug. So lets propose my personal process on this:</p>
<ol>
<li><strong>Gather information</strong>. Make sure you have reliable information about
<ul>
<li>Which application has a problem</li>
<li>What are the steps to reproduce the problem</li>
<li>The version of the application</li>
<li>Does it happen only to specific users, specific machines or to everyone everywhere</li>
<li>When did the problem start to happen</li>
</ul>
<p>The important part is the <strong>reliable</strong> part. Users are known to have a completely different perspective on applications. I had users swearing there was only one message box although there where two (they didn&#8217;t understand the content of the second, but it was the information needed by the developer). The last point is a difficult one. In many cases you will hear things like &#8220;Oh it just started today. Everything was fine the last two months&#8221; Just to find out, nobody had used that feature before. Probably the best source of information is a clean logging trail.</li>
<li><strong>Give a first estimate</strong>. Yes, that early. Most of the reasonable users are pretty happy with something like: I give you an update in half an hour. They might not be just as happy with: &#8220;I think I can look into this next month&#8221;  but if this is the case it is at least fair to let them know. If the problem is urgent and the resolution time is long a workaround might be needed. Check your estimate every now and then. If you realize that you can&#8217;t deliver on your estimate for whatever reason, let the user know.</li>
<li> <strong>Make sure the bug is a bug</strong> and not a butterfly. Although users sometimes have a different oppinion: Software can&#8217;t do what they wish. It can only do what they say. So many times the behavior now classified as a bug was considered a feature when it was specified. If this is the case let the user know, give him a reason why it is specified this way, and inform him about the chances to change it.</li>
<li><strong>Reproduce the problem</strong>. If possible reproduce it on your machine.</li>
<li><strong>Simplify</strong> and <strong>automate</strong>. Often the procedure to reproduce a problem is long, but often some steps aren&#8217;t necessary. By finding these step you&#8217;ll gather information about what influences the problem and what not. If possible you should automate the reproduction of the problem using a test case. With a serious bug you will execute the steps for reproducing the problem a lot. If this takes 2 minutes, spending 2 hours reproducing the problem with a testcase might easily payoff before the bug is fixed. But even if it doesn&#8217;t pay off immediatly you will have another test case in your Test Suite.</li>
<li>Now we finally start working on the buggy code. <strong>Find the place where the state of the application is not the way it is intended to be</strong>. Often this will be just before a NullPointerException is thrown, but it might be a line, where an event should get fired but doesn&#8217;t, or where the variable <tt>Pi</tt> is supposed to be equal to 4 but actually holds the value 2. Add debugging output to show the problem.</li>
<li><strong>Find a place</strong> shortly before the point found in step 6 <strong>where everything is ok</strong>. Add debugging output to show the absence of the problem.</li>
<li><strong>Find a place between</strong> the spots identified in step 6 and 7. Check if the problem is present at that spot. Document it with a debugging statement.</li>
<li><strong>Repeat</strong> from beginning from step 6 until you find the actual faulty line in the application.</li>
<li><strong>Fix it</strong>.</li>
<li><strong>Test it</strong> (should be easy with the automated test from step 5).</li>
<li><strong>Let the user know</strong> when she will receive the new version.</li>
</ol>
<p>Every process should have a tayloring advice to accompany it. So here it comes: You may not short cut the fixing, testing and communication part with the customer. You may use some short cuts in steps 6 through 9. But be prepared to return to the clean process when the shortcut turns out to be a cul de sac.</p>
<p>You may use your debugger instead of debugging output, but in the complex cases debugging output is easier and faster to use, especially if you have an automated test.</p>
<p>There are special cases that need some consideration, but those have to wait for a future post: Finding suitable starting points in step  6 and 7; Debugging in a distributed environment; Debugging with 3rd party software; reading stack traces.</p>
<p>What process do you use when debugging? What is missing? Let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/07/18/debugging-software/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Reading</title>
		<link>http://blog.schauderhaft.de/2009/07/03/reading/</link>
		<comments>http://blog.schauderhaft.de/2009/07/03/reading/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 11:21:58 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[The Rest]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=164</guid>
		<description><![CDATA[Jurgen Appelo wrote a great Article about his new strategy to read books in a parallel and non-sequential way. He uses sticky notes to mark the chapters he read in a book, thereby allowing him to read the most important unread chapter whenever he wants to read. I like the concept, but it does not [...]]]></description>
			<content:encoded><![CDATA[<p>Jurgen Appelo wrote a great Article about his new strategy to read books in a <a href="http://www.noop.nl/2009/07/reading-books-in-a-parallel-and-nonsequential-way.html">parallel and non-sequential way</a>. He uses sticky notes to mark the chapters he read in a book, thereby allowing him to read the most important unread chapter whenever he wants to read.</p>
<p>I like the concept, but it does not work for me. I read in a lot of different places and I read about 2-5 books or magazines in parallel most of the time. I do not want to carry those around all the time. In fact I read so many things in parallel because I don&#8217;t want to carry the books around. Instead I try to have a book at every place where I might want to read. One in the bed room, one in the bath, one in the living room, one at the office at <a href="http://www.lineas.de">LINEAS</a> and one at the desk at the customer for the lunch breaks. And last night I had to buy a new one because I was traveling by train and hadn&#8217;t a book yet for that place.</p>
<p>No matter if you are more like jurgen or more like me, or if you are one of these weird people that read one book at a time: Use Tools for Reading. At least when you are reading in order to learn something, you should use the following tools:</p>
<ol>
<li>a transparent ruler. Hold it under the current line. It will prevent you from loosing the line, and thereby enables faster reading. If a ruler is not available, a pen or a sheet of paper might work as well.</li>
<li>a pen. Put down notes. Put them on the margin of the book if you like or on post its, or on a seperate sheet of paper. Whatever, in my experience taking down notes, writing a short summary on after every chapter is the single most effective thing to prevent information to fall out of your ears, while you take it in through the eyes.</li>
</ol>
<p>Reading is such an important thing, there really should be more discussion about how we do it. So what are your reading tips?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/07/03/reading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie plant das Agile Projektmanagement?</title>
		<link>http://blog.schauderhaft.de/2008/09/22/wie-plant-das-agile-projektmanagement/</link>
		<comments>http://blog.schauderhaft.de/2008/09/22/wie-plant-das-agile-projektmanagement/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 21:12:45 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/09/22/wie-plant-das-agile-projektmanagement/</guid>
		<description><![CDATA[Spätestens seit dem Agilen Manifest gehört es in der Softwareentwicklung zum guten Ton agil zu sein. Die Argumente sind charmant: Nur das tun, was wirklich notwendig ist, nur dann wenn es wirklich notwendig ist. Nicht mehr Dokumente als unbedingt nötig. Andererseits hat die klassische Netzplantechink durchaus etwas für sich. Der Argumentation: Wenn A von B [...]]]></description>
			<content:encoded><![CDATA[<p>Spätestens seit dem <a href="http://agilemanifesto.org/">Agilen Manifest</a> gehört es in der Softwareentwicklung zum guten Ton agil zu sein. Die Argumente sind charmant: Nur das tun, was wirklich notwendig ist, nur dann wenn es wirklich notwendig ist. Nicht mehr Dokumente als unbedingt nötig.</p>
<p>Andererseits hat die klassische Netzplantechink durchaus etwas für sich. Der Argumentation: Wenn A von B abhängt, kann ich erst mit A beginnen, wenn B abgeschlossen ist, leuchtet ein. Und so mancher Vertreter der Agilen Methoden verwechselt wohl agil mit chaotisch.</p>
<p>Leute die Worte wie Agil, Iterativ und Inkrementell nutzen, aber nicht erklären können machen die Sache auch nicht besser.</p>
<p style="float: left; margin-left: 10px"><a href="http://www.amazon.de/gp/product/0131479415?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0131479415"><img src="/wp-content/uploads/2008/09/51pprabtj2l_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0131479415" border="0" alt="" width="1" height="1" /></p>
<p>Ich habe jemanden gefunden, der nicht nur diese Unterscheidungen kennt, der weiß wie man in agil geführten Projekten plant und schätzt, sondern der darüber sogar Bücher geschrieben hat. Mike Cohen. Na gut, ich habe ihn nicht persönlich kennengelernt, aber ich habe zwei seiner Bücher gelesen: &#8220;Agile Estimating and Planning&#8221; und &#8220;User Stories Applied&#8221;.</p>
<p style="float: right; margin-left: 10px"><a href="http://www.amazon.de/gp/product/0321205685?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0321205685"><img src="/wp-content/uploads/2008/09/519ubibqql_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0321205685" border="0" alt="" width="1" height="1" /></p>
<p>Beide Bücher kann ich empfehlen, obwohl ich nicht empfehlen würde beide Bücher hintereinander zu lesen, wie ich es getan habe. Dafür ist die Schnittmenge des Inhalts zu groß.</p>
<p>Genug der Werbung: Wie plant nun das agile Projektmanagement? In letzter Instanz nicht so viel anders, als das klassische Projektmanagement, wenn es richtig gemacht wird. Es wird das geplant was planbar ist, und was für eine erfolgreiche Weiterarbeit notwendig ist. Bei der klassischen Netzplantechnik ist es naheliegend alle Aktivitäten gleich detailliert zu planen, obwohl dies weder realistisch noch förderlich ist.</p>
<p>Mike Cohen empfiehlt getrennte Planungen für unterschiedlichen Planungshorizonte: Projekt, Release, Iteration, Tag. Dadurch wird auch gleich ein weiterer typischer Fehler von klassischem Projektmanagement vermieden: Bei Projektbeginn wird der Projektplan erstellt und dann allenfalls mit dem Projektfortschritt aktualisiert. Klar, dass der bald nichts mehr mit der Realität zu tun hat. Aber wenn der detaillierte Plan nur bis zum Feierabend reicht, dann kommt man nicht drum rum am nächsten Morgen einen neuen Plan zu machen. Das gleiche gilt für die Pläne auf Iteration und Release Ebene.</p>
<p>Damit wird das Möglich, was für mich ein ganz wichtiger Aspekt der agile Projektarbeit ausmacht: Embracing Change (Änderungen umarmen?) d.h. Änderungen der Ziele und Vorgaben werden nicht als Störung des Projektes betrachtet, sondern als integraler, willkommener Bestandteil des Projektgeschäftes.</p>
<p>Aber was passiert mit den heiß geliebten Gantt-Charts und der Netzplantechnik? Diese sind tatsächlich hinfällig. Als Ersatz für die Abhängigkeiten im Netzplan werden die Anforderungen (Stichwort: User Stories) so gewählt, dass sie möglichst unabhängig voneinander sind. An dieser Stelle wird die Sache meiner Meinung nach wirklich spannend. Warum meint die Softwarebranche ohne diese Abhängigkeiten zurecht zu kommen, obwohl andere Branchen seit Jahrzehnten darauf schwören? Weil bei (gut geschriebener) Software jeder Teil geändert werden kann, ohne dass dies nennenswerte Auswirkungen auf andere Teile hat, während dies bei klassischen produzierenden Gewerbe unmöglich ist.</p>
<p>Man stelle sich mal vor, bei einem fertigen Gebäude soll das Fundament ausgetauscht werden &#8230; unmöglich, unbezahlbar. Bei einem Programm die Persistenzschicht austauschen? Kein wirkliches Problem, natürlich müssen beide Varianten der Persistenzschicht entwickelt und letztendlich bezahlt werden, aber bei dem Rest des Programm sollte sich recht wenig ändern. Während das klassische Gebäude wohl komplett ab und wieder neu gebaut werden müsste. Dadurch ist es möglich die Bestandteile in beinahe beliebiger Reihenfolge zu erstellen. Im Umkehrschluss bedeutet dies aber auch, Projektanteile die nicht so flexible disponiert werden können, müssen entsprechend langfristig geplant werden. Know How in diesem Bereich ist also nicht verloren.</p>
<p>In allen anderen Bereichen geht es meist um eine verschobene Gewichtung: Wenn Plan und Realität auseinander gehen, wird dies eher über Anpassung der Ziele, d.h. des Projektumfangs aufgefangen, als durch Veränderung des Arbeitsvolumens. Dabei trifft der Kunde die Entscheidung was genau gestrichen oder angepasst werden sollte, anstatt wie ich es oft erlebt habe Grabenkämpfe um die Übernahmen der Kosten zu führen.</p>
<p>Löst das alle Probleme? Ganz sicher nicht. Letzten Endes geht es in Projekten um Geld und da wird es Konflikte geben. Aber ich bin überzeugt, fast alle Projekte könnten von einer kleinen oder größeren Prise &#8216;Agile Estimating and Planning&#8217; profitieren, nicht nur Softwareentwicklungsprojekte. Und wenn unsere Kunden das Buch lesen würden, könnten wir sie eher davon überzeugen gemeinsam ein Projekt zu machen anstatt gegeneinander.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/09/22/wie-plant-das-agile-projektmanagement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novelty, Magazin für Kreative?</title>
		<link>http://blog.schauderhaft.de/2008/09/09/novelty-magazin-fur-kreative/</link>
		<comments>http://blog.schauderhaft.de/2008/09/09/novelty-magazin-fur-kreative/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 21:23:17 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[The Rest]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/09/09/novelty-magazin-fur-kreative/</guid>
		<description><![CDATA[Vor einiger Zeit habe ich bei Xing unter &#8216;ich biete&#8217; &#8216;Ideen&#8217; angegeben. Vielleicht ist es nur ein zeitlicher Zusammenhang, aber vorgestern bekam ich ein Zeitschrift zu gesandt, die &#8216;exklusiv&#8217; für kreative Personen sei. Exklusiv klingt toll, kreativ auch. Unaufgefordert zugesandte Zeitschrift eher nicht. Exklusiv bedeutet laut der Zeitschrift beiliegendem Anschreiben: 30.000 ausgewählte Personen. Hmm &#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit habe ich bei <a href="http://www.xing.com">Xing</a> unter &#8216;ich biete&#8217; &#8216;Ideen&#8217; angegeben. Vielleicht ist es nur ein zeitlicher Zusammenhang, aber vorgestern bekam ich ein Zeitschrift zu gesandt, die &#8216;exklusiv&#8217; für kreative Personen sei. Exklusiv klingt toll, kreativ auch. Unaufgefordert zugesandte Zeitschrift eher nicht. Exklusiv bedeutet laut der Zeitschrift beiliegendem Anschreiben: 30.000 ausgewählte Personen. Hmm &#8230; ausgewählt ist nicht wirklich überraschend. Wer schon mal eine Abizeitung oder eine Hochzeitszeitung gemacht hat weiss, dass das auch nicht umsonst geht. Und 30.000 klingt nicht so wenig für eine erste Ausgabe einer Zeitschrift. Kurzer Vergleich mit Spektrum der Wissenschaft auf Wikipedia.de: Gut 90.000. Also wohl doch eher ein teures Massenmailing, mit der Option sie in Zukunft für 5 Euro 80 selbst zu kaufen.</p>
<p>Na gut, aber nur weil man nichts besonderes ist, kann man ja trotzdem mal reinschauen. Leider war kein Inhalt drin. Versteht mich nicht falsch: Seiten waren schon drin. Es standen auch Buchstaben und Bilder drauf, aber Inhalt war nicht dabei. Etwa ein Drittel der Seiten sind großformatige Werbung. Ganzseitig oder doppelseitig. Und wenn der Rest im Fernsehen liefe würde ständig &#8216;Dauerwerbesendung&#8217; eingeblendet werden.</p>
<p>Keine Spur von Kreativität, bis auf das Geschäftsmodel. Wenn man nämlich nach dem Verlag googelt landet man bei einer <a href="http://www.sb-konzept.de/index.php">Werbeagentur</a>. Anstatt also wie üblich zu Inhalt passende Werbung zu suchen, oder für Werbung passenden Inhalt, haben die einfachWerbung mit Werbung kombiniert und verkaufen das ganze jetzt.</p>
<p>Falls euch die Zeitschrift interessiert &#8230; ich habe mein Exemplar schon weggeschmissen, aber das <a href="http://www.oracle.com/oramag/index.html">Oracle Magazin</a> verfolgt ein ähnliches Konzept. Leider ist es kostenlos und durch die schlampige Redaktion schleichen sich eigentlich immer 3-4 Seiten Inhalt rein.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/09/09/novelty-magazin-fur-kreative/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Database Refactoring</title>
		<link>http://blog.schauderhaft.de/2008/08/22/database-refactoring/</link>
		<comments>http://blog.schauderhaft.de/2008/08/22/database-refactoring/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 19:46:25 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/08/22/database-refactoring/</guid>
		<description><![CDATA[Es gibt wohl kaum einen Java (oder C# oder was auch immer) Entwickler der was auf sich hält, und der nicht weiß was &#8216;refactorn&#8217; bedeutet. Es sei denn &#8216;was auch immer&#8217; steht für SQL, PL/SQL oder dergleichen. Denn Datenbanken und darin enthaltene Artefakte der Softwareentwicklung werden, aus welchen Gründen auch immer, anders behandelt, als &#8216;normaler&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt wohl kaum einen Java (oder C# oder was auch immer) Entwickler der was auf sich hält, und der nicht weiß was &#8216;refactorn&#8217; bedeutet. Es sei denn &#8216;was auch immer&#8217; steht für SQL, PL/SQL oder dergleichen. Denn Datenbanken und darin enthaltene Artefakte der Softwareentwicklung werden, aus welchen Gründen auch immer, anders behandelt, als &#8216;normaler&#8217; Code. Selbst die Verwendung eines <a href="http://www.codinghorror.com/blog/archives/000743.html">Versionskontrollsystems</a> ist <a href="http://www.codinghorror.com/blog/archives/001050.html">für viele Neuland</a>. Und die Idee Code quasi im Vorbeigehen zu verbessern, zu verfeinern und aufzuräumen erscheint vielen DBAs und Datenbankentwicklern völlig abwegig.</p>
<p style="float: left; margin-right: 10px"><a href="http://www.amazon.de/gp/product/0201485672?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0201485672"><img src="/wp-content/uploads/2008/08/519xt0der6l_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0201485672" border="0" alt="" width="1" height="1" /></p>
<p>Man muss den DBAs und Datenbankentwicklern zu Gute halten, das selbst Martin Fowler refaktorn von Datenbanken für besonders schwierig hält und es daher dieses Thema in seinem Buch &#8220;Refactoring&#8221; mehr oder weniger vollständig ausgeschlossen hat. Dieses Thema haben mittlerweile andere bearbeitet und seit einigen Jahren ist eine gesondertes Buch zum Thema Refactoring von Datenbanken verfügbar. Ich halte dieses Buch für sehr wichtig und lesenswert und es sei allen, die mit Datenbanken zu tun haben dringenst an Herz gelegt.</p>
<p style="float: right; margin-left: 10px"><a href="http://www.amazon.de/gp/product/0321293533?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0321293533"><img src="/wp-content/uploads/2008/08/217h82tkq3l_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0321293533" border="0" alt="" width="1" height="1" /></p>
<p>Allerdings muss ich den potentiellen Leser warnen. Die Autoren Scott Ambler und Pramodkumar Sadalage haben keinen Trick auf Lager, wie sie Änderungen von Datenbanken zwischen den verschiedenen Instanzen synchronisieren. Bei Änderungen an Datenbanken müssen sehr oft auch Daten aktualisiert werden und dies geht nur mit dem Wissen um diese Daten, dies kann nicht automatisiert werden. Es wird hier also korrekter Weise auf die manuelle Pflege von Skripten verwiesen. Leider hat sich die Hoffnung der Autoren bisher nicht erfüllt, dass leistungsfähige Tools für die Unterstützung dieser Aufgaben entstehen. Es gibt zwar mittlerweile einige, die Skripte verwalten, feststellen welche noch eingespielt werden und diese einspielen oder zu einen SQL Script zusammenführen. Aber diese Tools fühlen sich an wie ein Faustkeil, wenn man Werkzeuge wie IDEA oder Eclipse gewohnt ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/08/22/database-refactoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 08: Sprachen,  Concurrency, Security, Architektur</title>
		<link>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</link>
		<comments>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/#comments</comments>
		<pubDate>Mon, 19 May 2008 18:40:08 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[jax08]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</guid>
		<description><![CDATA[Wie schon erwähnt war ich vor ein paar Wochen auf der JAX 08, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse. Sprachen Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon <a href="/2008/04/24/komplexitat-und-die-neuen-sprachen/">erwähnt</a> war ich vor ein paar Wochen auf der <a href="http://it-republik.de/jaxenter/blog/2008/02/12/dynamische-sprachen-ruby-jruby-groovy-co/">JAX 08</a>, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse.</p>
<p><strong>Sprachen</strong></p>
<p>Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem einfach neue Sprachen mal auszuprobieren. Zu dem Thema empfehle ich den <a href="http://www.voelter.de/data/articles/trends2007.pdf">Artikel von Markus Völter</a>.</p>
<p>Meine persönlichen Erkenntnisse dazu:</p>
<ul>
<li>Fast(?) nichts von den Konzepten ist neu. Die Basis für funktionale Sprache z.B. ist das Lambda Kalkül von 1930. Insbesondere das Polyglotte Programmieren ist doch längst Standard. Ich z.B. zähle in den meisten Projekten mindestens Java, SQL, PL/SQL, HTML und CSS zu meinem Handwerkszeug. Was sich ändern könnte, ist warum wir zwei oder mehr Sprachen einsetzen: Weil bestimmte Aspekte in der einen, andere in der zweiten Sprache besser darstellbar sind. Während bisher der Grund der Mangel an Alternativen ist. (Ja ich weiß, man kann auch in Oracle mit Java arbeiten. Aber wer das einwirft hat es noch nicht ernsthaft ausprobiert).</li>
<li>Wir werden uns damit beschäftigen müssen. Heiße Kandidaten für die praktische Anwendung sind für mich: Groovy und Scala.<br />
Auch spannend finde ich Haskell. Ich habe vor vielen Jahren an der Uni <a href="http://de.wikipedia.org/wiki/Miranda_%28Programmiersprache%29">Miranda </a>gelernt und hätte nie gedacht, dass dies mal im Berufsleben relevant werden könnte.<br />
Als Physiker, der einmal intensiv mit Fortran gearbeitet hat finde ich auch <a href="http://en.wikipedia.org/wiki/Fortress_%28programming_language%29">Fortress </a>sehr beeindruckend. Dies Sprache kann zumindest für Mathematiker und ähnliche <a href="http://research.sun.com/projects/plrg/faq/NAS-CG.pdf">sehr leserlich gerendert</a> werden und ist speziell auf (massiv)parallele Ausführung ausgerichtet.</li>
</ul>
<p>Womit wir bei einem weiteren Thema sind:</p>
<p><strong>Concurrency</strong></p>
<p>Das Moore&#8217;sche Gesetz als Basis des Quaketunings (18 Monate Quake spielen, schon ist die Anwendung doppelt so schnell) ist am Ende. Als &#8216;horizontale Ausweichbewegung&#8217; werden uns von AMD und Intel Mehrkern CPUs auf den Schreibtisch gestellt. Dadurch geraten überall Leute in Panik, existierende Anwendungen würden nun wie die Fliegen von den Wänden fallen, da Threadingprobleme sich nun manifestieren.</p>
<p>Nun ja, ich weiß nicht was für Anwendungen ihr schreibt, aber ich schreibe beruflich entweder Swing oder Webanwendungen, die auf Datenbanken gehen. Nur ein sehr kleiner Teil der Arbeit steckt in komplexen Algorithmen, und ich habe noch nie etwas davon parallelisiert. Datenbanken und Webserver laufen &#8216;schon immer&#8217; auf Mehrprozessormaschinen. Es sind heute halt 512 statt 16. Die Art und Weise wie dort Parallelverarbeitung eingesetzt wird, ist extrem einfach und daher handhabbar: Jede Anfrage bekommt einen Thread, und darf ihn für sich alleine verwenden, bis die Anfrage abgearbeitet ist. Zumindest sieht es aus der Sicht des Entwicklers so aus.</p>
<p>Nur in Swing muss man typischer Weise mit mehreren Threads arbeiten, da lang laufende Aktionen sonst die Darstellung der Anwendung blockieren. Dies wird man aber wenn irgend möglich minimieren,  da jeder der <a href="http://www.amazon.de/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.de%2FConcurrent-Programming-Java-Principles-Addison-Wesley%2Fdp%2F0321256174%3Fie%3DUTF8%26s%3Dbooks-intl-de%26qid%3D1211220705%26sr%3D1-5&amp;site-redirect=de&amp;tag=schauderhafte-21&amp;linkCode=ur2&amp;camp=1638&amp;creative=6742">Doug Leas Buch</a><img src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=ur2&amp;o=3" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /> gelesen hat, weiß wie schwierig Concurrency ist.</p>
<p>Viele der neuen Sprachen haben aber Konstrukte, die die Verteilte Ausführung unterstützen und es ist ja nicht so, dass wir die nicht zu nutzen wüssten. Unabhängig von der Anzahl der Prozessoren gibt es nämlich einen Bereich, in dem Concurrency eine Rolle spielen sollte: bei dem Zugriff auf verteilte Ressourcen. Egal ob es die Datenbank oder der entfernte Web Service ist, wenn wir eine Anfrage abschicken und warten, bis die Antwort kommt, bevor wir die nächste Anfrage lostreten verschwenden wir mindestens Zeit, und meist auch wertvolle Ressourcen (mindestens den wartenden Thread). Je nachdem wie knapp die Ressourcen sind, wird man früher oder später genötigt sein, die Anfragen parallel anzustoßen und anschließend die Ergebnisse zusammenzuführen. Schön wenn die Sprache mit der man dies tut, ein solches Vorgehen angemessen unterstützt.</p>
<p><strong>Security</strong></p>
<p>Es gibt immer wieder Stimmen, die meinen, Security würde jetzt DAS große Thema. Vertraut mir, wird es nicht. Genauso wenig wie Gasmasken oder Panzertüren DAS große Thema werden. Aber Security ist ein Dauerbrenner, den niemand ignorieren sollte. Oder schließt ihr euer Auto und eure Wohnung nicht ab?  Daher gab es auch auf der JAX Vorträge zu diesem Thema.</p>
<p>Für mich die wichtigsten Punkt waren dabei:</p>
<ul>
<li> * Der <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Zyklus</a> gilt auch hier. D.h.
<ul>
<li> Plant was eure Sicherheitsziele sind und was ihr dafür tun müsst. Wollt ihr euch gegen Skriptkiddies schützen? Oder haltet ihr die NSA für euren Feind? In letzterem Fall könnte aber auch ein Psychater helfen <img src='http://blog.schauderhaft.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li> Führt die Maßnahmen durch.</li>
<li> Prüft, ob die Maßnahmen wirksam sind.</li>
<li> Wenn die Prüfung negativ ausfällt, reagiert darauf.</li>
</ul>
</li>
<li> Schwierig an dem Security Thema ist, dass selbst gigantische Sicherheitsprobleme nicht von allen erkannt werden. Wenn ich in mein Haus eine Tür aus Pappe einbaue, brauche ich keinen Experten um zu erkennen, dass das eine schlechte Idee ist. Bei Software ist das ganze deutlich weniger offensichtlich. Ich habe die privaten Schlüssel für Zertifikate schon gemailt bekommen. Daher gibt es eine ganz wichtige Aufgabe, wenn eine Anwendung &#8216;sicher&#8217; werden muss: Awareness schaffen. Alle Beteiligten (Entwickler, Designer, Tester, Administratoren, Anwender, &#8230;) müssen in Sachen Security geschult werden. Denn was nützt die schöne Sicherheitsarchitektur, wenn der Benutzer seines Sohnes Namen als Passwort verwendet und das auch noch per E-Mail verschickt und auf den Monitorrahmen schreibt?</li>
<li> Security heißt nicht einfach Benutzer Authentifizierung und Authorisierung sondern durchdringt den gesamten Entwicklungsprozess.
<ul>
<li> Bei der Analyse müssen die Anforderungen aufgenommen werden.</li>
<li> Diese müssen bei der Architektur und dem Design berücksichtigt werden.</li>
<li> Es muss natürlich implementiert werden,</li>
<li> aber auch getestet,</li>
<li> deployed</li>
<li> und genutzt</li>
</ul>
<p>Und wie ich oben skizziert habe, gibt es auch in den Bereichen Herausforderungen, wo man sie normalerweise vielleicht nicht erwartet.</li>
</ul>
<p><strong>Architektur</strong></p>
<p>Ist ein weiterer Dauerbrenner, und ähnlich wie bei Security lautet hier mein Hinweis <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Circle</a>! Eine Architektur hat eine Aufgabe zu erfüllen. Die Aufgabe sollte vorher klar sein und nachher muss geprüft werden, dass die Aufgabe gelöst wurde. Ansonsten ist Architektur ein Unfall oder Selbstbefriedigung des Architekten.</p>
<p>Durch das Thema Nr.1 &#8216;Sprachen&#8217; gewinnen wir gerade im Bereich Architektur gerade gewaltig an Möglichkeiten:</p>
<ul>
<li>Unterschiedliche Sprachen für unterschiedliche Bereiche.</li>
<li>DSLs für Spezialfälle</li>
<li>AOP oder spezielle Sprachstrukturen für die Umsetzung von Architekturentscheidungen</li>
</ul>
<p><strong>SOA und BPM</strong></p>
<p><a href="/2008/04/23/konferenzen-und-big-player-sessions/">Viel Hype und (fast) nichts dahinter</a>.</p>
<p><strong>Das 5. Element (Quintessenz)</strong></p>
<p>Die Probleme bleiben die alten. Die Lösungen sind auch nicht neu. Die Zeiten bleiben interessant.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das beste Buch über Software Design&#8230;</title>
		<link>http://blog.schauderhaft.de/2008/03/06/das-beste-buch-uber-software-design/</link>
		<comments>http://blog.schauderhaft.de/2008/03/06/das-beste-buch-uber-software-design/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 18:55:49 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[domain driven design]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/03/06/das-beste-buch-uber-software-design/</guid>
		<description><![CDATA[&#8230; das ich seit langem gelesen habe ist Domain-Driven Design: Tackling Complexity in the Heart of Software Entgegen der allgegenwärtigen Presens von Objekt Orientiertem Design in der Literatur und im Internet kommen in meiner Erfahrung diese Techniken oft nur im Infrastruktur Code zur Anwendung (GUI Frameworks, Web Frameworks, Datenbankzugriff &#8230;). Wenn es aber um das [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; das ich seit langem gelesen habe ist <strong>Domain-Driven Design: Tackling Complexity in the Heart of Software</strong><br />
<a href="http://www.amazon.de/gp/product/0321125215?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0321125215"><img src="/wp-content/uploads/2008/01/21olwrbseul_aa_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0321125215" border="0" alt="" width="1" height="1" /></p>
<p>Entgegen der allgegenwärtigen Presens von Objekt Orientiertem Design in der Literatur und im Internet kommen in meiner Erfahrung diese Techniken oft nur im Infrastruktur Code zur Anwendung (GUI Frameworks, Web Frameworks, Datenbankzugriff &#8230;). Wenn es aber um das eigentliche Problem geht, ist die Basis auf einmal das Datenmodell. Ich weiß um den Wert einer guten Datenbank. Aber die Möglichkeiten Geschäftslogik in der Datenbank sichtbar zu machen sind extrem beschränkt. Es gibt nicht viel mehr als Foreign Keys, um Beziehungen zwischen Daten zu repräsentieren. Es ist also völlig ungeeignet das Domänen Modell, dass jeder Anwendung zu Grunde liegt wiederzuspiegeln. Wenn es aber nicht im Sourcecode ist, wo ist es dann? Gemäß Agilen Methoden: Nirgends, jedenfalls nicht in schriftlicher Form. Und gemäß Wasserfall oder V-Modell oder dergleichen? In einem veralteten Dokument!</p>
<p>Martin Fowler schlägt als anwendbares Enterprise Pattern das <a href="http://martinfowler.com/eaaCatalog/domainModel.html">Domainmodel</a> vor, das nach allen Regeln der objektorientierten Kunst erstellt wird. Evans liefert in seinem Buch nun das Handwerkszeug, um mit diesem Domänen Model möglichst produktiv zu arbeiten. Er beschreibt wie Refactoring, Patterns, Modularisierung und vieles mehr in diesem Kontext eingesetzt werden können um das Domänen Model im Source Code ausdrucksstark zu halten und wie es als Grundlage für eine gemeinsame Sprache (Ubiquitous Language) zur Basis sämtlicher Arbeit im Projekt wird. Dies alleine wäre schon Grund genug das Buch zur Pflicht für jeden Softwaredesigner und Architekten zu machen. Hinzu kommt, dass es sich sehr angenehm liest, unter anderem da er realitätsnahe Beispiele verwendet und Beispiele aus der eigenen Erfahrung bringt die zeigen was nicht funktioniert.</p>
<p>In manchen Reviews werden ihm Wiederholungen vorgeworfen. Einiges was so mancher für Wiederholungen hält, sind keine, sondern nur ähnliche oder verwandte Konzepte. Vieles schreibt aber tatsächlich mehrfach, allerdings in einem Umfang, den ich als sehr angenehm empfand.</p>
<p align="center">Äußerst empfehlenswert.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/03/06/das-beste-buch-uber-software-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nicht ganz schlecht genug um es gleich wegzuwerfen</title>
		<link>http://blog.schauderhaft.de/2008/01/28/nicht-ganz-schlecht-genug-um-es-gleich-wegzuwerfen/</link>
		<comments>http://blog.schauderhaft.de/2008/01/28/nicht-ganz-schlecht-genug-um-es-gleich-wegzuwerfen/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 20:10:03 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/01/28/nicht-ganz-schlecht-genug-um-es-gleich-wegzuwerfen/</guid>
		<description><![CDATA[Na gut, ich hätte es eh nicht wegwerfen können, da ich es mir nur ausgeliehen hab: &#8220;Der Termin&#8221; von Tom de Marco: Der Roman wird immer wieder gelobt und gepriesen dafür, dass er Projektmanagement Know How in Form eines Romans vermittelt. Meine Manöverkritik fällt da etwas anders aus: Als Roman ist das Buch katastrophal schlecht. [...]]]></description>
			<content:encoded><![CDATA[<p>Na gut, ich hätte es eh nicht wegwerfen können, da ich es mir nur ausgeliehen hab: &#8220;Der Termin&#8221; von Tom de Marco:</p>
<p><a href="http://www.amazon.de/gp/product/3446401652?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=3446401652"><img src="http://blog.schauderhaft.de/wp-content/uploads/2008/01/21dhch9w6pl_aa_sl160_.jpg" border="0" alt="" /></a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=3446401652" border="0" alt="" width="1" height="1" /></p>
<p>Der Roman wird immer wieder <a href="http://wollekuhl.styleblogs.de/2008/01/08/der-termin/">gelobt</a> und <a href="http://www.dorsethouse.com/inside/2007/12/on-deadline-business-report-journal.html">gepriesen</a> dafür, dass er Projektmanagement Know How in Form eines Romans vermittelt.</p>
<p>Meine Manöverkritik fällt da etwas anders aus:</p>
<p>Als Roman ist das Buch katastrophal schlecht. Die Charaktere haben nicht ganz soviel Profil wie eine Briefmarke. Beim Spannungsbogen hat er die Sehne vergessen und das Happy End ist einfach nur angeklebt. Die innere Logik fehlt komplett: Warum hat ein kleines armes Land Unmengen an sehr guten Softwareentwicklern, die aber alle nichts zu tun haben und das seit dem Niedergang des Ostblocks, also seit ca. einem halben Jahrzehnt zum Zeitpunkt des Erscheinens des Buches Mitte der 90er? Warum wird ein Manager, der in der Lage ist ein Team von 15000 Entwicklern so zu leiten, dass unmögliche Termine eingehalten werden, gefeuert? Die Liste von Fragen ließe sich fortsetzen bis mein Herz streikt, also weiter zum nächsten Kritikpunkt.</p>
<p>Fachlich schreibt Herr De Marco des öfteren einfach nur Quatsch. Eine Functionpoint Analyse von 6 Projekten mit insgesamt 20000 (in Worten zwanzigtausend) Functionpoints innerhalb eines Tages gehört dazu. Oder die Qualitätsbewertung von einzelnen Mitarbeitern nach CMMI, was so sinnvoll ist, wie die Temperatur eines Vakuums messen zu wollen (Um fair zu sein CMMI wird nicht ausdrücklich erwähnt, aber es ist recht offensichtlich gemeint).</p>
<p>Die Lehren die der Hauptcharakter aus seinen Erlebnissen zieht sind in vielen Fällen doch äußerst zweifelhaft, so zum Beispiel die Hymnen auf Functionpoint Analyse und das Wasserfallmodell. Bei letzterem behauptet De Marco, die Ergebnisse würden um so besser, um länger und intensiver man sich mit dem Entwurf beschäftigt.</p>
<p>Zu allem Überfluss ist die Übersetzung hölzern und sagen wir mal eigenwillig. Wenn &#8220;Whiteboard&#8221; als Weißtafel übersetzt wird freut man sich nur noch, dass es wenigstens nicht Weißbrett geworden ist.</p>
<p>Am ärgerlichsten ist jedoch, dass das Buch die gemachten Versprechen nicht hält. Es geht die ganze Zeit um ein Experiment, in dem die Wirksamkeit von verschiedenen Managementmethoden mit einander verglichen werden sollen. Aber es werden fast nie Managementmethoden miteinander verglichen! Und wenn, wird die eine von einer völlig inkompetenten Person repräsentiert, so dass das Ergebnis weder überraschend noch lehrreich ausfällt.</p>
<p>Aber Tom De Marco hat nicht alles falsch gemacht. Jeder der sein Buch liest und glaubt, muss zu dem Schluss kommen, dass man bei einem Problem nur einen Berater ins Haus holen muss und schon flutscht es wieder. Da Tom De Marco selbst Berater ist, ist das Buch damit wohl eine der erfolgreichsten Werbebroschüre aller Zeiten.<br />
Wieso habe ich das Buch also bis zum Ende gelesen? Das Buch liest sich extrem schnell. Da die Geschichte unintressant ist, und die Fakten äußerst dünn, kann man es innerhalb von ca. 4 Stunden ganz gut durchlesen.</p>
<p>Wen ich immer noch nicht von diesem Buch abbringen konnte, dem empfehle ich gleich noch eins: <a href="http://www.amazon.de/gp/product/3499614340?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=3499614340">Der Minuten-Manager.</a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=3499614340" border="0" alt="" width="1" height="1" /> Das Buch enthält weniger (falsche) Informationen, die Geschichte ist ähnlich schlecht wie von &#8220;Der Termin&#8221;, aber was entscheidend ist: Man kann es in ca 0,5 bis 1 Stunde durchlesen.</p>
<p>Um den Leser nicht völlig ohne Lesestoff zurückzulassen hier noch eine Buch, das mir schon vor geraumer Zeit wirklich gut gefallen hat: <a href="http://www.amazon.de/gp/product/0060512806?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0060512806">Cryptonomicon.</a><img style="border: medium none  ! important; margin: 0px ! important" src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=as2&amp;o=3&amp;a=0060512806" border="0" alt="" width="1" height="1" /> Leider wird man auch hier wenig über Projektmanagement lernen, dafür gibt es aber viele interessante Stunden und nebenbei sogar noch ein wenig Wissen über Verschlüsselung und Geschichte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/01/28/nicht-ganz-schlecht-genug-um-es-gleich-wegzuwerfen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

