<?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>Manuel Klimek &#187; Books</title>
	<atom:link href="http://klimek.box4.net/blog/category/books/feed/" rel="self" type="application/rss+xml" />
	<link>http://klimek.box4.net/blog</link>
	<description>Dedicated to Software Development</description>
	<lastBuildDate>Wed, 01 Jul 2009 20:23:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Review: Rapid Development</title>
		<link>http://klimek.box4.net/blog/2009/07/01/review-rapid-development/</link>
		<comments>http://klimek.box4.net/blog/2009/07/01/review-rapid-development/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 20:23:35 +0000</pubDate>
		<dc:creator>klimek</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://klimek.box4.net/blog/?p=108</guid>
		<description><![CDATA[I just finished reading Steve McConnell&#8217;s Rapid Development: Taming Wild Software Schedules. Well, many times it was not exactly &#8220;reading&#8221;, more like &#8220;page-skipping&#8221;. Obvious. Obvious. Obvious. But every time I thought I knew what was coming there was something unexpected hidden inside this big recapitulation of Fred Brook&#8217;s findings. With big hard data pictures on [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:left" src="http://ecx.images-amazon.com/images/I/41+sSYBlD9L._SL160_.jpg" alt="Rapid Development Cover" />I just finished reading Steve McConnell&#8217;s <a href="http://klimek.box4.net/blog/index.php?now_reading_author=steve-mcconnell&#038;now_reading_title=rapid-development-taming-wild-software-schedules">Rapid Development: Taming Wild Software Schedules</a>. Well, many times it was not exactly &#8220;reading&#8221;, more like &#8220;page-skipping&#8221;. Obvious. Obvious. Obvious. But every time I thought I knew what was coming there was something unexpected hidden inside this big recapitulation of Fred Brook&#8217;s findings. With big hard data pictures on the border. And then I&#8217;m horrified that I can relate to most of what is written, and that nothing&#8217;s really new to me any more. Even if I didn&#8217;t expect to read it from McConnell.</p>
<p>So the excitement of the days when I wrote stuff like <a href="http://klimek.box4.net/blog/2007/02/19/do-you-understand-xp/">Do You Understand XP?</a> is gone. Rapid Development is a good book that reviews every practice it preaches with a critical eye, but I&#8217;m not overly excited. Yes, I learned, again, that many so-called Agile practices are known for a long time. But hey, I knew that after reading the Mythical Man Month. Excitement is hard to find in books these days. If I only could find one of those thought-provoking books, that rips your universe apart.</p>
]]></content:encoded>
			<wfw:commentRss>http://klimek.box4.net/blog/2009/07/01/review-rapid-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Object-Oriented Metrics In Practice</title>
		<link>http://klimek.box4.net/blog/2006/12/28/review-object-oriented-metrics-in-practice/</link>
		<comments>http://klimek.box4.net/blog/2006/12/28/review-object-oriented-metrics-in-practice/#comments</comments>
		<pubDate>Thu, 28 Dec 2006 17:17:32 +0000</pubDate>
		<dc:creator>klimek</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://klimek.box4.net/blog/2006/12/28/review-object-oriented-metrics-in-practice/</guid>
		<description><![CDATA[The book in one sentence
A short, modest and dryly written book with some brilliant new concepts and a lot of too easy solutions which is worth reading because of the brilliant ideas.
Preceding events
How did it come about that I read a book about software metrics? I will have to digress somewhat before answering the question. [...]]]></description>
			<content:encoded><![CDATA[<h3>The book in one sentence</h3>
<p>A short, modest and <b>dryly</b> written book with some <b>brilliant new concepts</b> and a lot of <b>too easy solutions</b> which is worth reading because of the brilliant ideas.</p>
<h3>Preceding events</h3>
<p>How did it come about that I read a book about software metrics? I will have to digress somewhat before answering the question. There is a strong common believe in software engineering that software metrics are a dangerous tool, especially in the hand of <a href="http://www.joelonsoftware.com/items/2006/11/10b.html">Joel&#8217;s bright young management consultant</a>. But sharp tools that you can use to harm people can often be used to get things done.</p>
<p>What if our pre-pre-pre-(&#8230;)-pre-ancestors had condemned the use of a <a href="http://en.wikipedia.org/wiki/Knife">knife</a> just because some of their brethren ran around slitting up other peoples throats? So I wanted to find out more about software metrics to decide for myself if they provide a new, sharp tool, or just a deadly weapon to be utilized by management consultants. But even with a lot of google magic I couldn&#8217;t find a good critical introduction to software metrics anywhere on the web.</p>
<p>Then a few weeks ago an IT consultant asked about software metrics in a forum about software quality  assurance at <a href="http://www.xing.com">xing</a>. I answered by reiterating the &#8220;dangerous tool&#8221; conception, emphasizing that software metrics alone can&#8217;t be used as a quality assessment, which obviously didn&#8217;t satisfy our questioner. Another member recommended &#8220;Object-Oriented Metrics In Practice&#8221;, praising especially the solution oriented style of the book. So I figured that I should educate myself on the topic before broadcasting my opinion.</p>
<h3>Reading&#8230;</h3>
<p>The first good point the book makes is that software metrics can show only <b>structural points of interest</b>, but not design problems (unless you find a metric that can measure the semantical aspects of variable and class names, of course). Therefore a software metric can be used to find conspicuous code fragments that must be analyzed by hand to get substantial information. If Joel&#8217;s consultant had read this book and had understood this concept we wouldn&#8217;t need to be afraid of him any more.</p>
<p>The brilliant part of this book is the part about metrics visualization. If you ever ran <a href="http://cccc.sourceforge.net/">cccc</a> over a > 200kloc project, you know that visualization of metric results is hard. When I used cccc at work to assess our C++ project (before reading this book) I didn&#8217;t find anything new or exciting in the results. The metrics showed me two or three structural problems that I was already aware of without using any metrics and quite a lot of false positives. After reading the book I came to the conclusion that it was not the metrics that were useless, but the simple brute force manner in which they were applied.</p>
<p>The idea of Lanza and Marinescu is to <b>combine</b> metrics in a way that answers <b>specific questions</b> about the code and visualize the results in a way that makes it easy for human beings to browse through the structure and especially to visualize the structure in combination with the metric results. If you want to learn more about how you can utilize metrics efficiently and how much work you have to invest to be able to use metrics at all, I highly recommend this book to you.</p>
<p>In the remainder of the book the authors try to give examples what metrics combinations should be used to detect specific structural problems and what refactoring should be used to solve a specific metric result. Those answers are often way to easy. If you&#8217;re a fan of domain driven design, you are probably trying to base your design on the structure of the domain. So you can&#8217;t just mechanically apply standard solution patterns to your problem, but you have to find the right kind of design for your problem domain.</p>
<h3>Conclusion</h3>
<p>For me this book was definitely worth reading. I&#8217;ll try the tools mentioned in the book and see how the visualization techniques can be applied in real life. Since even the authors admit that metrics are most useful to get a starting point to assess legacy code, I don&#8217;t think this book helps me a lot in my current work environment where I am still able to overlook the complete project. But the book helps you to view code and code metrics from a new angle, broadening your understanding.</p>
]]></content:encoded>
			<wfw:commentRss>http://klimek.box4.net/blog/2006/12/28/review-object-oriented-metrics-in-practice/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Review: Domain-Driven Design</title>
		<link>http://klimek.box4.net/blog/2006/12/17/review-domain-driven-design/</link>
		<comments>http://klimek.box4.net/blog/2006/12/17/review-domain-driven-design/#comments</comments>
		<pubDate>Sun, 17 Dec 2006 11:07:12 +0000</pubDate>
		<dc:creator>klimek</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://klimek.box4.net/blog/2006/12/17/review-domain-driven-design/</guid>
		<description><![CDATA[When I wrote my first computer program in BASIC I didn&#8217;t know anything about software design. My variable names used to be mathematically short and contain a lot of numbers. I wrote tightly coupled functions without parameters and synchronized the whole mess by a myriad of unstructured global data.
This is what naturally happens when you [...]]]></description>
			<content:encoded><![CDATA[<p>When I wrote my first computer program in BASIC I didn&#8217;t know anything about software design. My variable names used to be mathematically short and contain a lot of numbers. I wrote tightly coupled functions without parameters and synchronized the whole mess by a myriad of unstructured global data.</p>
<p><i>This is what naturally happens when you grow software over a period of time. Since I didn&#8217;t have the mathematical background at the age of thirteen, short variable names seem to be a natural choice for human beings. You start with a seed and add functionality on a  step-by-step basis, breaking up stuff at arbitrary boundaries.</i></p>
<p>I did appreciate the advantages of high level languages, though. When the 64k of BASIC data space and the interpreter&#8217;s performance limited my possibilities with regards to game programming, I started using C as primary language with some inline assembler for the critical parts. At that time I created my first library package for graphical functions and prototyped some game built upon this foundation.</p>
<p><i>This was my first technical domain abstraction. Splitting up the software in a library component and a domain component came naturally back than. Of course the library design was crappy and the programs were still tightly coupled to the library implementation.</i></p>
<p>At that time I also tried to learn C++ from the Borland C++ programming reference, but I couldn&#8217;t grasp the concepts. I probably didn&#8217;t really try to, thinking that I already knew how to create working software &#8211; I had a nice working repository of gimicks at that time.</p>
<p>The next critical step in my understanding of software design was to drop my arrogance.</p>
<p>One of my first software engineering classes at university covered the basics of object oriented software development in C++ using the STL. The first exercise we had to finish was a small program of which I don&#8217;t even remember what it was all about. A friend of mine and I worked on this exercise together. We both had programming experience and had a lot of fun hacking together a sharp-witted mess of code. The teaching assistant took his time to comment on every single part we messed up, giving us an overall rating of zero points.</p>
<p><i>This was the day I started to realize that the main challenge in programming is not to get a working program, but to create a maintainable, readable and easy to debug program.</i></p>
<p>At university I took part in a few programming projects and started an open source project with a fellow student. During those experiences I developed a strong sense of how structured abstraction can simplify software development. Then I started to work as a software developer and architect. When trying to communicate my architecture and design ideas, I realized that there are more aspects to software design than abstraction, low coupling and high cohesion. But, again, I couldn&#8217;t grasp the concepts.</p>
<p><i>&#8220;Domain-Driven Design&#8221; is all about this additional aspect to good software design &#8211; the domain language. You can build a piece of software with low coupling and high cohesion and superb technical abstractions in a technical language that restricts software evolution.</i></p>
<p>Eric Evans proposes a domain languages built upon phrases that describe the implementation of use cases in the software. This is a concept very similiar to test driven development, where you write down how you want to use your objects before implementing them, being able to change the design while writing the test.</p>
<p>But in &#8220;Domain-Driven Design&#8221; Evans demands a stronger concept: absorb the domain language from the domain experts. Build a coherent language to express concepts and design descisions.</p>
<p><b>The model couples the software to a pool of associations.</b></p>
<p>This is a new level of coupling encountered when building software. It is not related to the technical coupling of software modules. This is just what goes on in the brains of developers when confronted with software. The underlying model limits the way we think about software. This is not always bad, as a good model will bind the parts that are irrelevant during development and allows us to concentrate on the important aspects.</p>
<p><i>A domain driven model increases the probability that modules may be reused in the domain the software is developed for.</i></p>
<p>While many developers intuitively know what domain driven design is all about, Eric Evans manages to communicate the concepts in a way that makes them explicit, rather than implicitely hidden in the developers train of thought.</p>
<p>The book is not a page-turner, since most of the concepts are not new per se. It lacks the driven spirit of Kent Beck, or the deep insight of Fred Brook&#8217;s &#8220;Mythical Man Month&#8221;. I can&#8217;t say if &#8220;Domain-Driven Design&#8221; can help a student to boost design comprehension &#8211; I think it&#8217;s rather hard to read if you lack the medium level knowledge the concepts in this book are built upon. But I recommend this book to those that already know what software design is all about intuitively and want to be able to put a finger upon the &#8220;big picture&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://klimek.box4.net/blog/2006/12/17/review-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: The Pragmatic Programmer</title>
		<link>http://klimek.box4.net/blog/2006/11/18/review-the-pragmatic-programmer/</link>
		<comments>http://klimek.box4.net/blog/2006/11/18/review-the-pragmatic-programmer/#comments</comments>
		<pubDate>Sat, 18 Nov 2006 16:28:49 +0000</pubDate>
		<dc:creator>klimek</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://klimek.box4.net/blog/2006/11/18/review-the-pragmatic-programmer/</guid>
		<description><![CDATA[When I was a teenager I used to sit at my computer many hours a day, pondering about interesting computing problems, like writing a magic eye 3d creator or a cool battletech computer game. The first important computer book I read (after reading the micrsoft basic handbook) was &#8220;Spiele programmieren mit QBASIC&#8221; (Programming games in [...]]]></description>
			<content:encoded><![CDATA[<p>When I was a teenager I used to sit at my computer many hours a day, pondering about interesting computing problems, like writing a magic eye 3d creator or a cool battletech computer game. The first important computer book I read (after reading the micrsoft basic handbook) was &#8220;Spiele programmieren mit QBASIC&#8221; (Programming games in QBASIC) by Lars Hennigsen. This book explained the basic concept of computer programming and mathematics in a way that fascinated me as a fifteen-year-old. This book was by no means the best book available as a reference on computer programming, but it multiplied my interest in computer programming by giving me just the right information to get me started.</p>
<p>During my studies of computer science I mostly read scientistic articles and scripts written by scientists for scientists. This information was invaluable for laying a foundation of technical knowledge. While studiying I learned mostly by trying out new interesting things, coding open source software and endless discussions with fellow students.</p>
<p>When I started to work I felt confident in my field. I expected to learn a lot on a learning-by-doing basis, or by listening closely to the veteran software developers around me. After two years of architecturing and coding in the real world, my enthusiasm mixed with an exhausted feeling that you just can&#8217;t tackle the complexity of software development effectively.</p>
<p>When I visited New York City at christmas &#8216;05 I spent a lot of my time rummaging through bookstores full of English books (which are rather spare here in Germany). There I stumled across a copy of &#8220;The Pragmatic Programmer&#8221;. Since I had read about the title allready somewhere on the internet and didn&#8217;t have anything to read at that time, I bought me the copy.</p>
<p>I read this book on my flight from New York to Munich in one go. Andrew Hunt and David Thomas managed to light that spark of hope inside of me that there may be a silver bullet after all. They draw an abstract view on software development, they help us step back to take a look at ourselves and how we&#8217;re doing things. They explain the world around the software developer and show why it is important to explain the process and not only the tools used to produce code. They inspired me to read &#8220;Extreme Programming Explained&#8221; by Kent Beck, to join IEEE and utilize their library to learn from the experience of fellow software developers. As with my first computer book, &#8220;The Pragmatic Programmer&#8221; is by no means as insightful as &#8220;The Mythical Man Month&#8221; or as complete as &#8220;Code Complete&#8221;, but it is inspiring in it&#8217;s mission to make programmers deliver better software to the world.</p>
<p>I&#8217;d definitely recommend this book to any programmer who hasn&#8217;t read a book about software development for some time and is just not satisfied with the way software is created nowadays.</p>
]]></content:encoded>
			<wfw:commentRss>http://klimek.box4.net/blog/2006/11/18/review-the-pragmatic-programmer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
