<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Old Dog, New Tricks</title>
	<atom:link href="http://mdenomy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mdenomy.wordpress.com</link>
	<description>Striving for better ways to write code</description>
	<lastBuildDate>Fri, 27 Jan 2012 13:46:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mdenomy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Old Dog, New Tricks</title>
		<link>http://mdenomy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mdenomy.wordpress.com/osd.xml" title="Old Dog, New Tricks" />
	<atom:link rel='hub' href='http://mdenomy.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Season of Ruby &#8211; The String Calculator Kata and GitHub</title>
		<link>http://mdenomy.wordpress.com/2012/01/25/season-of-ruby-the-string-calculator-kata-and-github/</link>
		<comments>http://mdenomy.wordpress.com/2012/01/25/season-of-ruby-the-string-calculator-kata-and-github/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 19:30:03 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Season of Ruby]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=429</guid>
		<description><![CDATA[Last iteration I realized that I needed to start writing some code, so the big story for this iteration was to do Roy Osherove&#8217;s String Calculator Kata and also to push the code up to github. Mission accomplished! But unlike &#8216;W&#8217; standing on the aircraft carrier, I know there is a lot more work to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=429&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last<a href="http://mdenomy.wordpress.com/2012/01/22/season-of-ruby-iteration-zero-retrospective/"> iteration</a> I realized that I needed to start writing some code, so the big story for this iteration was to do Roy Osherove&#8217;s <a href="http://osherove.com/tdd-kata-1/">String Calculator Kata</a> and also to push the code up to <a href="https://github.com/mdenomy">github</a>. <a href="https://github.com/mdenomy/StringKata">Mission accomplished</a>! But unlike &#8216;W&#8217; standing on the aircraft carrier, I know there is a lot more work to do.</p>
<p>I used <a href="http://git-scm.com/">git</a> a little bit a few years ago, and initially it was a painful adjustment because all my past experience was with centralized repositories like Subversion, Team Foundation, and CVS. Distributed repositories were a paradigm shift, but after some getting used to it really started to grow on<br />
me. I loved home easy it was to create branches and that developers could work on different features in isolation before bringing their code back into the &#8220;trunk&#8221;. So it was great to get some code up on github, using both the RubyMine integration and plain old git command line tools. I need to spend a little time refamiliarizing myself with the terminology and workflow, but it was a great start.</p>
<p>As far as the kata goes I feel similarly. Did everything turn out exactly the way I wanted? No, but it is a kata. You do it, you learn something, you take those lessons forward, and you move on. Maybe I will do it again in a few weeks and see how the outcome is different. It served it&#8217;s purpose in getting me out of my comfort zone and writing code in a new language. It also got me asking new questions and places to take the journey. Some of the things that I wondered about as I was doing the kata</p>
<ul>
<li>Does Ruby have the philosophy that there is one &#8220;right and obvious&#8221; way to do things, ala Python, or is it more Perl-like in that there are a <a href="http://c2.com/cgi/wiki?ThereIsMoreThanOneWayToDoIt">many ways</a> that are acceptable and it is a developer choice. At least according to this <a href="http://c2.com/cgi/wiki?PythonVsRuby">page </a>it seems to borrow from Perl in that there is more than one way to do it.</li>
<li>How do private and protected variables/methods work in Ruby?  Are they often used or are there other patterns that are applied?  I remembered with Python that the notion of &#8220;private&#8221; was downplayed, at least with what I saw. I am not a Python expert so I may be mis-representing here.</li>
<li>Are instance variables used much?  In one of my refactorings I noticed that I was passing the same argument to a lot of methods, and decided to keep it in an instance variable. Was that Ruby-esque? Was it habits from .NET creeping in?  Was it the &#8220;best&#8221; solution</li>
</ul>
<p>I don&#8217;t know the &#8220;Ruby Way&#8221; yet, so these questions are all the more reasons to start looking at OPC (other people&#8217;s code). So it is probably time to fork a Ruby open source project and start playing around with it.</p>
<p>I want to make sure I keep writing code too, so I think I will take a time-boxed stab at <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">Conway&#8217;s Game of Life</a>. I had a lot of fun with that at the <a href="http://blog.coderetreat.com/global-day-of-coderetreat">Global Day of Code Retreat</a>. I want to time-box it because it is something that I could spend a lot of time on, depending on how far I want to take it, and I am not looking for a complete solution but to exlore some different ideas in code. Maybe it&#8217;s time to start thinking about bring <a href="http://rubyonrails.org/">Rails</a> into the mix too.</p>
<p>All these ideas make me think I should be keeping a formal backlog and continuing with the notion of treating this journey as an Agile project. I use a tool called <a href="http://www.rallydev.com/product-features/rally-community-edition">Rally</a> at work, maybe I&#8217;ll use that or investigate another tool. Any ideas or recommendations from the blogosphere?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/429/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=429&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2012/01/25/season-of-ruby-the-string-calculator-kata-and-github/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>Season of Ruby &#8211; Iteration Zero Retrospective</title>
		<link>http://mdenomy.wordpress.com/2012/01/22/season-of-ruby-iteration-zero-retrospective/</link>
		<comments>http://mdenomy.wordpress.com/2012/01/22/season-of-ruby-iteration-zero-retrospective/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 19:21:18 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Season of Ruby]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=416</guid>
		<description><![CDATA[Keeping in the Agile spirit, I did a retrospective for Iteration Zero of my Season of Ruby.  When I conduct a retrospective I cover 3 areas: What did we do well What can we improve on What are we going to focus on in the next iteration to improve the process or the product I am a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=416&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Keeping in the Agile spirit, I did a <a href="http://mdenomy.wordpress.com/2008/10/02/project-retrospective/">retrospective </a>for Iteration Zero of my <a href="http://mdenomy.wordpress.com/category/season-of-ruby/">Season of Ruby</a>.  When I conduct a retrospective I cover 3 areas:</p>
<ol>
<li>What did we do well</li>
<li>What can we improve on</li>
<li>What are we going to focus on in the next iteration to improve the process or the product</li>
</ol>
<p>I am a team of 1 on this journey, so &#8220;we&#8221; is me.</p>
<p><strong>What Went Well</strong></p>
<ul>
<li>Digging the Ruby Koans<strong> &#8211; </strong>I&#8217;m happy that I am not just blowing through them to get to the next subject, but asking questions when something doesn&#8217;t make sense or surprises me.  I also find myself adding additional tests to experiment with behaviors</li>
<li>Love playing around in the IRB  -  This also has a lot to do with experimenting and following where my curiosity takes me.</li>
<li>Got a Ruby environment set &#8211; OK, so it is not the shiny new Mac I wanted, but RubyMine on my Windows laptop has been a very low-friction experience.  The Mac will come.  I have a birthday coming up and maybe I will be good to me.</li>
</ul>
<p><strong>What Can Be Improved On</strong></p>
<ul>
<li>Not writing enough code<strong> - </strong>Although I am <em>learning</em> with the Ruby Koans, I am not <em>writing</em> enough code.</li>
<li>Making really good progress, but need to dedicate more time &#8211; I&#8217;m happy with where I am, but the time goes by quickly.  May need to dedicate just a little more time on a weekly basis.</li>
<li>Haven&#8217;t done anything with github yet &#8211; One of the goals was to set up a github account.  Technically I have satisfied that criteria because I have an account&#8230;an empty account.  That needs to change</li>
</ul>
<div>
<p><strong>What Am I Going To Do To Improve Things</strong></p>
<p>As a rule, I usually only like to pick one thing to improve on, especially in a short iteration, but since these two things go so well together:</p>
</div>
<ul>
<li>Do the <a href="http://osherove.com/tdd-kata-1/">String kata</a> in Ruby &#8211; It&#8217;s a pretty straightforward problem, one that I have done in C# and C++, and this will get me actually writing code</li>
<li>Put the String kata in github, committing as new functionality is added.</li>
</ul>
<div><strong>Iteration 1 Stories</strong></div>
<div>
<ul>
<li>Continue with the Ruby Koans, doing these exercises
<ul>
<li>&#8216;about_methods&#8217;</li>
<li>&#8216;about_constants&#8217;</li>
<li>&#8216;about_control_statements&#8217;</li>
<li>&#8216;about_true_and_false&#8217;</li>
<li>&#8216;about_triangle_project&#8217;</li>
<li>&#8216;about_exceptions&#8217;</li>
</ul>
</li>
<li>Do the String kata in Ruby in a github repo</li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=416&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2012/01/22/season-of-ruby-iteration-zero-retrospective/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>Season of Ruby &#8211; Learning the Syntax</title>
		<link>http://mdenomy.wordpress.com/2012/01/21/season-of-ruby-learning-the-syntax/</link>
		<comments>http://mdenomy.wordpress.com/2012/01/21/season-of-ruby-learning-the-syntax/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 17:36:33 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Season of Ruby]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=392</guid>
		<description><![CDATA[The Season of Ruby continues&#8230; I am staying with the Ruby Koans for now, I really enjoy the layout as I learn the basics of the language and it&#8217;s syntax.  To this point I have covered asserts, the notion of nil (it really is an object), objects, arrays, hashes, strings, symbols, and my favorite&#8230;regular expressions. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=392&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://mdenomy.wordpress.com/category/season-of-ruby/">Season of Ruby</a> continues&#8230;</p>
<p>I am staying with the <a href="http://rubykoans.com/">Ruby Koans</a> for now, I really enjoy the layout as I learn the basics of the language and it&#8217;s syntax.  To this point I have covered asserts, the notion of nil (it really is an object), objects, arrays, hashes, strings, symbols, and my favorite&#8230;regular expressions.</p>
<p>I have a love-hate relationship with regular expressions.  Unlike many programmers who may deal with a lot of text, in my world of medical devices and laboratory automation I don&#8217;t need to rely on regex all that much.  To paraphrase <a href="http://memegenerator.net/The-Most-Interesting-Man-In-The-World">the most interesting man in the world</a>, &#8220;I don&#8217;t always use Regexp, but when I do, it is a powerful, painful, awful, and wonderful experience&#8230;.every time&#8221;.</p>
<p>Things that I have found interesting or noteworthy about the most recent koans:</p>
<ul>
<li>Array slicing and hashes feel a lot like Python.</li>
<li>The PERL-inspired &#8220;flexible quotes&#8221; are interesting and easy to use</li>
<li>I had a WTF moment with the shovel operator &#8220;&lt;&lt;&#8221; versus &#8220;+=&#8221;, but I am not alone <a href="http://myagileeducation.com/2011/ruby-shovel-operator-what-the/">there</a>.  After Googling around it made sense and this <a href="http://library.edgecase.com/Ruby/2010/10/31/a-little-more-about-strings.html">article </a>about the performance differences was a real eye opener.  I imagined &#8220;&lt;&lt;&#8221; would be faster than &#8220;+=&#8221;, but wow!</li>
<li>I want to play around more with heredocs.  Again, nothing Earth-shattering, just not something I have used in my day-to-day programming.  Can see where this would make working with text a lot easier</li>
</ul>
<p>I was a little confused about Ruby symbols at first.  How do they get &#8220;initialized&#8221;, how do you use them, why don&#8217;t they take an &#8220;=&#8221;, what can you do with them once you&#8217;ve got them.  After some Googling, things were starting to take shape, but I was still not perfectly clear on them.  But wait&#8230;.</p>
<div id="attachment_394" class="wp-caption aligncenter" style="width: 460px"><a href="http://mdenomy.files.wordpress.com/2012/01/dangermouseirb.jpg"><img class="size-medium wp-image-394" title="DangermouseIRB" src="http://mdenomy.files.wordpress.com/2012/01/dangermouseirb.jpg?w=450&#038;h=192" alt="" width="450" height="192" /></a><p class="wp-caption-text">Off to the REPL</p></div>
<p><em>NB: I realize if <a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act">SOPA </a>were to pass as is I could go to jail for this <a href="http://en.wikipedia.org/wiki/Danger_Mouse_(TV_series)">Dangermouse </a>cartoon, but it is such a hack job by me, maybe I should&#8230;</em></p>
<p>I really love the ability to play around with ideas in a <a href="http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">REPL</a>.  <a href="http://verdammelt.posterous.com">Verdammelt </a>had an interesting article about using a <a href="http://verdammelt.posterous.com/tdd-and-repl-analogies">REPL and TDD</a> and this seemed like a perfect place for some experimentation.  I was able to pretty quickly satisfy my curiousity and questions about Ruby symbols in the IRB.  I thought it was neat how one answer may lead to another question and so on&#8230;very exploratory.</p>
<p>Which brings us to the aforementioned regular expressions.  Some people love regular expressions.  Some people can whip a regex out of thin air to find the middle names of everyone with a blue house, between the ages of 38-43, with 2 dogs OR 1 ferret and 3 parrots.  I am not one of those people.  I always liked this <a href="http://regex.info/blog/2006-09-15/247">joke</a></p>
<blockquote><p>Some people, when confronted with a problem, think<br />
“I know, I&#8217;ll use regular expressions.”   Now they have two problems.</p></blockquote>
<p>But interestingly I had an &#8220;a ha&#8221; moment while doing the Regexp exercises.  It wasn&#8217;t some &#8220;the skies opened and I know all Regexp syntax by heart now&#8221;.  That unfortunately did not happen.  It was that it reinforced this notion of <a href="http://mdenomy.wordpress.com/2011/01/15/introduction-to-test-driven-development-at-nashua-scrum-club/">TDD</a>:</p>
<blockquote><p>A well-written test suite <em>IS</em> documentation.</p>
<p>A well written test suite <em>IS</em> a specification.</p></blockquote>
<p>I love that about <a href="http://mdenomy.wordpress.com/2011/01/15/introduction-to-test-driven-development-at-nashua-scrum-club/">TDD </a>and it is one of the reasons I am having so much fun with the Ruby Koans.  Every test clearly expresses a single, intended behavior.</p>
<p>Stay tuned for a <a href="http://mdenomy.wordpress.com/category/retrospectives/">retrospective </a>on the first iteration, and if you have tips on good Ruby resources I would love to hear them.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/392/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/392/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/392/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=392&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2012/01/21/season-of-ruby-learning-the-syntax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>

		<media:content url="http://mdenomy.files.wordpress.com/2012/01/dangermouseirb.jpg?w=450" medium="image">
			<media:title type="html">DangermouseIRB</media:title>
		</media:content>
	</item>
		<item>
		<title>So Begins The Season of Ruby</title>
		<link>http://mdenomy.wordpress.com/2012/01/17/so-begins-the-season-of-ruby/</link>
		<comments>http://mdenomy.wordpress.com/2012/01/17/so-begins-the-season-of-ruby/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 00:55:39 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Season of Ruby]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=382</guid>
		<description><![CDATA[I wasn&#8217;t sure if from my last post, this would be a year of Ruby, a lifetime of Ruby, or 20 minutes of Ruby, so let&#8217;s start with the notion of a season of Ruby. Lao Tzu said &#8220;a journey of a thousand miles begins with a single step&#8221;.  So as much as I would [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=382&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I wasn&#8217;t sure if from my <a href="http://mdenomy.wordpress.com/2011/12/23/i-hate-year-end-lists/">last post</a>, this would be a year of Ruby, a lifetime of Ruby, or 20 minutes of Ruby, so let&#8217;s start with the notion of a <em>season</em> of Ruby.</p>
<p><a href="http://www.quotationspage.com/quote/24004.html">Lao Tzu</a> said &#8220;a journey of a thousand miles begins with a single step&#8221;.  So as much as I would like to embark on this voyage on a shiny new Mac, running TextMate as my editor, I will stick a little closer to my comfort zone and start out running <a href="http://www.jetbrains.com/ruby/">RubyMine</a> on my Windows machine.  As a .NET developer, I am pretty entrenched in the IDE experience.  That is not to say I don&#8217;t want a shiny new Mac, but I also don&#8217;t want to get bogged down as I learn a new language.  The RubyMine experience is very familiar to me since I use Visual Studio with <a href="http://www.jetbrains.com/resharper/">Resharper</a> and for a mere $69 for a personal license it seems like a no-brainer.</p>
<p>So where to start&#8230;.</p>
<p>I scoured various blogs and the Ruby docs for good places to learning Ruby.  I settled on starting with the <a href="http://rubykoans.com/">Ruby Koans</a> site.  I really like that this tutorial had a test-centric approach.  One of the draws to exploring the Ruby community is that testing is baked into the culture.  The Ruby Koans allowed for a lot of experimentation and I tried to take the approach of not just blowing through the problems, but really asking what are they trying to teach in this lesson.  I tried to cause tests to fail in different ways and added some scenarios of my own to try and investigate further.</p>
<p>Another resource was to just use <a href="http://en.wikipedia.org/wiki/Interactive_Ruby_Shell">IRB</a>, the interactive Ruby shell.  Nil is an object, huh?  What methods does it have.  I suppose I could pore through documentation or maybe just&#8230;let&#8217;s see if this works</p>
<blockquote><p>irb(main):001:0&gt; nil.methods<br />
=&gt; ["inspect", "&amp;", "clone", "public_methods", "display", "instance_variable_defined?", "equal?", "f<br />
reeze", "to_i", "methods", "respond_to?", "dup", "instance_variables", "__id__", "|", "method", "eql<br />
?", "id", "to_f", "singleton_methods", "send", "taint", "frozen?", "instance_variable_get", "^", "__<br />
send__", "instance_of?", "to_a", "type", "protected_methods", "object_id", "instance_eval", "==", "=<br />
==", "instance_variable_set", "kind_of?", "extend", "to_s", "hash", "class", "tainted?", "=~", "priv<br />
ate_methods", "nil?", "untaint", "is_a?"]<br />
irb(main):002:0&gt;</p></blockquote>
<p>Good gravy, so simple even a .NET developer like me can do it <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   I found myself playing a lot in the IRB when I wanted to just try something out.</p>
<p>I got though the basics of asserts, objects, nil, and arrays with the koans, diving over to various websites, StackOverflow, irb, and the <a href="http://ruby-doc.org/core-1.9.3/">Ruby core docs</a> as I ran into questions.  I am using the <a href="http://www.pomodorotechnique.com/">Pomodoro technique</a> to timebox my activities into manageable chucks and try to stay fresh.</p>
<p>The plan for next time will be to continue with the koans, probably for a while, to build up some core knowledge.  At some point I will dive into the Koans code itself as one of the goals of the last post was to read more code as well as write it.</p>
<p>In my experience, the best way to learn code is to write code, but I also reserved the following books from the library to have around as  references and for tips on style.</p>
<ul>
<li><a href="http://www.amazon.com/Programming-Ruby-1-9-Pragmatic-Programmers/dp/1934356085">Programming Ruby</a> (aka the pick-ax book)</li>
<li><a href="http://www.amazon.com/Ruby-Best-Practices-Gregory-Brown/dp/0596523009">Ruby Best Practices</a></li>
<li><a href="http://www.amazon.com/Ruby-Way-Second-Techniques-Programming/dp/0672328844">The Ruby Way</a></li>
</ul>
<p>I also want to take a peek at <a href="http://mislav.uniqpath.com/poignant-guide/">Why&#8217;s (Poignant) Guide To Ruby</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/382/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=382&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2012/01/17/so-begins-the-season-of-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>I Hate Year End Lists</title>
		<link>http://mdenomy.wordpress.com/2011/12/23/i-hate-year-end-lists/</link>
		<comments>http://mdenomy.wordpress.com/2011/12/23/i-hate-year-end-lists/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 15:39:47 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=372</guid>
		<description><![CDATA[One of the things that drives me crazy about this time of year, is the never-ending set of lists for what happened in the last year, or resolutions for the new year.  Absolutely hate them.  So why am I writing one now, good question, I have no idea.  But if you hate lists and have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=372&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the things that drives me crazy about this time of year, is the never-ending set of lists for what happened in the last year, or resolutions for the new year.  Absolutely hate them.  So why am I writing one now, good question, I have no idea.  But if you hate lists and have stopped reading, oh well.  Anyway, here&#8217;s my lists of things to get done in 2012.</p>
<p><strong>1. Set Up a GitHub Account</strong> &#8211; Really?!?!  It is the tail end of 2011 and I don&#8217;t have a <a href="https://github.com/">GitHub </a>account.  More and more it seems to matter less and less what is on your resume.  Show me what you&#8217;ve done.  Show me you can collaborate and play nice with others.</p>
<p><strong>2.  Learn Ruby</strong> &#8211; I don&#8217;t mean dabble in Ruby.  I don&#8217;t mean write &#8220;Hello World&#8221; in Ruby.  I don&#8217;t mean write C# style code with Ruby syntax.  I&#8217;ve done that and it hasn&#8217;t mattered much.  Learn to write Ruby style code in Ruby.  Why?  Because maybe it will make me a stronger developer across the board by introducing me to different ways to write code and solve problems.  I also think the Ruby community as a whole are strong proponents of <a href="http://softwarecraftsmanship.org/">software craftsmenship</a>.  Or at least the ones I run into are, and that can only be a good thing.</p>
<p><strong>3.  Write More Code</strong> &#8211; The last few years I have spent a lot of energy working with <a href="http://mdenomy.wordpress.com/category/agile/">Agile </a>practices, and especially trying to help the teams I am on be more productive and write better, well-tested code through practices like <a href="http://mdenomy.wordpress.com/category/pair-programming/">pairing </a>and <a href="http://mdenomy.wordpress.com/category/tdd/">TDD</a>.  I am very proud of the end results, but a side effect of that has been that I write less code on a day to day basis.  That may require being creative and looking for new opportunities to write code outside of my day job.  But I really miss the challenges of solving technical problems on a regular basis.</p>
<p><strong>4.  Read More Code</strong> &#8211; Participating in the <a href="http://coderetreat.org/">Global CodeRetreat</a> was a great opportunity to work with a lot of developers, all with different experiences and skill levels.  Being an experienced developer is great, but there is so much to be learned from seeing how other people solve problems.  Instead of just downloading some open source tool that makes my life easier, peek under the covers, run the tests,  I don&#8217;t know&#8230;maybe even contribute to the project.  At the very least get some new ideas.</p>
<p><strong>5. Get Out of My Comfort Zone</strong> &#8211; Over the years I have developed a set of skills and practices that work well for me and that I have been successful with.  I wouldn&#8217;t say it is easy, but it is a little safe.  I have experience with problem domains I work in, I am comfortable with the languages I use, and I have developed a set of practices that are well ingrained in me.  That&#8217;s all well and good, but there is a potential for a lot of growth to be found outside your <a href="http://thisisindexed.com/2010/11/stretching-is-good-stuff/">comfort zone</a>.</p>
<p><a href="http://mdenomy.files.wordpress.com/2011/12/card27451.jpg"><img class="size-medium wp-image-374 aligncenter" title="card27451" src="http://mdenomy.files.wordpress.com/2011/12/card27451.jpg?w=300&#038;h=174" alt="" width="300" height="174" /></a></p>
<p><strong>6. Buy a Mac</strong> - Windows and Microsoft have been good to me, and I have used Windows for work for the past 20 years or so.  I will probably still do my day job work on a Windows machine, but in the spirit of learning new languages and getting out of my comfort zone, maybe it is time to see how life is from the other side.  I could do all these things on a Windows box, but it&#8217;s time for a little change.  Plus I can hang out with the cool kids at developer events.</p>
<p>So I am seeing a theme here for 2012.  Hopefully I can make it all happen.</p>
<p>Have a safe and happy new year!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/372/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/372/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=372&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/12/23/i-hate-year-end-lists/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>

		<media:content url="http://mdenomy.files.wordpress.com/2011/12/card27451.jpg?w=300" medium="image">
			<media:title type="html">card27451</media:title>
		</media:content>
	</item>
		<item>
		<title>My Day at Global CodeRetreat 2011</title>
		<link>http://mdenomy.wordpress.com/2011/12/04/my-day-at-global-code-retreat-2011/</link>
		<comments>http://mdenomy.wordpress.com/2011/12/04/my-day-at-global-code-retreat-2011/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 15:11:13 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=355</guid>
		<description><![CDATA[For those of you not keeping score at home, December 3 was the Global Day of CodeRetreat 2011.  I was attending the session hosted by the Boston Software Craftsmanship group at the Microsoft NERD location in Cambridge MA. For those not familiar with the CodeRetreat concept, the day was broken up into several pair programming [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=355&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For those of you not keeping score at home, December 3 was the <a href="http://blog.coderetreat.com/global-day-of-coderetreat" target="_blank">Global Day of CodeRetreat 2011</a>.  I was attending the session hosted by the <a href="http://groups.google.com/group/boston-software-craftsmanship" target="_blank">Boston Software Craftsmanship</a> group at the Microsoft NERD location in Cambridge MA.</p>
<p>For those not familiar with the <a href="http://coderetreat.org/" target="_blank">CodeRetreat</a> concept, the day was broken up into several <a href="http://mdenomy.wordpress.com/category/pair-programming/" target="_blank">pair programming</a> exercises, with a strong focus on <a href="http://mdenomy.wordpress.com/category/tdd/" target="_blank">Test Driven Development (TDD)</a>.  The exercises were centered around <a href="http://coderetreat.com/gol.html" target="_blank">Conway&#8217;s Game of Life</a>, a simple enough problem to understand quickly, but with a domain that still allowed for a variety of challenges and corresponding implementations.  There were several  languages represented at the Cambridge retreat: Java, Scala, Clojure, Ruby, C#, JavaScript, Python, PHP,  and probably a few others.</p>
<p>The first exercise was a simple pairing exercise with no rules other than to meet your pairing partner and get into te swing of things.  It was a good start up exercise.  I paired with a guy named Mark, and we did the exercise in C#.  We made a few classic mistakes like getting ahead of ourselves with the design, but we did a good job of keeping each other honest and quickly got back on track.  I enjoyed the session a lot, and the 45 minutes went by quickly.</p>
<p>For the next challenge, I wanted to try a different language.  I have been very interested in Ruby and sought out a partner who could give me a good intro to the language.  The exercises were ratcheting up a bit, and the goal of this exercise was to make your code as clear and expressive as possible.  Good naming, clear and concise tests, good design were the goals here, and Ruby did not disappoint in that regard.  You can program cleanly or poorly in any language, I have probably done both in my years of development, but Ruby seemed to allow a clear design in a minimalist style that read very well.  Alex was my paring partner for this exercise and he was very helpful in explaining some of the nuances and conventions in the language.</p>
<p>For the third challenge, we got into an odd constraint.  Your code could not have any exposed <a href="http://en.wikipedia.org/wiki/Primitive_type" target="_blank">primitives</a>.  Excuse me!?!?!  No bools, ints, strings, lists.  Um&#8230;aren&#8217;t these sort of key to programming&#8230;isn&#8217;t that why the are called primitives.  But staying in the spirit of the day, this is a chance to try new things and see where the exercise takes us.  Keeping with my goals for the day to try some different languages, I paired up with someone to do some Scala.  Working without primitives was a challenge, you needed to come up with some potentially contrived abstractions, but it got you thinking.  I had seen some Scala at the <a href="http://mdenomy.wordpress.com/2011/09/14/vermont-code-camp/" target="_blank">VT Code Camp</a>, and was eager to see it in action, but unfortunately, Don and I had some start-up problems getting going with Scala, so  I don&#8217;t think I saw it at its best.  I was glad I tried it though and maybe I&#8217;ll have better luck next time.</p>
<p>During a break for lunch, where we also saw a really wild example of the <a href="http://www.youtube.com/watch?v=a9xAKttWgP4" target="_blank">Game of Life in APL</a>.  I used APL exactly once when I was in studying <a href="http://che.umass.edu/" target="_blank">Chemical Engineering at UMass</a> back in the day.  I had a hairy matrix problem and someone said, you know what&#8217;s really good for matrix calculations&#8230;APL.  He was right, but wow, it is not like anything I had used before or since.  We all got a good laugh out of the exercise, because of the ease at which the author solved the problem and how unfamiliar it was to our normal lives as developers in other languages.</p>
<p>In the afternoon, I paired up with Abby Fichtner, the<a href="http://www.thehackerchickblog.com/"> Hacker Chick</a>, for an even more challenging exercise.  This time, not only no primitives, but no conditionals either.  That means no ifs, no ternary operators, etc.  This required even more creative ways to solve the problem.  Where as before you could make a decision on the live/dead state of a cell by asking &#8220;if the number of neighbors is&#8230;.&#8221;, that was not an option in this exercise.  We decided to make an array of states that we could index into based on the number of live neighbors a cell had.  We banged our heads a lot trying to figure out how to solve a problem without conditionals, but we had a lot of fun and had to think creatively to come up with what might otherwise be a straightforward problem.</p>
<p>Next up was a silent pairing exercise.  In other exercises, the pairs switched often between who wrote the tests and who wrote the code, but in this exercise, one person was the designated test writer and another was the designated implementer.  The exercise was intentionally adversarial, as the test writer was instructed to write tests that poked holes in the design.  It was a lot of fun to see the interaction between pairs, especially the two guys who were sitting across from me.  You could see that it was a real tennis match, with each person returning the volley of the other.  Someone jokingly (I hope) commented that he learned that talking was overrated and he hoped to do it much less in the future.</p>
<p>The last exercise was to do the best design you could, with no other constraints.  I wanted to try Java, so I paired up with Tarish, who kindly helped me re-remember Java.  I learned Java about 10 years ago, but haven&#8217;t done much since then.  It&#8217;s a short walk from C#, but my brain was beginning to fuse and I don&#8217;t think I put my best foot forward with Java.  Tarish was really helpful, and I enjoyed the conversations we had about Agile and TDD as we went along.</p>
<p>We wrapped up going around in a circle, answering 3 questions: what did we learn, what were we surprised about, and what would we do differently.  For me I learned that<a href="http://groups.google.com/group/boston-software-craftsmanship" target="_blank"> Boston Software Craftsmanship</a> is a really good group.  If you are in the Boston area and you want to improve your software engineering skills you should check them out.  I was surprised at how much fun I had working with the constraints like no conditionals and how it made me have to think more creatively.  And for what I would do differently, as much as I wanted to try new languages, in some cases that got in the way of fully experiencing the challenges and constraints, so next time I will brush up on languages I am interested beforehand and try to stay in some amount of familiarity/comfort zone.</p>
<p>To sum up, met some great people, programmed in 4 languages (C#, Ruby, Scala, and Java), and thought hard about different ways to solve problems.  Looking forward to doing it again.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/355/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=355&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/12/04/my-day-at-global-code-retreat-2011/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>I Have a Secret</title>
		<link>http://mdenomy.wordpress.com/2011/10/04/i-have-a-secret/</link>
		<comments>http://mdenomy.wordpress.com/2011/10/04/i-have-a-secret/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 01:39:20 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=345</guid>
		<description><![CDATA[I have a secret.  A horrible, terrible secret. I can&#8217;t type to save my life.  I&#8217;ve been writing software for over 20 years and have managed to get by with hunting and pecking with 3-4 fingers.  And that worked fine, working alone in my little cubicle&#8230;until pair programming came into my existence. I love pairing.  The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=345&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have a secret.  A horrible, terrible secret.</p>
<p>I can&#8217;t type to save my life.  I&#8217;ve been writing software for over 20 years and have managed to get by with hunting and pecking with 3-4 fingers.  And that worked fine, working alone in my little cubicle&#8230;until pair programming came into my existence.</p>
<p>I love <a href="http://mdenomy.wordpress.com/category/pair-programming/" target="_blank">pairing</a>.  The back-and-forth flow of ideas, the continuous discovery and refactoring, the changing roles between driver and navigator. I think it is one of the greatest improvements in how software engineers work that I&#8217;ve seen over my career.  But it sure helps to be able to type.</p>
<p>So I am going to do something about it.  Inspired by an old Corey Haines <a href="http://programmingtour.blogspot.com/2010/07/learn-to-type-week.html">post </a>I am declaring my own personal Learn to Type week.  Corey&#8217;s post has some good links to help you improve your typing skills.  This <a href="http://janeknight.typepad.com/pick/2009/08/5-places-to-learn-how-to-touch-type-for-free.html">post </a>had a few more.</p>
<p>So for 30 minutes a day for the next week I am going to try and bring my typing skills up to a respectable, pairing-worthy level.  I&#8217;ll keep you posted.</p>
<p>&nbsp;</p>
<p><em><strong>Update: </strong></em>After a week, I have to say it is slow going.  I have been doing exercises from this <a href="http://www.typing-lessons.org/" target="_blank">post</a>, and although I like the lessons a lot I am struggling to complete the lessons in 60 seconds.  At times I fly, error-free, then I think about how well I am doing, then I start to think about what keys are where, and then everything goes hay-wire.</p>
<p>This will take more than a week to learn, but I am committed to seeing it through.  Right now I am still much faster with my 3-fingered typing, but if I stick with it I think it will pay off in the end.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/345/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/345/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=345&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/10/04/i-have-a-secret/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>Vermont Code Camp</title>
		<link>http://mdenomy.wordpress.com/2011/09/14/vermont-code-camp/</link>
		<comments>http://mdenomy.wordpress.com/2011/09/14/vermont-code-camp/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 12:38:18 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=337</guid>
		<description><![CDATA[Just got back from a road trip to Burlington VT for Vermont Code Camp 3. It was a great code camp, lots of good sessions and speakers, well-organized, and generally a lot of fun. The first session I attended was Dane Morgridge&#8217;s talk on ASP.NET MVC3: A Gateway to Rails. I was really interested in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=337&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just got back from a road trip to Burlington VT for <a href="http://vtcodecamp.org/">Vermont Code Camp</a> 3. It was a great code camp, lots of good sessions and speakers, well-organized, and generally a lot of fun.</p>
<p>The first session I attended was <a href="http://danemorgridge.com/">Dane Morgridge&#8217;s</a> talk on ASP.NET MVC3: A Gateway to Rails. I was really interested in this talk, because as a TDD junkie, I was curious if part of the &#8220;gateway to Rails&#8221; involved embracing testing. I still feel like the .NET community is behind the curve on TDD and BDD, and I wanted to hear Dane&#8217;s perspective on making the switch from .NET to Rails. His presentation was very much an overview of the goodness in Rails and ASP.NET MVC3, like <a href="http://en.wikipedia.org/wiki/Convention_over_configuration">convention over configuration</a> and how having a <a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx">separation of concerns</a> with MVC allows for a more testable system. Afterwards I was able to catch up with Dane between sessions and he showed me a few things he is doing with <a href="http://cukes.info/">Cucumber </a>and <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">BDD</a>. I have to say the readability of Cucumber makes it look very appealing and we talked about how BDD tests can be more maintainable than TDD/unit level tests. There is a right time to use one and the right time to use another.</p>
<p>Next up was David Howell&#8217;s <a href="http://www.slideshare.net/poorlytrainedape/tackling-big-data-with-hadoop-9212076">Tackling Big Data with Hadoop</a>. I knew very little about <a href="http://hadoop.apache.org/">Hadoop</a>, but had heard a few good things about it and was looking to learn a bit more. David&#8217;s talk focused on using Hadoop&#8217;s Map-Reduce capabilities to handle large data sets. We also talked a bit about what constitutes &#8220;big data&#8221;. If you are not familiar with Map-Reduce, check out <a href="http://labs.google.com/papers/mapreduce.html">Google&#8217;s 2004 paper</a> on it. David went over the basics of a hadoop cluster and showed how it could be used in a distributed architecture to tackle a big data set. He also touched on how some of the fault tolerance could be implemented using the cluster and distributing the same job to multiple nodes. To wrap up he ran a simplified Map-Reduce demos on a small data sets that was appropriate scaled for the time that we had available.</p>
<p>I would have to say the third session was one of my favorites, Functional Programming on the JVM. This talk was given by Jonathan Phillips and another developer named Jack (sorry Jack, missed your last name), both from <a href="http://www.dealer.com/index.htm">Dealer.com</a>. As someone who has spent the last&#8230;.well lets just say a lot of years doing OO programming, I struggle with the shift to functional programming, especially when state and immutablility come into play. I have been to several functional programming and F# presentations that have left me confused, but 5 minutes into their talk Jonathan and Jack went over closures and recursion as they apply to functional programming and it was like a light going off. Suddenly immutability made more sense. After the overview of functional programming they went into 3 different languages that can be used to do functional programming on the JVM: <a href="http://groovy.codehaus.org/">Groovy</a>, <a href="http://www.scala-lang.org/">Scala</a>, and <a href="http://clojure.org/" target="_blank">Clojure</a>. The used a simple example, comparing the amount and clarity of code that you would write using pure Java versus each of the 3 other languages. They also went over some of the pro&#8217;s and cons about Groovy, Scala, and Clojure. It left me with a lot to think about, and I am eager to experiment with all 3 languages.</p>
<p>Another great talk was Free and Open Source Software (FOSS) in the Enterprise by Kevin Thorley, also from <a href="http://www.dealer.com/" target="_blank">Dealer.com</a>. Kevin laid out what you need to consider using FOSS software. What is the community support, how many contributors are there, how robust is it, how easy is it to use and what documentation exists, do you really need it or do you want to use it because you just read some great blog post about NoSQL. One thing that Kevin said really rang true when he said that open source is not free and that we need to understand and accurately assess what the cost is to use and maintain it. Kevin went over how they use <a href="http://www.mongodb.org/" target="_blank">MongoDB</a>, <a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a>, <a href="http://www.springsource.org/" target="_blank">Spring</a>, and <a href="http://lucene.apache.org/solr/" target="_blank">Solr</a> at Dealer.com. Don&#8217;t misinterpret Kevin&#8217;s statement about it not being free. Obviously they rely heavily on FOSS at Dealer.com, but you have to be honest about why you are using it and what is the cost going to be to your organization to use &#8220;free software&#8221;.</p>
<p>I give a lot of credit to the guys from<a href="http://www.dealer.com/" target="_blank"> Dealer.com</a> for their participation at the code camp. They are a Burlington based company and they had a significant presence at the code camp. It is one thing to say that you are passionate about software, it is another to do something about it. Developers from Dealer.com did 4 of the 26 total sessions. I followed up with a few of them after the sessions and you can tell they are really into the technologies that they were presenting.</p>
<p>The last 2 presentations were familiar ground for me, but I still learned a few things. Vincent Grondin&#8217;s talk on mocking and mocking frameworks. Vincent gave a very good discussion of mocking and the two type of mocking frameworks available: those based on dynamic proxies, and those based on the<a href="http://msdn.microsoft.com/en-us/magazine/cc300553.aspx" target="_blank"> .NET Profiler API</a>&#8216;s. Examples of frameworks based on dynamic proxies are <a href="http://code.google.com/p/moq/" target="_blank">Moq </a>and <a href="http://nmock3.codeplex.com/" target="_blank">NMock3</a>. Examples of .NET profiler based frameworks include Telerik&#8217;s <a href="http://www.telerik.com/products/mocking.aspx" target="_blank">JustMock </a>and Typemock <a href="http://www.typemock.com/" target="_blank">Isolator</a>. The .NET profile based mocking frameworks have some significant advantages in being able to mock out static methods and even system calls. I have been using Moq (and previously NMock2) and I have had to write custom wrapper classes to work around problems mocking static methods and system calls.</p>
<p>The day wrapped up for me with Josh Sled&#8217;s talk on dependency injection. Josh gave a good overview of why you would want to use DI, but also gave an honest assessment of pros and cons of using them. I think any time we decide to take on a new framework we need to understand what the cost is (similar to what Kevin Thorley said). I am a big fan of DI and IOC frameworks, but you need to be aware of what the cost is to using that framework. We touched on a few IOC frameworks that you can use like <a href="http://www.springsource.org/" target="_blank">Spring</a> (Java), <a href="http://docs.castleproject.org/Windsor.MainPage.ashx" target="_blank">Castle Windsor</a> (.NET), and <a href="http://structuremap.net/structuremap/" target="_blank">StructureMap</a> (.NET).</p>
<p>All in all it was a great code camp. It is usually hard to justify spending a beautiful late summer day in the basement of UVM, but it worked in this case. I am really looking forward to all the slides being available to I can check out some of the sessions I couldn&#8217;t make.</p>
<p>Thanks to Julie Lerman, Rob Hale, and all the other organizers, volunteers, and sponsors for putting together a great event.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=337&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/09/14/vermont-code-camp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
		<item>
		<title>It&#8217;s Only&#8230;.&#8221;Mostly Done&#8221;</title>
		<link>http://mdenomy.wordpress.com/2011/08/23/its-only-mostly-done/</link>
		<comments>http://mdenomy.wordpress.com/2011/08/23/its-only-mostly-done/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 16:38:13 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=317</guid>
		<description><![CDATA[A good measure of how mature your Agile process is to ask &#8220;what is your team’s understanding of done&#8221;.  Does being done mean all the tasks are complete, does it mean that the developers have implemented the feature to their satisfaction, has it been tested by QA, does it mean that it has been demoed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=317&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A good measure of how mature your Agile process is to ask &#8220;what is your team’s understanding of done&#8221;.  Does being done mean all the tasks are complete, does it mean that the developers have implemented the feature to their satisfaction, has it been tested by QA, does it mean that it has been demoed for the product owner and she has accepted it.</p>
<p>Recently our team had a story that was “done” and we took credit for the points in our iteration.  But a few days after the iteration ended there were a few more check-ins against the story.  Nobody was trying to hide anything, it was brought up at the daily stand-up, but were we really done at the end of the iteration?  No.  It reminded me of a great line from the movie <em>The Princess Bride</em> where Miracle Max says</p>
<blockquote><p>He&#8217;s only <em>mostly</em> dead.  There&#8217;s a big difference between mostly dead and all dead. Mostly dead is slightly alive. With all dead, well, with all dead there&#8217;s usually only one thing you can do…Go through his clothes and look for loose change.</p></blockquote>
<div id="attachment_320" class="wp-caption aligncenter" style="width: 226px"><a href="http://mdenomy.files.wordpress.com/2011/08/miraclemax.jpg"><img class="size-full wp-image-320" title="MiracleMax" src="http://mdenomy.files.wordpress.com/2011/08/miraclemax.jpg?w=500" alt=""   /></a><p class="wp-caption-text">Miracle Max - Early Agile Evangelist?</p></div>
<p>The Agile corollary to that is</p>
<blockquote><p>There&#8217;s a big difference between mostly done and done-done, with done-done there’s only one thing you can do…Go through the backlog and look for new stories.</p></blockquote>
<p>Being <a href="http://jamesshore.com/Agile-Book/done_done.html">done-done</a> requires that the team understands the story, that there is agreement to how it will be tested and verified.  The story should be demo-able and the product owner needs to be available to clarify questions that inevitable come up during implementation.  It also means that other parts of your software process are followed, e.g. code reviews, documentation, etc.</p>
<p>If your team doesn&#8217;t have a common understanding of what done means, you are in for some trouble.  There is a lot of pressure to be done, and nobody wants to take zero points for a story that had a lot of work put into it.  But a false sense of being done is worse.  You may end up building up a lot of <a href="http://martinfowler.com/bliki/TechnicalDebt.html">technical debt</a> and won&#8217;t have a sense of what your true velocity is.</p>
<p>Be honest and open about what your understanding of done is.  Talk about it with others on the team, address it at your retrospectives.  Everyone on the team needs to be in agreement, both in general terms and for individual stories.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/317/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=317&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/08/23/its-only-mostly-done/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>

		<media:content url="http://mdenomy.files.wordpress.com/2011/08/miraclemax.jpg" medium="image">
			<media:title type="html">MiracleMax</media:title>
		</media:content>
	</item>
		<item>
		<title>Introduction to Test Driven Development at Nashua Scrum Club</title>
		<link>http://mdenomy.wordpress.com/2011/01/15/introduction-to-test-driven-development-at-nashua-scrum-club/</link>
		<comments>http://mdenomy.wordpress.com/2011/01/15/introduction-to-test-driven-development-at-nashua-scrum-club/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 16:17:25 +0000</pubDate>
		<dc:creator>mdenomy</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Extreme Programming (XP)]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://mdenomy.wordpress.com/?p=303</guid>
		<description><![CDATA[I had the opportunity to give a talk &#8220;Introduction to Test-Driven Development&#8221; at the Nashua Scrum Club this week.  It is a great group of folks, and if you are interested in learning more about Scrum and Agile practices you should check them out.  They are a diverse, engaging group of folks covering the full [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=303&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had the opportunity to give a talk <a href="http://www.meetup.com/nhscrumclub/calendar/15798972/">&#8220;Introduction to Test-Driven Development&#8221;</a> at the <a href="http://www.meetup.com/nhscrumclub/" target="_blank">Nashua Scrum Club</a> this week.  It is a great group of folks, and if you are interested in learning more about Scrum and Agile practices you should check them out.  They are a diverse, engaging group of folks covering the full spectrum of roles in a Scrum organization.</p>
<p>The talk was targeted for all the roles on a Scrum team, and my goal was to give a small taste of what TDD can bring to a software project.  I have been using TDD for about 5-6 years, and I have definitely become <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm" target="_blank">&#8220;test infected&#8221;</a>.  I can&#8217;t imagine developing production code any other way.</p>
<p>I wanted to stress the importance of working iteratively, and getting through the <a href="http://jamesshore.com/Blog/Red-Green-Refactor.html" target="_blank">Red-Green-Refactor</a> loop quickly, adding more and more functionality with each new test.  One of the areas new teams may struggle with TDD is to try and do too much in a single pass through the loop.  If you get bogged down and are in the loop for more than 15-30 minutes you may be biting off too much in this test and should look to a smaller incremental step.</p>
<p>Given the broad spectrum of roles that were at the meeting (Scrum Masters, coaches, QA/test, developers, managers, product owners) I also wanted to show how tests can be used to get the team to collaborate more.  I think tests can be a great mechanism for developers to collaborate with product owners to make sure the behavior is as intended.  There are also opportunities for QA/test to work with developers to understand what is tested at the unit and integration level.  Finally tests are a great mechanism for developers to share knowledge.  When I am looking at a code that I may not be as familiar with, I find the tests to be a great place to start to understand what functionality is provided.  In essence, the tests become an <a href="http://www.agilemodeling.com/essays/executableSpecifications.htm" target="_blank">executable specification</a> of the system.</p>
<p>We also spent some time talking about TDD and design, which I know has been something of a hot-button topic <a href="http://blog.ploeh.dk/2010/12/22/TheTDDApostate.aspx" target="_blank">lately</a>.  Does TDD guarantee a good design?  Is it a good design methodology?  In and of itself, I would say no.  But what I would say is that TDD encourages good design practices and to do it well, i.e. not have brittle tests, you need good design practices.  I had almost 20 years experience before starting TDD and felt I was a good object-oriented designer.  TDD helped me step up my game in terms of design and developing more modular, loosely-coupled code.  We touched on design practices like <a href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29" target="_blank">SOLID</a>, <a href="http://c2.com/xp/YouArentGonnaNeedIt.html" target="_blank">YAGNI</a>, <a href="http://c2.com/cgi/wiki?DontRepeatYourself" target="_blank">DRY</a>, <a href="http://c2.com/cgi/wiki?SeparationOfConcerns" target="_blank">separation of concerns</a>, how design patterns like <a href="http://msdn.microsoft.com/en-us/library/ff649643.aspx" target="_blank">MVC </a>allow better, more thorough testing.</p>
<p>Finally we talked about the challenges of adopting TDD.  Change is hard, and a switch to TDD can be a difficult and frustrating experience.  TDD requires strong design practices.  There is also the battle to fight about writing &#8220;all that test code&#8221;, to which I always like to ask &#8220;How much were you writing before&#8221;.  Jim Shore summed it up well when he said that you should expect <a href="http://jamesshore.com/Agile-Book/test_driven_development.html" target="_blank">2-3 months</a> to make the adjustment.</p>
<p>I had a great time at the Nashua Scrum Club, and want to thank everyone there for making it a fun (and hopefully informative) evening.  I look forward to a return visit soon.</p>
<iframe src='http://www.slideshare.net/slideshow/embed_code/6577134' width='500' height='410'></iframe>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdenomy.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdenomy.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdenomy.wordpress.com/303/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdenomy.wordpress.com&amp;blog=1422655&amp;post=303&amp;subd=mdenomy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mdenomy.wordpress.com/2011/01/15/introduction-to-test-driven-development-at-nashua-scrum-club/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce3ab3b40fd18000b68f4126cda2006a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mdenomy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
