<?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>Third Shelf &#187; dont-program-if</title>
	<atom:link href="http://thirdshelf.com/category/dont-program-if/feed/" rel="self" type="application/rss+xml" />
	<link>http://thirdshelf.com</link>
	<description></description>
	<lastBuildDate>Sun, 13 May 2012 17:08:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thirdshelf.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Third Shelf &#187; dont-program-if</title>
		<link>http://thirdshelf.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thirdshelf.com/osd.xml" title="Third Shelf" />
	<atom:link rel='hub' href='http://thirdshelf.com/?pushpress=hub'/>
		<item>
		<title>Programming pragmatically</title>
		<link>http://thirdshelf.com/2010/06/13/programming-pragmatically/</link>
		<comments>http://thirdshelf.com/2010/06/13/programming-pragmatically/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 16:29:48 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[dont-program-if]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=382</guid>
		<description><![CDATA[Don&#8217;t program if&#8230; you have not yet read The Pragmatic Programmer: From Journeyman to Master by Andy Hunt and David Thomas. I never understood what all the fuss was about and here I am making a fuss about it. pragmatic 1540s, from M.Fr. pragmatique , from L. pragmaticus  &#8221;skilled in business or law,&#8221; from Gk. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=382&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t program if&#8230; you have not yet read <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a> by <a href="http://blog.toolshed.com">Andy Hunt</a> and <a href="http://pragdave.pragprog.com/">David Thomas</a>. I never understood what all the fuss was about and here I am making a fuss about it.</p>
<blockquote><p><strong>pragmatic</strong> 1540s,  from  M.Fr.  pragmatique  , from  L.  pragmaticus   &#8221;skilled  in  business  or  law,&#8221;  from  Gk.  pragmatikos   &#8221;versed  in  business,&#8221;  from  pragma   (gen.  pragmatos  ) &#8220;civil  business,  deed,  act,&#8221;  from  prassein   &#8221;to  do,  act,  perform.&#8221; (1)</p></blockquote>
<p><strong>Pragmatic programmer</strong></p>
<p>So, what makes a pragmatic programmer? A pragmatic programmer is someone who exhibits certain attitudes and practices when thinking, writing, testing and deploying software. This includes being an early adopter or fast adapter, being inquisitive and thinking critically. It also means being realistic and being <a href="http://thelimberlambda.com/2010/05/25/the-skill-to-learn/">anything-ready</a>. And to be anything -ready one must learn continuously.</p>
<p>One of the major philosophies is to always place the problem and the solution in a larger context. This means to always think beyond the immediate problem and see the bigger picture. Why? Simply, so that you can make <em>informed decisions</em> such as deciding where to comprise and where to apply the <a href="http://en.wikipedia.org/wiki/80-20_rule">Pareto principle</a>.</p>
<p>A pragmatic programmer takes responsibility for everything they do. They don&#8217;t just sit there and watch the code rot. A pragmatic programmer will always endeavor to keep the code pristine.</p>
<p>Instigating change is another important skill that a pragmatic programmer must learn to apply. People are naturally opposed to change and in order to be a pragmatic in a software project, it is sometimes necessary to break the &#8220;we have always done it like this&#8221; mentality.</p>
<p><strong>Skills and Tools</strong></p>
<p>Using the appropriate tools is one of the best ways to amplify your productivity. Try <a href="http://www.hanselman.com/tools">various tools</a> and pick the ones that work for you. Then, learn them extremely well. Mold them to the shape of your hand. Consider the following categories of tools:</p>
<ul>
<li>Source control</li>
<li>Text manipulation</li>
<li>Debugging</li>
</ul>
<p>Another important tool is to be able to <a href="http://www.codinghorror.com/blog/2008/11/we-are-typists-first-programmers-second.html">touch type</a>. This is a worthwhile skill to<a href="http://www.keybr.com"> learn</a>, so be prepared to put in a lot of time.</p>
<p><strong>Life as a pragmatic programmer</strong></p>
<p>Being a pragmatic programmer does not make you write perfect programs. Accept it. Things will go wrong and when they do, we should ensure that the data always remain consistent. As the book says &#8220;dead programs tell no lies&#8221; and sometimes it is best to just simply kill it.</p>
<p>As long as there are people, software will change, continuously. That&#8217;s life. Pragmatic programmers guard themselves against the impact of these changes by observing the <a href="http://en.wikipedia.org/wiki/Law_Of_Demeter">Law of Demeter</a> (<a href="http://haacked.com/archive/2009/07/14/law-of-demeter-dot-counting.aspx">it&#8217;s not a dot counting exercise</a>) and decoupling dependencies. Keep separate concepts separate.</p>
<p>Coding is not just a matter of transcribing requirements into source code. It is a continuous process of making decisions. Decisions that will either pave your way or cause you grief later on. The choice is yours. Think critically about every line of code and remember to refactor continuously. Test, test and test some more.</p>
<p>While building software, there are two important principles that a  pragmatic programmer always observes. These are avoiding duplication at  all costs and avoid splitting a piece of knowledge across multiple  components. Failing to observe these two principles will invariably  bring you headaches in the future as the source code spirals out of  control.</p>
<p>This is the way of the pragmatic programmer.</p>
<p>By the way, there are loads of <a href="http://www.codinghorror.com/blog/files/Pragmatic%20Quick%20Reference.htm">tips</a> in the book that will not only benefit you now, but for as long you write   code.</p>
<p>(1) Dictionary.com, &#8220;pragmatic,&#8221; in <em>Online Etymology Dictionary</em>.  Source location: Douglas Harper, Historian. <a href="http://dictionary.reference.com/browse/pragmatic" target="_parent">http://dictionary.reference.com/browse/pragmatic</a>.  Available: <a href="http://dictionary.reference.com/" target="_parent">http://dictionary.reference.com</a>.  Accessed: June 13, 2010.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/382/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=382&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2010/06/13/programming-pragmatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>
	</item>
	</channel>
</rss>
