<?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>Free Association</title>
	<atom:link href="http://daviddoolin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://daviddoolin.com</link>
	<description>Polymath</description>
	<lastBuildDate>Sat, 19 May 2012 23:00:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Naming functions and methods</title>
		<link>http://daviddoolin.com/coding/naming-functions-and-methods/</link>
		<comments>http://daviddoolin.com/coding/naming-functions-and-methods/#comments</comments>
		<pubDate>Mon, 14 May 2012 18:13:52 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Best practice]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=405</guid>
		<description><![CDATA[Function and method naming is not terribly difficult if the following two guidelines are observed: Query functions return stuff. For example, new, create, get are all functions which ask for something in return. Command functions change state. For example, set, adjust, compute. Try very, very hard not to &#8220;mix and match&#8221;. Functions which both query [...]]]></description>
			<content:encoded><![CDATA[<p>Function and method naming is not terribly difficult if the following two guidelines are observed:</p>
<p>Query functions return stuff. For example, <code>new</code>, <code>create</code>, <code>get</code> are all functions which ask for something in return.</p>
<p>Command functions change state. For example, <code>set</code>, <code>adjust</code>, <code>compute</code>.</p>
<p>Try very, very hard not to &#8220;mix and match&#8221;. Functions which both query and command are really hard to test, and worse, they are much harder to understand.</p>
<p>Think of it this way: testing a query function means testing only that the returned result is correct. Testing a command function means testing only the state of the object as a result of the command. If you have a function which commands and queries, you may find your function has weird interactions. Basically, your test code has to test the return, the state, and every possible interaction.</p>
<p>Plus, it&#8217;s just semantically confusing otherwise.</p>
<p>Update 2012/05/19: Command and query are analogous to &#8220;inspect&#8221; and &#8220;mutate&#8221; in the c++ world. </p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/naming-functions-and-methods/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good reason to learn Java, C/C++</title>
		<link>http://daviddoolin.com/coding/good-reason-to-learn-java-cc/</link>
		<comments>http://daviddoolin.com/coding/good-reason-to-learn-java-cc/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 19:07:51 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Feathers]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=375</guid>
		<description><![CDATA[C, C++ and Java may seem simply annoyances to programmers weened on scripting languages. But learning one or more of these languages is worthwhile, for many reasons. One reason is this: Vast amounts of software engineering literature provide examples using these languages. Currently, I&#8217;m reading &#8220;Working Effectively with Legacy Code&#8221; by Michael C. Feathers. All [...]]]></description>
			<content:encoded><![CDATA[<p>C, C++ and Java may seem simply annoyances to programmers weened on scripting languages. But learning one or more of these languages is worthwhile, for many reasons.</p>
<p>One reason is this: <em>Vast amounts of software engineering literature provide examples using these languages.</em></p>
<p>Currently, I&#8217;m reading &#8220;Working Effectively with Legacy Code&#8221; by Michael C. Feathers. </p>
<p>All the code in the book is (of course) C, C++ or Java. But the principles documented in the book are language independent.</p>
<p>The last example in the book, on extraction refactoring, is something I&#8217;ve been doing for years, and didn&#8217;t know there was a name for it. That&#8217;s pretty cool.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/good-reason-to-learn-java-cc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning to test-first</title>
		<link>http://daviddoolin.com/coding/learning-to-test-first/</link>
		<comments>http://daviddoolin.com/coding/learning-to-test-first/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 01:13:12 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=379</guid>
		<description><![CDATA[If you didn&#8217;t learn it that way, test-first isn&#8217;t the easiest way to program. But it can be learned. Write the code you&#8217;re going to write anyway. Test your just-written code thoroughly. Keep your tests and throw away all your code. Now rewrite your code. It takes extra time, but only the first time. Given [...]]]></description>
			<content:encoded><![CDATA[<p>If you didn&#8217;t learn it that way, test-first isn&#8217;t the easiest way to program.</p>
<p>But it can be learned.</p>
<ol>
<li>Write the code you&#8217;re going to write anyway.</li>
<li>Test your just-written code thoroughly.</li>
<li>Keep your tests and throw away all your code.</li>
<li>Now rewrite your code.</li>
</ol>
<p>It takes extra time, but only the first time.</p>
<p>Given you&#8217;re writing test code anyway, test-first will pay you back the second or third time you write the code.</p>
<p>If you&#8217;re not writing test code, move along, nothing to see here.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/learning-to-test-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing: clients will pay now or pay later</title>
		<link>http://daviddoolin.com/coding/testing-clients-will-pay-now-or-pay-later/</link>
		<comments>http://daviddoolin.com/coding/testing-clients-will-pay-now-or-pay-later/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 15:46:13 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=336</guid>
		<description><![CDATA[A former freelancer sends a message to a programming email list, explaining his full time job doesn&#8217;t give him enough time to update his former client&#8217;s website. And it&#8217;s on an obsolete and soon-to-be-unsupported version of the web application framework (which framework is irrelevant). The main gotcha: he didn&#8217;t write any test code. Most likely, [...]]]></description>
			<content:encoded><![CDATA[<p>A former freelancer sends a message to a programming email list, explaining his full time job doesn&#8217;t give him enough time to update his former client&#8217;s website. And it&#8217;s on an obsolete and soon-to-be-unsupported version of the web application framework (which framework is irrelevant).</p>
<p>The main gotcha: he didn&#8217;t write any test code.</p>
<p>Most likely, the client was unable or unwilling to pay for the test code when the site was first created.</p>
<p>Most likely, the client will not be interested in paying for test code now.</p>
<p>The irony here is that had the developer originally written test code, he would have much more confidence updating the site.</p>
<p>The client pays regardless: either someone comes and cleans it up, or the client pays for a new web site. At this point, <em>not</em> writing test code increases developer time as the new developer reverse engineers the existing code. Might as well test.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/testing-clients-will-pay-now-or-pay-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to finish a project</title>
		<link>http://daviddoolin.com/productivity/how-to-finish-a-project/</link>
		<comments>http://daviddoolin.com/productivity/how-to-finish-a-project/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 23:45:58 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=369</guid>
		<description><![CDATA[Finishing a project is not hard. Finishing might be really boring, but it&#8217;s in no way difficult. Here&#8217;s how to finish those projects: Do all the work. Publish what you did, like write a blog post or something. Promote it everywhere sensible. I bet you have a project which wants only three or four hours [...]]]></description>
			<content:encoded><![CDATA[<p>Finishing a project is not hard.</p>
<p>Finishing might be really boring, but it&#8217;s in no way difficult.</p>
<p>Here&#8217;s how to finish those projects:</p>
<ol>
<li>Do all the work.</li>
<li>Publish what you did, like write a blog post or something.</li>
<li>Promote it everywhere sensible.</li>
</ol>
<p>I bet you have a project which wants only three or four hours to call done. Why not just do it?</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/productivity/how-to-finish-a-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>College is what you make of it</title>
		<link>http://daviddoolin.com/social/college-is-what-you-make-of-it/</link>
		<comments>http://daviddoolin.com/social/college-is-what-you-make-of-it/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 16:09:15 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Social]]></category>
		<category><![CDATA[College]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=366</guid>
		<description><![CDATA[Having read yet another diatribe against college, whereby author of said diatribe attends some classes, finds his or herself &#8220;bored&#8221; and quits college in disgust. Personally, I had a pretty good time in college. I didn&#8217;t go into a lot of debt, I met a lot of really cool people, and took some really interesting [...]]]></description>
			<content:encoded><![CDATA[<p>Having read yet another diatribe against college, whereby author of said diatribe attends some classes, finds his or herself &#8220;bored&#8221; and quits college in disgust.</p>
<p>Personally, I had a pretty good time in college.</p>
<p>I didn&#8217;t go into a lot of debt, I met a lot of really cool people, and took some really interesting classes.</p>
<p>Perhaps if these unhappy people approached education with an open mind and asked what they could contribute, they might have &#8220;got a lot more out of college.&#8221;</p>
<p>In short, college is like anything else: if you don&#8217;t put anything in, you&#8217;re not getting anything out.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/social/college-is-what-you-make-of-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby vs. Python</title>
		<link>http://daviddoolin.com/coding/ruby-vs-python/</link>
		<comments>http://daviddoolin.com/coding/ruby-vs-python/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 16:04:44 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=363</guid>
		<description><![CDATA[After a couple of weeks of working with Python, some initial impressions. 1. The language is fine. Different than Ruby, no better, no worse. 2. The working environment needs a lot of work to match the ease of use provided by `rvm` and the `rubygems` system. The current task is setting up the numerical toolchain, [...]]]></description>
			<content:encoded><![CDATA[<p>After a couple of weeks of working with Python, some initial impressions.</p>
<p>1. The language is fine. Different than Ruby, no better, no worse.<br />
2. The working environment needs a lot of work to match the ease of use provided by `rvm` and the `rubygems` system.</p>
<p>The current task is setting up the numerical toolchain, for which Python is celebrated.</p>
<p>The setup instructions for the numerical toolchain ask the user to set global variables for important tools such as gcc, fortran and the like, which is <em>spectacularly</em> inconvenient for people doing more than scientific python programming.</p>
<p>More later after I figure out how to firewall the python tools.</p>
<p>Update 2012/04/03: From StackOverflow, the Python community appears to be <em>heavily</em> RTFM. One of the questions I was looking up was how to find the number of items in a list. The obvious <code>list.[size,length,count]</code> didn&#8217;t work, nor did <code>[length,size,count](list)</code>. Turns out it&#8217;s <code>len(list)</code>. No comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/ruby-vs-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The difference between test-driven and test-first coding</title>
		<link>http://daviddoolin.com/coding/the-difference-between-test-driven-and-test-first-coding/</link>
		<comments>http://daviddoolin.com/coding/the-difference-between-test-driven-and-test-first-coding/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 02:51:17 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Spike]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=318</guid>
		<description><![CDATA[Test-driven development is often synonymous with test-first development, but perhaps that&#8217;s a little too restrictive. Everybody knows it&#8217;s not always possible to write test code first, thus the notion of a &#8220;spike.&#8221; Here&#8217;s one way to do it: (Best) Test first when you can. (Almost as good) Test immediately after writing the code. (Still pretty [...]]]></description>
			<content:encoded><![CDATA[<p>Test-driven development is often synonymous with test-first development, but perhaps that&#8217;s a little too restrictive. Everybody knows it&#8217;s not always possible to write test code first, thus the notion of a &#8220;spike.&#8221; </p>
<p>Here&#8217;s one way to do it:</p>
<ol>
<li>(Best) Test first when you can.</li>
<li>(Almost as good) Test immediately after writing the code.</li>
<li>(Still pretty good) Fix anything broken before pushing to remote.</li>
<li>(Better than most) Push no uncovered code.</li>
</ol>
<p>It&#8217;s worth noting that iterating into a spike by writing and continually rewriting tests results in a &#8220;covered spike.&#8221; It&#8217;s not test-first, but it&#8217;s hard to argue it&#8217;s not test-driven.</p>
<p>Taking test-first as an optimal strategy for development, we can redefine test-driven development as &#8220;push no uncovered code.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/the-difference-between-test-driven-and-test-first-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is a Code Kata, anyway?</title>
		<link>http://daviddoolin.com/coding/what-is-a-code-kata-anyway/</link>
		<comments>http://daviddoolin.com/coding/what-is-a-code-kata-anyway/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 15:11:14 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Code kata]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=325</guid>
		<description><![CDATA[A &#8220;code kata&#8221; is a sequence of steps covering every activity necessary to hardwire a path from one state to another. In martial arts, a kata has a starting point and a stopping point, so too does a code kata. A code kata starts from a position where everything is known, and proceeds along specific [...]]]></description>
			<content:encoded><![CDATA[<p>A &#8220;code kata&#8221; is a sequence of steps covering every activity necessary to <em>hardwire</em> a path from one state to another.</p>
<p>In martial arts, a kata has a starting point and a stopping point, so too does a code kata.</p>
<p>A code kata starts from a position where everything is known, and proceeds along specific steps to a desired result.</p>
<p>Typically, a code kata is less about programming and more about framework and configuration.</p>
<p>The end result of an effective code kata reduces implementation time by 90%.</p>
<p>Here are a few code katas I&#8217;ve developed for building Ruby on Rails applications.</p>
<p>* Devise<br />
* Email<br />
* Cucumber BDD</p>
<p>Developing a kata is very time consuming. The payoff is that 90% reduction in effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/coding/what-is-a-code-kata-anyway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An epiphany on frame control</title>
		<link>http://daviddoolin.com/social/an-epiphany-on-frame-control/</link>
		<comments>http://daviddoolin.com/social/an-epiphany-on-frame-control/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 14:47:13 +0000</pubDate>
		<dc:creator>Dave Doolin</dc:creator>
				<category><![CDATA[Social]]></category>
		<category><![CDATA[Frame control]]></category>

		<guid isPermaLink="false">http://daviddoolin.com/?p=349</guid>
		<description><![CDATA[There is a conversational technique called &#8220;frame control&#8221; where one person can arrange to control the interaction in any way he or she so chooses. The term frame control implies a subtext of psychological manipulation on the part of the speaker. (This carries over into writing.) The epiphany: when someone is writing or speaking as [...]]]></description>
			<content:encoded><![CDATA[<p>There is a conversational technique called &#8220;frame control&#8221; where one person can arrange to control the interaction in any way he or she so chooses.</p>
<p>The term frame control implies a subtext of psychological manipulation on the part of the speaker.</p>
<p>(This carries over into writing.)</p>
<p>The epiphany: when someone is writing or speaking as to invite controversy, if they establish frame control, you have two choices:</p>
<ol>
<li>Agree with the speaker.</li>
<li>Leave the conversation.</li>
</ol>
<p>Discussion under these conditions serves only one purpose: maintaining the speaker&#8217;s frame.</p>
]]></content:encoded>
			<wfw:commentRss>http://daviddoolin.com/social/an-epiphany-on-frame-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

