<?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>Zen and the Art of Programming &#187; Books</title>
	<atom:link href="http://programmingzen.com/category/books/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingzen.com</link>
	<description>By Antonio Cangiano, Software Engineer &#38; Technical Evangelist at IBM</description>
	<lastBuildDate>Wed, 21 Jul 2010 22:12:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>In-Depth Book Review: Practical Clojure</title>
		<link>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/</link>
		<comments>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 18:30:35 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[In-Depth Book Reviews]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1230</guid>
		<description><![CDATA[Title: Practical ClojureAuthors: Luke VanderHart and Stuart SierraTrue pp.: 198Publisher: ApressPublished on: June 2010ISBN-13: 978-1430272311Rating: 6.5/10 Published in June 2010, Practical Clojure by Luke VanderHart and Stuart Sierra is the latest Clojure book to hit stores. Despite the Clojure 1.0 jar shown at the beginning of the book, this title tries to cover the current [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://programmingzen.com/recommends/?1430272317"><img src="http://programmingzen.com/wp-content/uploads/2010/07/41tKM6F53IL._SL160_.jpg" style="float: right; border:none;" alt="Practical Clojure" title="Practical Clojure" /></a><br/>Title: <a href="http://programmingzen.com/recommends/?1430272317"><strong>Practical Clojure</strong></a><br/>Authors: <strong>Luke VanderHart and Stuart Sierra</strong><br/>True pp.: <strong>198</strong><br/>Publisher: <strong>Apress</strong><br/>Published on: <strong>June 2010</strong><br/>ISBN-13: <a href="http://programmingzen.com/recommends/?1430272317"><strong>978-1430272311</strong></a><br/>Rating: <strong>6.5/10</strong></p>
<p><br/><br />
Published in June 2010, <a href="http://programmingzen.com/recommends/?1430272317">Practical Clojure</a> by Luke VanderHart and Stuart Sierra is the latest Clojure book to hit stores. Despite the Clojure 1.0 jar shown at the beginning of the book, this title tries to cover the current version of the language, including references to concepts that will be introduced by the upcoming 1.2 version.</p>
<p>The target audience of this book is programmers who are absolutely new to Clojure. It didn&#8217;t strike me as being particularly aimed at developers who are coming from the Java camp, or the Lisp camp; in this regard, the book is rather &#8220;background agnostic&#8221;, even though Lisp programmers will feel much more at home than Java programmers will, due to the nature of the language itself.</p>
<p>The authors of the book are clearly well versed in this new language (Sierra is part of <a href="http://clojure.com/">Clo<em>j</em>ure/core</a>, the equivalent of the A-Team in Clojureland) and their confidence with the concepts presented is demonstrated throughout the book. Their explanations tend to be clear and to the point. Longer discussions are occasionally included when required to introduce concepts that are novel to most programmers, like the Software Transactional Memory (STM), refs, atoms and agents.</p>
<p>The book starts out by presenting a short but well-argued case for why Clojure is a worthwhile language, and then focuses almost exclusively on the core of the language. I&#8217;m afraid they do so to the detriment of the ecosystem surrounding Clojure. The authors don&#8217;t talk about how to install Clojure, recommend editors and IDEs (albeit a few are casually mentioned), or how to use build tools like Ant, Maven or Leiningen.</p>
<p><code>clojure.contrib</code>, a fundamental extension library, is barely mentioned and there is no coverage of other important libraries or emerging frameworks. For instance, perhaps expectedly, Compojure (a web framework) and Incanter (a statistical and graphical environment) are only mentioned as examples of DSLs, however examples of their usage are not provided. (I believe the authors mistakenly refer to Compojure as Enclojure, which is a different project).</p>
<p>Despite the narrow focus, Practical Clojure doesn&#8217;t shy away from complex subjects and manages to include a chapter on Java interoperability, parallel programming, metaprogramming, and performance considerations. It does so briefly however, favoring a cursory presentation of the fundamental concepts rather than in-depth coverage, which would provide the reader with the degree of confidence required to approach real world problems.</p>
<p>The core language is covered in a manner that acts as both a tutorial and a reference. Major concepts, data structures, and common functions are presented to the reader with an endless supply of tiny examples. It&#8217;s easy to fly through them, but typing along in the REPL will be a far more valuable exercise for readers who hope to retain the information presented.</p>
<p>This leads us to another shortcoming of this book, which is the lack of more structured and complex examples. When I define their examples as &#8220;tiny&#8221;, with very few exceptions, I really mean it. For the first few chapters of the book the examples don&#8217;t get much larger than calculating the square root of a number through Newton&#8217;s method or adding contacts to an address book. Most of the other examples do a good job of illustrating the point they are trying to make with one, two, or just a handful of lines of code.</p>
<p>This is an actual sample of the kind of examples you&#8217;ll find throughout the book to illustrate many core API functions:</p>
<div class="highlight">
<pre><span class="nv">user=&gt;</span> <span class="p">(</span><span class="nb">reduce </span><span class="nv">+</span> <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="mi">5</span><span class="p">])</span>
<span class="mi">15</span>
</pre>
</div>
<p>Note that this approach is didactically valid, because it isolates the function to show exactly how it works. After dozens of these functions though, you may expect larger examples to show how to integrate the use of some of these functions and data structures you&#8217;ve learned about. Such examples are seldom included. Furthermore, the book lacks any exercise for the reader. Foundational books that fail to offer many articulated examples and that lack exercises, tend to make it hard for the reader to retain the information and get some hands-on practice.</p>
<p>I have lots of respect for short books that get to the point and avoid wasting the reader&#8217;s time. <a href="http://programmingzen.com/recommends/?0131103628">K&amp;R</a> is notoriously acclaimed thanks to its clear and concise nature. However, Clojure is not C, and I feel that the 198 pages fall a little short when it comes to introducing this wonderful language to new readers. There is more to Clojure than simply surveying the language itself, even though I suspect that certain readers may appreciate this extremely narrow focus.</p>
<p>Overall the book is well-edited, despite the presence of minor issues. Aside from a few typos (e.g., &#8220;becauseall&#8221; on page 79), readers may find the formatting to be slightly inconsistent at times. For example in chapter 5 when presenting sequences, after the <code>map</code> function has been introduced, the font for the subsequent functions is substantially decreased for no apparent reason. Readers may be misled into thinking that the functions presented afterwards are somehow different from the previous ones, when in fact they&#8217;re all defined in <code>clojure.core</code>. In Listing 6-3, at page 103, the authors present their first &#8220;complex&#8221; example (the address book) and they do so by using, among others, <code>doseq</code>. This macro was not introduced before that page nor is it really explained within the example.</p>
<p>From a physical standpoint, this book is a rather thin and wide paperback. A small font, coupled with small margins and a wide layout, imply that the readability of the book suffers a little. The paper itself is off-white, fairly thick and slightly textured, not as pleasant to the touch as other books by Apress or most other technical publishers, even though I recognize that this is a matter of taste (some people may actually love it because of these characteristics).</p>
<p>With two introductory Clojure books on the market, drawing comparisons is unavoidable. Stuart Halloway&#8217;s <a href="http://programmingzen.com/recommends/?1934356336">Programming Clojure</a> is a slightly older book (published in May 2009), which grants Practical Clojure a distinct advantage. This is not to say that Programming Clojure is obsolete, on the contrary it&#8217;s still a valid choice, but it doesn&#8217;t illustrate some of the new features that are available today. For example, in chapter 13 Practical Clojure introduces protocols and datatypes that will be available in Clojure 1.2 for the first time. Given that Halloway&#8217;s book was published more than a year ago, there was no possible way he could have included such powerful abstractions at the time.</p>
<p>Despite being older and less methodical than Practical Clojure, Programming Clojure tends to offer more complex examples. In the introduction of Programming Clojure you&#8217;ll see examples which Practical Clojure fails to include until much later in the book. Practical Clojure, the subject of this review, may leave you wanting for more practical examples of how all the language features fit together. Whereas Programming Clojure may leave you longing for more consistent explanations of how each part of the language works on its own.</p>
<p>Practical Clojure and Programming Clojure are competitors in the marketplace, but it wouldn&#8217;t be a bad idea to get ahold of both, because they complement each other quite well, in my opinion. Having to pick just one, I would probably recommend Practical Clojure, given its more consistent and up to date presentation. The sizzle offered by Programming Clojure, can be found to a much greater degree in upcoming and less introductory books, such as The Joy of Clojure. In this sense, reading Practical Clojure first followed by <a href="http://affiliate.manning.com/idevaffiliate.php?id=980&#038;url=4">The Joy of Clojure</a>, would be a solid learning path (<a href="http://affiliate.manning.com/idevaffiliate.php?id=980&#038;url=5">Clojure in Action</a> is another worthy addition, but it doesn&#8217;t replace The Joy of Clojure, which is a real gem).</p>
<p>In conclusion, Practical Clojure is not the Clojure equivalent of the highly praised <a href="http://programmingzen.com/recommends/?1590592395">Practical Common Lisp</a>, from the same publisher. Reading it cover to cover and typing all the snippets included within, will not give you enough knowledge to start writing complex, idiomatic Clojure programs out of the gate.</p>
<p>However, if you are learning Clojure today, I do recommend this book. It&#8217;s a clear, well thought-out, concise introduction to the language that will give you a solid foundation as you go on to learn more about Clojure and Lisp in general.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/07/16/in-depth-book-review-practical-clojure/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Ten recent programming books that will make you a better developer</title>
		<link>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/</link>
		<comments>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 11:53:13 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1202</guid>
		<description><![CDATA[Programming is the type of discipline that requires countless hours of dedication to reading and writing code, rather than purely theoretical learning from books. Yet programming books can be enlightening and provide guidance while one attempts to hone their craft in the pursuit of mastery. In this post I&#8217;ll share a (necessarily incomplete) list of [...]]]></description>
			<content:encoded><![CDATA[<p>Programming is the type of discipline that requires countless hours of dedication to reading and writing code, rather than purely theoretical learning from books. Yet programming books can be enlightening and provide guidance while one attempts to hone their craft in the pursuit of mastery.</p>
<p>In this post I&#8217;ll share a (necessarily incomplete) list of relatively new books that I believe will make most developers better programmers. By &#8220;new&#8221;, I mean books that have been released recently (within the past three years), that haven&#8217;t become classics yet or appeared in everyone else&#8217;s list of recommended programming books. Hence, you won&#8217;t find <a href="http://programmingzen.com/recommends/?0262011530">SICP</a>, <a href="http://programmingzen.com/recommends/?0201485419">TAoCP</a>, <a href="http://programmingzen.com/recommends/?0521663504">PFDS</a>, etc.</p>
<p>Please note that each of them deserves (and probably will receive at some time) a lengthy review. Here I simply state in a brief manner why I think they are important.</p>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>1. <a href="http://programmingzen.com/recommends/?0262033844">Introduction to Algorithms, Third Edition</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0262033844"><img src="http://programmingzen.com/wp-content/uploads/2010/06/introduction-to-algorithms.jpg" alt="Introduction to Algorithms Image" align="left" style="float: left; margin-right: 10px;" /></a>OK, this is cheating a little. &#8220;Introduction to Algorithms&#8221; is both a classic and a book on everyone&#8217;s list. However, I opted to include it because not everyone knows that it was recently (September 2009) released in its third edition. The book received a major upgrade to the existing content and exercises, as well as including new, modern algorithms. Any programmer working through this book, or revisiting it, will learn valuable, foundational knowledge.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 350px;">
<p><strong>2. <a href="http://programmingzen.com/recommends/?0470229055">The Annotated Turing</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0470229055"><img src="http://programmingzen.com/wp-content/uploads/2010/06/the-annotated-turing.jpg" alt="The Annotated Turing Image" align="left" style="float: left; margin-right: 10px;" /></a>Alan Turing wrote a classic paper in 1936 with the title: &#8220;<a href="http://www.google.com/search?q=On+Computable+Numbers,+with+an+Application+to+the+Entscheidungsproblem">On Computable Numbers, with an Application to the Entscheidungsproblem</a>&#8220;. It was a paper on Turing machines and the limits of computability, which had a major impact on computer science and the development of the computer you are reading this post on. Every programmer/computer scientist should get ahold of this paper and read it. Unfortunately, it isn&#8217;t exactly easy to grasp if you are not used to reading research papers. In &#8220;The Annotated Turing&#8221;, Petzold does a marvelous job of dissecting the paper (and its errata), providing ample explanations and background information over 18 chapters (360 pages vs 36 of the original paper). It manages to be rigorous while still being accessible. If this book doesn&#8217;t arouse your interest in computer science, chances are nothing will.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>3. <a href="http://programmingzen.com/recommends/?0321503627">Growing Object-Oriented Software, Guided by Tests</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0321503627"><img src="http://programmingzen.com/wp-content/uploads/2010/06/growing-oo-sw.jpg" alt="Growing OO Software Image" align="left" style="float: left; margin-right: 10px;" /></a>This book takes two fundamental pillars of modern software development, Object-Oriented Design and Test-Driven Development, and clearly illustrates how to apply the best practices of each to build and maintain complex software. I don&#8217;t know of many developers who couldn&#8217;t learn something new about TDD in the context of OOP from this book. A must read.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>4. <a href="http://programmingzen.com/recommends/?0132350882">Clean Code</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0132350882"><img src="http://programmingzen.com/wp-content/uploads/2010/06/clean-code.jpg" alt="Clean Code Image" align="left" style="float: left; margin-right: 10px;" /></a>While on the subject of Agile development, I can&#8217;t help but recommend &#8220;Clean Code&#8221; by Uncle Bob. It compliments &#8220;Growing Object-Oriented Software, Guided by Tests&#8221; perfectly by focusing on how to improve and refractor code to get rid of code smells. You can think of it as a very succinct version of Code Complete 2, with a strong focus on Agile craftsmanship. The examples, as per the previous book, are in Java but that shouldn&#8217;t be much of an issue for the open-minded developer.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 275px;">
<p><strong>5. <a href="http://programmingzen.com/recommends/?0321620704">Leading Lean Software Development: Results Are not the Point</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0321620704"><img src="http://programmingzen.com/wp-content/uploads/2010/06/leading-lean-sw-dev.jpg" alt="Leading Lean Software Development Image" align="left" style="float: left; margin-right: 10px;" /></a>Lean principles deriving from the Lean manufacturing world have been effectively translated and adapted to the field of software development. This book explains how to lead a team to success through lean software development in detail to team leaders and mentors. Having obtained a Lean Six Sigma yellow belt many years ago, this book definitely gave me a few flashbacks. If you are not familiar with the concepts presented, you&#8217;ll definitely find it food for thought. Building software requires far more than just writing quality code, and the techniques presented here are valuable, even if you don&#8217;t fully buy into this methodology.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>6. <a href="http://programmingzen.com/recommends/?1593271832">Growing Software</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1593271832"><img src="http://programmingzen.com/wp-content/uploads/2010/06/growing-software.jpg" alt="Growing Software Image" align="left" style="float: left; margin-right: 10px;" /></a>While on the subject of leadership, if you are in charge of software development at a small company or startup, you want to read this book. My interest in this title came from the fact that its author (Louis Testa) works as a Senior Engineering Manager at Galois, a company that uses Haskell as their technological advantage (and hired Don Stewart of Haskell fame). &#8220;Growing Software&#8221; delivered on my expectations and is full of hands-on advice on how to deal with the whole workflow surrounding the creation of software from the idea all the way to the sale and support of a product.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>7. <a href="http://programmingzen.com/recommends/?1593271743">The Art of Debugging with GDB, DDD, and Eclipse</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1593271743"><img src="http://programmingzen.com/wp-content/uploads/2010/06/art-of-debugging.jpg" alt="The Art of Debugging Image" align="left" style="float: left; margin-right: 10px;" /></a>Debugging is an invaluable skill and one that is often left out from introductory programming books. Being able to effectively debug code is what separate professionals from beginners, and productive programmers from frustrated ones. This book is ruthlessly practical with many advanced techniques for debugging on Linux/Unix. It&#8217;s well worth its price in my opinion.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>8. <a href="http://programmingzen.com/recommends/?1590597451">Applied Mathematics for Database Professionals</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1590597451"><img src="http://programmingzen.com/wp-content/uploads/2010/06/applied-math-db.jpg" alt="Applied Mathematics for Database Professionals Image" align="left" style="float: left; margin-right: 10px;" /></a>Assuming you already have a decent understanding of relational databases, and are not too scared of mathematics, this book will really bring your knowledge of how databases work to the next level, in turn improving the design, schema evolution, and SQL queries you&#8217;ll create afterwards.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>9. <a href="http://programmingzen.com/recommends/?0596529325">Programming Collective Intelligence</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?0596529325"><img src="http://programmingzen.com/wp-content/uploads/2010/06/collective-intelligence.jpg" alt="Programming Collective Intelligence Image" align="left" style="float: left; margin-right: 10px;" /></a>If you are building web applications that do more than simply CRUD operations on your data, you&#8217;ll want to read this book (with examples in Python). The motivated, intermediate developer will learn how to efficiently solve complex problems related to machine learning and intelligent web algorithms from this book. It&#8217;s a very accessible introduction to tough subjects and one of the most interesting books I&#8217;ve read in some time.</p>
</div>
<div style="margin-bottom: 20px; border: 1px solid #ccc; padding: 5px 15px 5px 15px; height: 260px;">
<p><strong>10. <a href="http://programmingzen.com/recommends/?1430219483">Coders at work</a></strong></p>
<p><a href="http://programmingzen.com/recommends/?1430219483"><img src="http://programmingzen.com/wp-content/uploads/2010/06/coders-at-work.jpg" alt="Coders at work Image" align="left" style="float: left; margin-right: 10px;" /></a>To conclude this list, I wanted to include a book that&#8217;s aimed at showing programmers how some of the best programmers and computer scientists do their work. I previously enjoyed <a href="http://programmingzen.com/recommends/?1430210788">Founders at Work</a>, and this version about programming is just as good. It&#8217;s inspiring, fun to read, and rich in insight and advice.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/06/21/ten-recent-programming-books-that-will-make-you-a-better-developer/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Upgrading to Rails 3</title>
		<link>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/</link>
		<comments>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/#comments</comments>
		<pubDate>Tue, 25 May 2010 07:12:12 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Featured Article]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1179</guid>
		<description><![CDATA[Rails 3 is a major upgrade; using it almost feels like working with an entirely new framework. Porting existing applications and acquiring the skills required to build new ones entails a significant amount of effort. You could scout the net for bits and pieces of information, but that would be time consuming and possibly frustrating. [...]]]></description>
			<content:encoded><![CDATA[<p>Rails 3 is a major upgrade; using it almost feels like working with an entirely new framework. Porting existing applications and acquiring the skills required to build new ones entails a significant amount of effort. You could scout the net for bits and pieces of information, but that would be time consuming and possibly frustrating. Thankfully there are resources available that have done the work for you, so you don&#8217;t have to waste time trying to figure out what&#8217;s new.</p>
<p>In this post, I&#8217;d like to point out a couple of resources that I think compliment each other well, and focus on how to upgrade applications, as opposed to simply providing you with a shopping list of features.</p>
<p>The first one is <a href="http://thinkcode.tv/catalog/upgrading-rails-3/">Upgrading applications to Rails 3</a>, a screencast that was just released by <a href="http://thinkcode.tv">ThinkCode.TV</a>. This screencast is almost an hour-long and shows you how to port a real world web application from Rails 2 to Rails 3. As such, it can be very useful if you have existing code that you&#8217;d like to port over to Rails 3. The author ported a few large applications to Rails 3, as he has solid experience with it. I&#8217;m biased of course, but I feel it&#8217;s well worth $8.99. (Today only, use the coupon <strong>RAILS3</strong> to purchase this Rails screencast for just $5.99.)</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="rails3.png" src="http://antoniocangiano.com/wp-content/uploads/2010/05/rails3.png" border="0" alt="rails3.png" width="550" height="323" /></p>
<p>The second resource is the <a href="http://www.railsupgradehandbook.com/">Rails 3 Upgrade Handbook</a> by&nbsp;Jeremy McAnally. It&#8217;s a beautiful PDF that succinctly explains what&#8217;s new in Rails 3, as well as how to upgrade your applications to the new edition of the framework. At 10c per page ($12 for 120 pages), it too is worth the money in my opinion.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="rails3uh.png" src="http://antoniocangiano.com/wp-content/uploads/2010/05/rails3uh.png" border="0" alt="rails3uh.png" width="400" height="355" /></p>
<p>Regardless of whether you end up buying these resources or not, I sure hope you have extensive test coverage for your existing Rails 2 applications. In my experience this is a must, because porting complex applications to Rails 3 without solid test support is a definite challenge. Nevertheless, I feel that this major upgrade is truly worth it. Rails 3 really brings Rails to a whole new level and we, as a community, should be proud and excited about what lies ahead of us.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/05/25/upgrading-to-rails-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recommended Ruby and Rails books (August 2009)</title>
		<link>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/</link>
		<comments>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 12:46:10 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1087</guid>
		<description><![CDATA[I finally got around to updating the Ruby and Rails book pages. The existing list was getting a bit obsolete and I didn&#8217;t like the idea of recommending old books to newcomers. I also had some interesting new entries. Without further ado: Recommended Ruby Books Recommended Rails Books A few people may disagree with the [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got around to updating the Ruby and Rails book pages. The existing list was getting a bit obsolete and I didn&#8217;t like the idea of recommending old books to newcomers. I also had some interesting new entries.</p>
<p>Without further ado:</p>
<ul>
<li><big><a href="http://antoniocangiano.com/ruby-and-rails-recommended-books/">Recommended Ruby Books</a></big></li>
<li><big><a href="http://antoniocangiano.com/rails-books/">Recommended Rails Books</a></big></li>
</ul>
<p>A few people may disagree with the choices, but I think most experienced Ruby and Rails programmers, who&#8217;ve read those books, will concur with my recommendations. I&#8217;m quite confident that these are, all things considered, some of the best books available on the subject.</p>
<p><strong>A word to the publishers</strong></p>
<p>As tempting as it is to collect Ruby and Rails books, these days I don&#8217;t feel I can economically justify the act of purchasing every Ruby or Rails book put out there. So if you are a publisher or an author, and you&#8217;d like for me to consider your book, you are certainly welcome to <a href="mailto:info@antoniocangiano.com?subject=Review copy">send me a review copy</a>. I will definitely read it, but only include it on these lists if it&#8217;s either outstanding or as good as the existing ones. If it&#8217;s a programming book that&#8217;s not related to Ruby/Rails, yet is really good, I would consider reviewing it on my blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/24/recommended-ruby-and-rails-books/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Do programmers still buy printed books?</title>
		<link>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/</link>
		<comments>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 16:11:57 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1073</guid>
		<description><![CDATA[Yesterday I published a post titled My latest order of programming books, which received a fair number of comments both here and elsewhere online. Aside from a few good suggestions for other must-read books for programmers, there were several comments about how buying hard copies of books in this day and age is stupid. A [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I published a post titled <a href="http://antoniocangiano.com/2009/08/14/my-latest-order-of-programming-books/">My latest order of programming books</a>, which received a fair number of comments both here and elsewhere online.</p>
<p>Aside from a few good suggestions for other must-read books for programmers, there were several comments about how buying hard copies of books in this day and age is stupid. A few advocated piracy as an alternative to buying books, printed or not. Aren&#8217;t we supposed to be a group of professionals? Do we really believe that pirating books is the right answer to our profession&#8217;s need for knowledge?</p>
<p>The most sensible recommendations concerned the use of legally free, available material online, as well as suggestions that the $250 could be spent on services like <a href="http://www.safaribooksonline.com/">Safari Books Online</a>.</p>
<p>I love Safari Books Online. I used to have an extended trial account for a few months, and utilized it constantly. I have access to <a href="http://www.books24x7.com/books24x7.asp">Books24&#215;7</a>, an alternative, less extensive service as well.</p>
<p>Safari Books is ideal when used as a reference. You have access to thousands of books from major publishers, so virtually any search will lead you to a few relevant volumes dealing with the subject you&#8217;re looking for. It&#8217;s also great for keeping up to date with technology, thanks to &#8220;Rough Cuts&#8221; which are books that haven&#8217;t been completed yet.</p>
<p>It&#8217;s an extremely valuable service and I would recommend it to anyone in a heart beat. However, there a few reasons why I still buy hard copies.</p>
<p>I spend long hours working and staring at the computer screen. A printed book is a chance to take a break at night, and let my eyes rest a little. I find it refreshing. And let&#8217;s face it, for extensive reading, paper is much easier to read from than the screen.</p>
<p>Likewise, when I&#8217;m holding a book or have it open on my desk, I&#8217;m in &#8220;book reading mode&#8221;, which makes it far easier to immerse myself in it. This means that I&#8217;m focused on the task and can proceed quickly. The only context switch that happens is between the book and the editor/shell, if it&#8217;s the kind of book that warrants typing along. If you are reading a book in a browser tab, it&#8217;s very easy to think, &#8220;I&#8217;ll just check my email for a second&#8221;, or introduce similar distractions. I&#8217;m sure I&#8217;m not alone in this respect.</p>
<p>When I buy a physical copy of a book, I feel psychologically more obliged to at least try to get through it. Online I experience a <a href="http://en.wikipedia.org/wiki/index.html?curid=14872453">paradox of choice</a> of sort. With hundreds of interesting books available there in front of me, I&#8217;m more inclined to excessively multitask, and end up checking out different books while I should still be reading the current one.</p>
<p>And let&#8217;s not forget that not all books are legally available online. I&#8217;ve found that many advanced computer science books are not yet available on Safari Books or Books24&#215;7. For example, <a href="http://www.amazon.com/gp/product/0201485419?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0201485419">The Art of Computer Programming</a>, <a href="http://www.amazon.com/gp/product/0521663504?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0521663504">Purely Functional Data Structures</a>, <a href="http://www.amazon.com/gp/product/0262162091?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0262162091">Types and Programming Languages</a>, <a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0201657880">Programming Pearls</a>, and other worthy suggestions that were made in response to my first post, are all not available on Safari Books. As well, mathematical books that can be of use to the serious/discerning programmer are also not included (understandably).</p>
<p>Lastly, and I realize that this is a &#8220;vanity point&#8221; and perhaps the most irrational one on this list, I like to have a beautiful collection of books on my bookshelves. If I&#8217;m going to spend $xxx a year on books, I&#8217;d prefer to have something to show for, beside my newly acquired knowledge.</p>
<p>However, the sheer volume of free available content has slowed down the number of books I&#8217;ve purchased in the past few years. And I&#8217;m thinking about re-joining Safari Books Online nevertheless, as I see it as being complementary to printed books. The <a href="https://ssl.safaribooksonline.com/subscribe">Safari Library</a> option is somewhat expensive ($42.99 per month), but for the price of an extra printed book per month, I gain full access to a huge catalog of programming books and a growing list of &#8220;Rough Cuts&#8221;.</p>
<p>With the amount of free knowledge available, useful paid services, research papers, and relatively good deals on printed copies from Amazon, the real constraint remains time not money. But claiming that purchasing hard copies is obsolete or worse, stupid, is&#8230; well, asinine, in my opinion.</p>
<p>What&#8217;s your take? Do you think Safari Books Online is worth it? Do you still buy printed copies of your professional books? Do you <a href="http://www.joelonsoftware.com/items/2008/04/16.html">even read programming books</a> at all these days?</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/15/do-programmers-still-buy-printed-books/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>My latest order of programming books</title>
		<link>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/</link>
		<comments>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 15:23:26 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1063</guid>
		<description><![CDATA[A few days ago it was my birthday. This year I decided to reward my aging self with some books I&#8217;d had my eyes on. My budget was roughly $250, nothing to snicker at, but programming and computer science books aren&#8217;t exactly famous for being inexpensive. The hardest part was shortlisting only a few titles, [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago it was my birthday. This year I decided to reward my aging self with some books I&#8217;d had my eyes on. My budget was roughly $250, nothing to snicker at, but programming and computer science books aren&#8217;t exactly famous for being inexpensive.</p>
<p>The hardest part was shortlisting only a few titles, out of a substantial number of books that interest me. This ruthless streamlining was not solely motivated by cost either. Time is by far the most non-negotiable constraint, and as pretty as certain books may look on my shelves, I&#8217;d rather get titles that I know I will reference often or read cover to cover.</p>
<p>Last night I finally placed my order on Amazon. Narrowing down my choices wasn&#8217;t easy, but I think I was able to get a lot of bang for my buck, so to speak. I&#8217;m sharing the list of books I ordered, and my rationale behind selecting them, in the hope that some readers will find this information useful. You&#8217;ll probably find one book at least that tickles your fancy.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0735611319?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0735611319"><img border="0" src="/images/31t68r9K28L._SL160_.jpg"><br />1) Code: The Hidden Language of Computer Hardware and Software</a> by Charles Petzold</p>
<p>Very high-level languages have major advantages, but they tend to conceal many details. As a result these low-level details are often forgotten, overlooked or no longer taught. I&#8217;m talking about gates, bit manipulation, etcetera. Ten years have passed since I last sat in a computer architecture class or programmed in the MIPS assembly language, so I see this book as a refresher about this sort of interesting details that lay between hardware and software.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0321543726?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321543726"><img border="0" src="/images/51TGVYzL%2BUL._SL160_.jpg"><br />2) Programming: Principles and Practice Using C++</a> by Bjarne Stroustrup</p>
<p>I&#8217;ve been meaning to get more serious about learning C++ for a while now. The fact that I chose this book may seem odd. After all, it&#8217;s a C++ book for CS 101. I&#8217;m fully aware that I won&#8217;t find many new concepts in it and that the pace will probably be very slow to me at time, as it&#8217;s aimed towards newcomers. I opted for this book, among other reasons, because it&#8217;s very recent and was written by Bjarne Stroustrup (C++&#8217;s creator) himself. It&#8217;s a modern overview of C++ today and should cover all the essentials of writing portable code with a slant towards real world work, including parts of the <abbr title="Standard Template Library">STL</abbr>. I&#8217;m interested in revisiting well known concepts from the perspective of C++, and this title should work as a good introduction before I switch to <a href="http://www.amazon.com/gp/product/0201700735?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0201700735">The C++ Programming Language</a>, <a href="http://www.amazon.com/gp/product/0321334876?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321334876">Effective C++</a>, <a href="http://www.amazon.com/gp/product/020163371X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=020163371X">More Effective C++</a>, <a href="http://www.amazon.com/gp/product/0201615622?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0201615622">Exceptional C++</a>, and other advanced books. Lastly, I chose it because <a href="http://phusion.nl">a good friend</a> suggested it to me.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262182629?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262182629"><img border="0" src="/images/51UPLtYbwkL._SL160_.jpg"><br />3) Processing: A Programming Handbook for Visual Designers and Artists</a> by Casey Reas</p>
<p>Processing is another language I&#8217;m interested in. The idea of creating fancy visualizations of data is very appealing to my statistical side. This is probably another &#8220;basic&#8221; book, but I wanted to have a detailed tutorial on the subject. It&#8217;s also a very beautiful book. (Remember that deep down we are all hedonists.)</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0132350882"><img border="0" src="/images/419EFaGEGvL._SL160_.jpg"><br />4) Clean Code: A Handbook of Agile Software Craftsmanship</a> by Robert C. Martin</p>
<p>I love &#8220;Uncle Bob&#8221;&#8216;s writing style and this book is, according to many, a wonderful addition to any software engineer&#8217;s collection. Apparently it&#8217;s <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0735619670">Code Complete</a> meets <a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=xm2&#038;camp=1789&#038;creativeASIN=0201485672">Refactoring</a> meets <a href="http://www.amazon.com/gp/product/0321146530?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321146530">Test Driven Development: By Example</a>, all wrapped up in a single book. As much as that&#8217;s possible, naturally.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262560992?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262560992"><img border="0" src="/images/41RWS3BB0VL._SL160_.jpg"><br />5) The Little Schemer (4th Edition)</a> by Daniel P. Friedman</p>
<p>This is the first little volume in the &#8220;The * Schemer&#8221; trilogy. I&#8217;ve heard great things about this unusual Q&#038;A book that straddles the border of functional and logic programming. I&#8217;m not new to functional programming, but I&#8217;m certain that this book will be an eye-opener nevertheless. There should be plenty of fun exercises inside. If I enjoy it as much as I hope, I&#8217;ll also get <a href="http://www.amazon.com/gp/product/026256100X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=026256100X">The Seasoned Schemer</a> and <a href="http://www.amazon.com/gp/product/0262562146?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262562146">The Reasoned Schemer</a>, down the line to bring my understanding to the next level.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0262033844?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0262033844"><img border="0" src="/images/41hJ7gLDOmL._SL160_.jpg"><br />6) Introduction to Algorithms, Third Edition</a> by Thomas H. Cormen</p>
<p>I own the second edition of this book, but guess what? They just released a revised edition with updated content, new algorithms and it&#8217;s been expanded to take the world of multiple processors into account. If you are not familiar with this classic, don&#8217;t let the title mislead you, this is no &#8220;introduction&#8221;. It&#8217;s an excellent, rigorous tutorial and reference that every programmer should own.</p>
<p align="center"><a href="http://www.amazon.com/Elements-Programming-Alexander-Stepanov/dp/032163537X/?ie=UTF8&#038;tag=zenruby-20"><img border="0" src="/images/41dJEbLUXeL._SL160_.jpg"><br />7) Elements of Programming</a> by by Alexander Stepanov</p>
<p>The toughest book of the lot. This newly released theory of computation book has incredible reviews. It should be a rigorous handbook of the mathematical foundations of programming. And at <a href="http://www.amazon.com/Elements-Programming-Alexander-Stepanov/dp/032163537X/?ie=UTF8&#038;tag=zenruby-20">this price</a> it&#8217;s a bargain, in my opinion. The examples are in C++, so I&#8217;ll quote part of the review by Bjarne Stroustrup.</p>
<blockquote><p>&#8220;Elements&#8221; is a great book in that it can change the way you think about programming in fundamental ways: If you &#8220;get it&#8221; programming will never be the same again for you.</p>
<p>Reading &#8220;Elements&#8221; requires maturity both with mathematics and with software development. Even then it is so different from most books on programming that it can be hard going. The frequent comparisons of &#8220;Elements&#8221; to Knuth&#8217;s &#8220;The Art of Programming&#8221; is well earned.<br />&mdash;  Bjarne Stroustrup</p></blockquote>
<p>What are your thoughts on this list? I think I could have done a lot worse with my modest $250 budget. And as you can imagine, I&#8217;m pretty excited about their arrival and am looking forward to diving into them.</p>
<p>On a side note, this reminds me that I should start writing detailed reviews for the most interesting books I&#8217;ve read over the past few years, not just for <a href="http://antoniocangiano.com/ruby-and-rails-recommended-books/">Ruby books</a> (recently updated) and <a href="http://antoniocangiano.com/rails-books/">Rails ones</a> (to be updated soon).</p>
<p><small>Disclaimer: The links to Amazon have my referral. It&#8217;s a small contribution to this blog that won&#8217;t cost you a dime. If you are opposed to me making a few cents from my posts, feel free to select, copy and then paste the title that interests you into Google.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/14/my-latest-order-of-programming-books/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>New look and feel. Do you like it?</title>
		<link>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/</link>
		<comments>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 04:57:32 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=659</guid>
		<description><![CDATA[Those who follow this blog through the feed, may not have noticed it, but over the weekend I had a chance to revamp the look of Zen and the Art of Programming. I used a WordPress theme I&#8217;d already employed on Math Blog and customized it, basing my changes on the suggestions of the participants [...]]]></description>
			<content:encoded><![CDATA[<p>Those who follow this blog through the <a href="http://feeds2.feedburner.com/ZenAndTheArtOfRubyProgramming">feed</a>, may not have noticed it, but over the weekend I had a chance to revamp the look of <a href="http://antoniocangiano.com/">Zen and the Art of Programming</a>. I used a WordPress theme I&#8217;d already employed on <a href="http://math-blog.com/">Math Blog</a> and customized it, basing my changes on the suggestions of the participants of <a href="http://antoniocangiano.com/2008/11/06/take-this-survey-and-win-a-free-ticket-for-the-professional-ruby-conference/">my earlier survey</a> on the subject. I&#8217;m not a web designer by any means, but I&#8217;m quite happy with the way it looks and the overall clean feel this new layout lends the site. What do you think about it?</p>
<p>While at it, I also updated my <a href="http://antoniocangiano.com/about/">About</a> page and added a thumbnail of the cover of my book to the sidebar. I finished writing <a href="http://www.amazon.com/gp/product/0470374950?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470374950">Ruby on Rails for Microsoft Developers</a> a couple of months ago and am now waiting for Wrox to do their magic and get it into stores. The book should leave Wrox&#8217;s warehouse towards the end of this month and reach customers in early April. But I&#8217;ll talk about my book and the subject of writing a technical book more in future posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/03/16/new-look-and-feel-do-you-like-it/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Learn Merb</title>
		<link>http://programmingzen.com/2008/12/13/learn-merb/</link>
		<comments>http://programmingzen.com/2008/12/13/learn-merb/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 16:34:00 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=450</guid>
		<description><![CDATA[The most effective martial artists specialize in their discipline, but are not afraid to cross-train in others. Bruce Lee&#8212;arguably the most famous and influential martial artist of the past century&#8212;trained first in Tai Chi Chuan, then Gung Fu, and boxing, as well as learning western fencing. The insight taken from so many disciplines led him [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://antoniocangiano.com/images/merb.png" alt="Merb's logo" align="right" />The most effective martial artists specialize in their discipline, but are not afraid to cross-train in others. Bruce Lee&mdash;arguably the most famous and influential martial artist of the past century&mdash;trained first in Tai Chi Chuan, then Gung Fu, and boxing, as well as learning western fencing. The insight taken from so many disciplines led him to create the Jeet Kune Do form of combat.</p>
<p>Programmers are not all that different. Cross-training in other languages and frameworks can only improve one&#8217;s overall mastery of the craft. When it comes to Ruby frameworks, the two most popular choices are Ruby on Rails and Merb. They&#8217;re often seen as being contenders, but this truly isn&#8217;t a zero-sum game; learning both is a very sensible move. They both enable you to write web applications in Ruby, and are somewhat similar, so learning one after you know the other shouldn&#8217;t be very challenging. In the many cases people learn Merb after they&#8217;ve had some experience with Rails, but either way, acquiring a solid grasp of both frameworks provides developers with extra flexibility. Often people who learn both, will end up mostly just using one or another, depending on their individual preferences. But it&#8217;s worth knowing them so as to be able to write both CRUD-style applications that fall within Rails&#8217; solution space, and more complex, edge cases where Rails&#8217; opinions will end up contending with yours.</p>
<p>Among the reasons to give Merb a chance, is its focus on performance, a smaller memory footprint and an extreme level of modularity, which enables you to pick and choose which components you&#8217;d like to use.</p>
<p>Merb is not as mature as Rails, of course, but it has reached version 1.0.x and with it developers can have greater confidence in a more stabilized API. Now is perhaps the best moment to get involved and learn more about this rising framework. Not surprisingly though, Merb finds itself in a similar spot to the one that Rails was in a couple of years ago (in terms of weakness of documentation when it comes to getting started). Thankfully, this point is being taken seriously and there&#8217;s been some major progress in terms of improving the documentation for Merb. Below are some useful links to get you started with Merb.</p>
<p>Merb has an official <a href="http://merbivore.com/documentation.html">API documentation</a>, a <a href="http://wiki.merbivore.com/">wiki</a>, <a href="http://groups.google.com/group/merb">a google group</a>, and a community site called <a href="http://merbunity.com/"> Merbunity</a> for news, projects and tutorials. The irc.freenode.net #merb channel is also a useful and welcoming spot. Furthermore, there is a Peepcode PDF draft called <a href="http://peepcode.com/products/meet-merb-pdf-draft Meet Merb">Meet Merb</a>. If you want something even more substantial, on the book front there are several titles coming out in the near future. These include <a href="http://manning.com/ivey/">Merb in Action</a>, <a href="http://my.safaribooksonline.com/9780321601636?portal=oreilly">The Merb Way</a>, <a href="http://www.amazon.com/gp/product/1430218231?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1430218231">Beginning Merb</a> and <a href="http://www.amazon.com/gp/product/1430218657?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1430218657">Merb: What You Need To Know</a>. There is also <a href="http://book.merbist.com/">an open source Merb book,</a> whose development is led by Matt Aimonetti. It&#8217;s a work in progress, but probably a very good starting point, which just happens to have the added bonus of being free. And if your interested in Merb, don&#8217;t miss InfoQ&#8217;s <a href="http://www.infoq.com/interviews/katz-merb">interview with Yehuda Katz</a>, who&#8217;s Merb&#8217;s lead developer and one of the sharpest guys we have in the Ruby community.</p>
<p>Finally, if you are a professional developer who wants to quickly progress with Merb and bring their skills to the next level, do not miss your chance to attend a three day <a href="http://merbclass.com">intensive course on Merb</a>, which is being offered by Yehuda and Matt in Phoenix, AZ between January 19 and 21 (2009). Registration has been open for two days already and 20 out of the 30 available spots have already been snapped up. The remaining seats won&#8217;t last more than a day or two, so if you are interested, don&#8217;t delay (sign up now and you&#8217;ll also benefit from an early registration price).</p>
<p>2009 is almost here, so why not take the opportunity to learn Merb this year?</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/12/13/learn-merb/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>IBM&#8217;s XML Challenge (lots of prizes inside)</title>
		<link>http://programmingzen.com/2008/12/01/ibms-xml-challenge-lots-of-prizes-inside/</link>
		<comments>http://programmingzen.com/2008/12/01/ibms-xml-challenge-lots-of-prizes-inside/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 19:39:06 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=393</guid>
		<description><![CDATA[IBM is holding a series of challenges centered around XML. The whole event is labeled The XML Challenge (subtitle: Search for the XML superstar). Rockstar references aside, this is a pretty cool initiative that can provide you with some freebies as well as high quality prizes if you win any of the available contests. The [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://antoniocangiano.com/images/xml_challenge_logo.jpg" alt="The XML Challenge" title="The XML Challenge" align="right" />IBM is holding a series of challenges centered around XML. The whole event is labeled <a href="http://xmlchallenge.com">The XML Challenge</a> (subtitle: Search for the XML superstar). Rockstar references aside, this is a pretty cool initiative that can provide you with some freebies as well as high quality prizes if you win any of the available contests.</p>
<h4>The Contests</h4>
<p></p>
<p>What I say below applies to US and Canada, as the contest is being held worldwide in 30 countries separately, and each of these may have different individual contests and prizes as well. In fact, the first thing you&#8217;ll see when you visit the <a href="http://xmlchallenge.com">xmlchallenge.com</a> site should be a popup that prompts you to select your country.</p>
<p>For US/Canada there are 5 contests: Video, Gadget, Query, Porting and XML. <strong>The Video Contest</strong> consists of creating a funny/creative/cool video about XML, XQuery and/or DB2. <strong>The Gadget Contes</strong>t is about developing a downloadable gadget/widget that leverages DB2. <strong>The Query Contest</strong> requires you to use XQuery to query a database and come up with the answer to five questions. <strong>The Ported Application Contest</strong> is all about porting an existing application to DB2 or creating a new one that uses DB2. And finally, <strong>the XML Contest</strong> asks you to build a useful, user-friendly XML application from scratch. The last two contests can be approached as a team or as an individual. The Query, Ported App and XML contests start today!</p>
<p>You don&#8217;t have to participate in all of them, of course. But by participating in any of these you gain points, and there are six badges that you can obtain: XML Challenger, XML Rookie, XML Whiz, XML Star, XML Master and XML Grand Master. I feel so nerdy reporting this. The XML Grand Masters will be enrolled in a draw for an additional prize.</p>
<h4>The Prizes</h4>
<p></p>
<p>Speaking of prizes, let&#8217;s see what goodies are up for grab. There will be a few give-aways just for participating. For example, the first 500 participants will receive an XML Challenge T-Shirt as well as a Rubick&#8217;s Cube. The first 1000 to complete the Quick Quiz during registration will also receive a free T-Shirt. But let&#8217;s move on to the more substantial prizes.</p>
<p>For the sake of awarding prizes, the contestants will be split in two groups, students and professional developers.</p>
<p><strong>The Video Contest</strong>: The deadline is December 17, 2008 and a few selected winners will receive an 8GB iPod Video Nano (for both students and developers).</p>
<p><strong>The Gadget Contest</strong>: The deadline is December 17, 2008 and the winning students grab Canon Powershot SD870 Cameras, while winning developers get 80GB Zunes.</p>
<p><strong>The Query Contest</strong>: After you register, you&#8217;ll have 24 hours to submit your answers. The first 50 successful participants for each group (for a combined total of 100) will receive a 1GB USB key, while all the contestants with the right answers will be entered in a draw for a grand prize. This is a Playstation 3 40GB for the students, and a 32GB iPod Touch for the developers;</p>
<p><strong>The Ported Application Contest</strong>: The deadline is January 31st, 2009. The winning team or individual amongst the students will receive an HD Pavilion HDX Notebook, while the winning developer will score a Lenovo IdeaPad U110. The second prize for both of the two groups will a Garmin nüvi GPS.</p>
<p><strong>The XML Contest</strong>: The deadline is January 31st, 2009. The 1st prize for each group will be a high-end 17&#8243; Alienware Laptop (two laptops will be awarded in total). The second prize for both groups will be a Nintendo Wii (again, two in total).</p>
<p>Finally, two lucky XML Grand Masters, one developer and one student, will receive a Bose Wave Radio II.</p>
<p>I hope you consider enrolling now and best of luck! If you need some help with getting started with <a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&#038;S_TACT=ACDB201">DB2 Express-C</a>, you can download the <a href="http://www.ibm.com/developerworks/wikis/display/DB2/FREE+Book-+Getting+Started+with+DB2+Express-C">free e-book</a> which is available in several languages. Oh, and finally we have <a href="ftp://ftp.software.ibm.com/software/data/db2/express-c/wiki/Getting_Started_with_DB2_Express_v9.5_Italian.pdf">an Italian version</a> as well.</p>
<h4>Promote this post</h4>
<p></p>
<p>Hey, would you give me a hand in promoting this post? If you are in the US or Canada, and mention &#038; link to this post from your blog, you&#8217;ll receive a free XML Challenge T-Shirt and a Rubick&#8217;s Cube as well. All you have to do is send me an email (to acangiano at gmail.com) with a link to your blog entry, as well as your shirt size and complete mailing address. Thank you!</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/12/01/ibms-xml-challenge-lots-of-prizes-inside/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Merb, Rails Myths, Language Popularity and other Zenbits</title>
		<link>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/</link>
		<comments>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 23:50:53 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Benchmark Suite]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Zenbits]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=381</guid>
		<description><![CDATA[Zenbits are posts which include a variety of interesting subjects that I&#8217;d like to talk about briefly, without writing a post for each of them. Merb: A few days ago Merb 1.0 was released. Congratulations to Ezra Zygmuntowicz on this important milestone, the Merb community and Engine Yard (who finances the project). Merb 1.0 wasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>Zenbits</strong> are posts which include a variety of interesting subjects that I&#8217;d like to talk about briefly, without writing a post for each of them.</em></p>
<p><strong>Merb:</strong> A few days ago <a href="http://brainspl.at/articles/2008/11/08/merb-1-0">Merb 1.0</a> was released. Congratulations to Ezra Zygmuntowicz on this important milestone, the Merb community and <a href="http://engineyard.com">Engine Yard</a> (who finances the project). Merb 1.0 wasn&#8217;t even out yet when some people had already started commenting on the fracturing of the Ruby community that this new framework might bring with this, and the impact that this high visibility &#8220;competitor&#8221; might have on Rails. I believe that having more than one widely adopted web framework will only benefit the Ruby community. Furthermore, it&#8217;s important to remember that this is not a zero-sum game. Ruby programmers are perfectly capable of learning two frameworks and using one or the other, depending on the project at hand. This is particularly true if we consider that Merb, for all of its advantages &#8211; and disadvantages &#8211; when compared to Rails, is not totally different from its forerunner. If you are an expert Rails programmer, you should be able to become proficient in Merb in very little time. To help with this process, the Merb community needs to concentrate on the documentation now, given that the API is finally stable.</p>
<p><strong>Rails Myths:</strong> David Heinemeier Hansson began <a href="http://www.loudthinking.com/posts/29-the-rails-myths">a series of posts about Rails Myths</a>. I like the idea of seeing common myths addressed straight from the horse&#8217;s mouth. Over the past two years, Rails has received quite a bit of backslash and old fashion FUD, so it&#8217;s important to set the record straight, whether the myths are entirely fabricated or if there is some element of truth to them. Whether you agree with David or not, it&#8217;s also nice to hear two sides of the same story. In fact, at the beginning of <a href="http://antoniocangiano.com/my_ruby_on_rails_book.php">my book</a> I debunk a few myths, just to set the record straight regarding what some readers may have heard surrounding the framework. It was a fun part to write.</p>
<p><strong>My Book:</strong> Speaking of my book, <a href="http://antoniocangiano.com/my_ruby_on_rails_book.php">Ruby on Rails for Microsoft Developers</a>, I&#8217;m getting closer to the finish line. I&#8217;m about to complete Chapter 9 (out of eleven chapters). The initial schedule I was provided with has been extended slightly so that there will be sufficient time to properly review the content and ensure that it&#8217;s up to date with the final release of Rails 2.2. Some people wondered what the &#8220;Microsoft Developers&#8221; part means. Is it for people that work at Microsoft? Is it for .NET programmers? Is it for people who develop on Windows?</p>
<p>The truth is that &#8220;Microsoft Developers&#8221; is probably just a marketing term that Wrox selected as a catch-all for of the aforementioned categories of programmers. As an author I&#8217;m trying to serve all of them well, by providing a guide that sneaks in much of the Rails culture and softens the migration path by using an Operating System, and to a certain extent, tools that they&#8217;re already familiar with. In my opinion one of the major obstacles when switching to, or trying, Rails when coming from the Microsoft world, is the culture shock. The documentation and most books assume that you are familiar with *nix systems and tools, and this can be frustrating for those who are forced not only to learn a new language and framework, but also an entirely new set of tools. As it&#8217;s targeted at Microsoft developers, the book obviously makes quite a few references and comparisons to the .NET world, where they fit. This is done so that the many .NET programmers amongst the group of so called &#8220;Microsoft Developers&#8221; will find the book particularly useful. Yet the book remains generic enough so that it can be used by any programmer (particularly Windows users), even those without any knowledge of the Microsoft .NET Framework or ASP.NET.</p>
<p><strong>Python books:</strong> While on the subject of books, I wanted to mention that the final version of the <a href="http://pylonsbook.com/alpha1/toc">Pylons book</a> is available online. Despite the much less fancy UI, the book pretty much does what the <a href="http://djangobook.com/en/1.0/">Django Book</a> did in the past. And both are available in print as well (<a href="http://www.amazon.com/gp/product/1590597257?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590597257">The Definitive Guide to Django: Web Development Done Right</a> and <a href="http://www.amazon.com/gp/product/1590599349?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590599349">The Definitive Guide to Pylons</a>). <a href="http://pylonshq.com/">Pylons</a> is a Python web framework that can be viewed as a Ruby on Rails clone, in a far greater way than Django could ever be considered.</p>
<p>Another thing I want to mention is that I received a copy of <a href="http://www.amazon.com/gp/product/184719494X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=184719494X">Expert Python Programming</a>. I haven&#8217;t gotten to far into it yet, but from what I&#8217;ve seen so far, things look good. I hope to be able to read it through, over a weekend in the near future and then provide a proper review. Stay tuned.</p>
<p><strong>Language Popularity:</strong> If you take a look at the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE Index</a>, you&#8217;ll notice a few interesting things: Ruby has dropped two positions since last year, and it&#8217;s now the 11th most popular language in the world. This shouldn&#8217;t be cause for concern though, as shown by this <a href="http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html">Ruby graph</a>. Python on the other hand is increasing in popularity and moved from the 7th to the 6th most popular language. Interestingly, according to the index (the results of which are educated guesses only), Python would seem to be more popular than C#. I find this to be true, in terms of online activity within an increasingly vibrant community, but in my opinion, the job market hasn&#8217;t caught up yet. In fact, at least in Toronto, when there&#8217;s a Python opening it&#8217;s pretty much an event that&#8217;s worthy of being discussed on the local Python mailing list. C# openings are much more common. This may be different in Silicon Valley, of course. It would also seem that Delphi has experienced a huge come back, moving from the 11th position last year to the 8th one this time around. It&#8217;s hard to imagine that Delphi has had a similar level of adoption as C# and thus has become more popular than Perl, JavaScript and Ruby. Delphi is a great solution for Win32 programming, but I don&#8217;t quite believe this overly optimistic outlook. And if this is the case, where are all the Delphi jobs and buzz?</p>
<p><strong>DB2:</strong> <a href="http://www.youtube.com/watch?v=W69zLWjpzEo">This interview</a> shows a few good reasons why even smaller and medium sized companies are increasingly adopting DB2. And while the video doesn&#8217;t mention it, IBM is coming out with <a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&#038;S_TACT=ACDB201">an updated version of DB2 Express-C 9.5</a>. This new version, 9.5.2 or 9.5 FixPack 2, is going to introduce exciting new features, including an engine for full text search.</p>
<p><strong>The Great Ruby Shootout</strong> These days you hear a lot of talk about parallel programming. Intel <a href="http://software.intel.com/en-us/blogs/2008/10/22/sequential-programming-is-dead-so-stop-teaching-it/">promotes it</a> and despite their bias, it&#8217;s plausible that parallel programming will become important as the CPU market heads towards an increasingly larger number of cores, as opposed to focusing on the frequency of said CPUs. In the world of Ruby, this translates into <a href="http://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/">multiprocessing, as opposed to multithreading</a> due to the infamous GIL (Global Interpreter Lock). This means that Ruby will most likely approach the problem similarly to how Python 2.6 did with the <a href="http://docs.python.org/dev/library/multiprocessing.html">multiprocessing module</a>, which is a process-based interface. The obvious exceptions are JRuby and IronRuby, which establish a 1 to 1 relationship between green threads and OS threads.</p>
<p>For the shootout, it would be interesting to see some multithreaded code, so as to get a better sense of how well JRuby and IronRuby compare to MRI and 1.9, when more cores are available. In fact, the long-promised shootout will be performed on a quad-core machine with 8GB of RAM. If Charles Nutter, John Lam, or any of their team members would like to contribute some programs that are able to take advantage of &#8220;native&#8221; multithreading, I&#8217;d be very happy to include them in the <a href="http://groups.google.com/group/ruby-benchmark-suite?pli=1">Ruby Benchmark Suite</a>, to be used for my shootout.</p>
<p>The repository requires some love and refactoring, since it needs to be split in two types of benchmarks. The simpler one will evaluate the execution time minus the startup time, while the more advanced benchmark will also exclude the time required for parsing and loading modules, classes and methods in the AST. It would also be nice to test each program with variable input sizes and report these results accordingly. Right now I&#8217;m very busy with the book, but as I become more available, I&#8217;ll start working on this.</p>
<p>Finally, I want to point out <a href="http://unweary.com/2008/11/specifying-performance.html">a very interesting article</a> about performance and UIs. Slow is indeed a very relative concept, and it&#8217;s important to understand how to analyze and respond to the user requirements when it comes to the responsiveness of an application as a user interacts with it.</p>
<p><strong>Hardware:</strong> I finally bought a <a href="http://www.amazon.com/gp/product/B00006B9CR?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B00006B9CR">Trackball made by Logitech</a> and the <a href="http://www.amazon.com/gp/product/B000OOY4S6?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B000OOY4S6">Microsoft Ergonomic Keyboard</a> (Microsoft makes great hardware). I don&#8217;t have wrist problems, but I&#8217;d like to see how these two affect my extensive computer usage. I plan to report my experience as soon as I&#8217;ve had a chance to use these input devices for a while, since I know this is a topic that interests lots programmers (many of whom end up being victims of <a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury">RSI</a>, and some of the IRS <img src='http://programmingzen.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ). I also bought <a href="http://www.amazon.com/gp/product/B000XZ79ME?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B000XZ79ME">a bad-ass color laser printer</a> which is quite handy when you&#8217;re a programmer and you are writing a book. I&#8217;ll let you know how it goes. What I didn&#8217;t buy, but still think is awesome, is the <a href="http://www.amazon.com/gp/product/B001HSOFI2?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001HSOFI2">Flip minoHD</a>. It&#8217;s the equivalent of an iPod for the world of camcorders. $235 for a camcorder that&#8217;s so perfectly compact, and yet that can record in HD, is a pretty sweet deal. I&#8217;m considering it for Christmas, assuming it reaches Canada by then.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
