<?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>Just Another Point Of View &#187; programming</title>
	<atom:link href="http://www.blog.cmcculloh.com/category/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blog.cmcculloh.com</link>
	<description></description>
	<lastBuildDate>Thu, 24 Jun 2010 18:00:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Code Leopard Sticker</title>
		<link>http://www.blog.cmcculloh.com/code-leopard-sticker</link>
		<comments>http://www.blog.cmcculloh.com/code-leopard-sticker#comments</comments>
		<pubDate>Thu, 21 Aug 2008 10:47:49 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Cats]]></category>
		<category><![CDATA[Code Aminals]]></category>
		<category><![CDATA[Jaguar]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[Stickers]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=218</guid>
		<description><![CDATA[Here&#8217;s #2 in my code animal series: This one was extremely fun to make. The monkey was fun, but this one was a blast. I learned a lot about Leopards and Jaguars while doing it. It&#8217;s a lot more detailed than the monkey as a result, and if I do make this into some sort [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s #2 in my code animal series:</p>
<div id="attachment_221" class="wp-caption alignnone" style="width: 310px"><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/img_0230.jpg"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/img_0230-300x225.jpg" alt="Prototype Sketch of Leopard at keyboard" title="img_0230" width="300" height="225" class="size-medium wp-image-221" /></a><p class="wp-caption-text">Prototype Sketch of Leopard at keyboard</p></div>
<p><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-jaguar.gif"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-jaguar.gif" alt="Line art of Leopard at keyboard" title="code-jaguar" width="267" height="200" class="alignnone size-full wp-image-219" /></a></p>
<p><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-jaguar-color.gif"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-jaguar-color.gif" alt="Leopard Sitting at a Keyboard" title="Code Leopard" width="400" height="300" class="alignnone size-full wp-image-220" /></a></p>
<p>This one was extremely fun to make. The monkey was fun, but this one was a blast. I learned a lot about Leopards and Jaguars while doing it. It&#8217;s a lot more detailed than the monkey as a result, and if I do make this into some sort of Flash cartoon series, or a comic strip, this is the only time I&#8217;ll be drawing her this detailed (yeah, it&#8217;s a her).</p>
<p>To the keen eye, you can actually tell that this beast is a Jaguar, not a Leopard. Jaguars have a darker orange color, compared to Leopard&#8217;s lighter (almost white) coloring. Also, note the pink nose. Leopard&#8217;s noses are almost black.</p>
<p>Leopards are from Africa/Asia. Jaguars are from the Americas. But, when you look at their behaviors and coloring, it seems they are basically the same cat, just removed from each other by several centuries.</p>
<p>The reason I am calling this a Leopard instead of a Jaguar (even though Jaguar is an infinitely cooler name, and Leopard reminds people of crApple) is because of the awesome hunting behavior of the Leopard.</p>
<p>Let me digress for a moment. Each of these code animals I am drawing is a metaphor for programmer personalities. </p>
<p>The Code Monkey is a crazy fast, highly caffeinated, crack coder. They get the job done, but good lord is it ugly! </p>
<p>The Code Mole is a highly skilled, appropriately careful, somewhat reclusive, programmer. It refers to books, and other reference material, and stops to survey it&#8217;s design for flaws. However, when needed, the Code Mole can tuck it&#8217;s head down and dig like crazy to get the code done. How much time the Code Mole has given itself to plan it&#8217;s system will directly effect the quality of the result.</p>
<p>The Code Turtle is a Code Mole in the making. However, for whatever reason, the Turtle is tentative and cautious. It can get the job done, and it can even do a great job, but it&#8217;s really slow. The Turtle get&#8217;s spooked at the first sign of trouble and ducks back in it&#8217;s shell to reconsider everything before continuing.</p>
<p>The Code Hawk has a 10,000 foot view of the system. They might have grown up near the code, but now they are very hands off, keeping an eye on everything and constantly evaluating everything. When needed, the Code Hawk will swoop in for a quick kill before immediately resuming it&#8217;s lofty heights. (This is obviously a managerial role. Hard to even call it a &#8220;Code&#8221; Hawk, since even a non-programmer can sometimes assume this role)</p>
<p>This brings us to the Code Leopard, and finally, to the African Leopard&#8217;s hunting style. You see, the Leopard is the only large cat to live in trees. The Leopard does everything from the tree. Even hunt. That&#8217;s right, some little water buffalo comes walking along and all of the sudden&#8211;BAM! The Leopard pownces down on him from out of the tree! Maybe crush the spine, quick skull crushing snap of the jaws, twitch of the head to snap the neck, then the Leopard drags it back up into the tree (keeps away the scavengers). So, the Code Leopard has a bigger view of the code base, but they are still &#8220;in it&#8221;. This would be more of a debugger, tester, quick-fix type coder. Probably a super-visor, or a team lead/head coder. They know how the whole system works, and when they see a problem that needs knocked out, the jump on it, kill it, and get back up in that tree.</p>
<p>Let me know if you have any other Code Aminal(tm) ideas!</p>
<p>Semi-interesting trivia about the creation of this image: Last Sunday I was watching a PBS special on African cats, which is what generated the idea for the Leopard. I couldn&#8217;t remember what kind of cat it was afterwards, only the hollow-spot pattern. When I looked up &#8220;Jaguar&#8221; on Google, I saw the hollow-spots and assumed that was the right cat. Then, when looking at Jaguar pictures on <a href="http://www.animalwebguide.com/Jaguar.htm">this page</a> noticed it lived in North America, meaning it could not be my cat&#8230;</p>
<p>So I Googled &#8220;African Cats&#8221; and discovered the cat I was after was, in fact, a Leopard. Thus the name change from &#8220;Code Jaguar&#8221; to &#8220;Code Leopard&#8221; (since I referenced the Jaguar picture only to color it in. The sketch and lines I drew from my memory of the PBS special, and looking at it now, I realize it most closely originally resembled the stuffed white tiger my wife used to snuggle with).</p>
<p>While I was Googling cats, I found this (on <a href="http://scienceblogs.com/laelaps/2008/04/repost_what_big_teeth_you_have.php">this page</a>):</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/tAqrVRi6tMU&#038;color1=26265&#038;color2=5549014&#038;hl=en&#038;fs=1"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/tAqrVRi6tMU&#038;color1=26265&#038;color2=5549014&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" wmode="transparent" width="425" height="344"></embed></object></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/D6BOoYcJzGg&#038;color1=26265&#038;color2=5549014&#038;hl=en&#038;fs=1"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/D6BOoYcJzGg&#038;color1=26265&#038;color2=5549014&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" wmode="transparent" width="425" height="344"></embed></object></p>
<p>Simply spectacular!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/code-leopard-sticker/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code Monkey Sticker</title>
		<link>http://www.blog.cmcculloh.com/code-monkey-sticker</link>
		<comments>http://www.blog.cmcculloh.com/code-monkey-sticker#comments</comments>
		<pubDate>Wed, 20 Aug 2008 12:18:48 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[meida]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[code monkey]]></category>
		<category><![CDATA[line art]]></category>
		<category><![CDATA[sticers]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=211</guid>
		<description><![CDATA[First in a series&#8230; When I&#8217;m done with the series, I&#8217;ll be printing off some fat head stickers to put on my wall at work. 2&#8242;x4&#8242;, 1&#8243;x2&#8243; &#038; 1/2&#8243; x 1&#8243; will probably be the sizes&#8230; Let me know if you&#8217;re interested in one. If I get enough interest, I might print enough to put [...]]]></description>
			<content:encoded><![CDATA[<p>First in a series&#8230;</p>
<p><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/img_0224.jpg"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/img_0224.jpg" alt="" title="Code Monkey Whiteboard" width="500" height="375" class="alignnone size-full wp-image-214" /></a></p>
<p><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-monkey.gif"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-monkey.gif" alt="" title="Code Monkey Line Art" width="400" height="200" class="alignnone size-full wp-image-212" /></a></p>
<p><a href="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-monkey-color.gif"><img src="http://www.blog.cmcculloh.com/wp-content/uploads/2008/08/code-monkey-color.gif" alt="" title="Code Monkey Final" width="400" height="200" class="alignnone size-full wp-image-213" /></a></p>
<p>When I&#8217;m done with the series, I&#8217;ll be printing off some fat head stickers to put on my wall at work. 2&#8242;x4&#8242;, 1&#8243;x2&#8243; &#038; 1/2&#8243; x 1&#8243; will probably be the sizes&#8230; Let me know if you&#8217;re interested in one. If I get enough interest, I might print enough to put some up for sale (not for profit, just enough to cover printing/shipping costs).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/code-monkey-sticker/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reason #4 I&#8217;m a Web Designer</title>
		<link>http://www.blog.cmcculloh.com/reason-4-im-a-web-designer</link>
		<comments>http://www.blog.cmcculloh.com/reason-4-im-a-web-designer#comments</comments>
		<pubDate>Fri, 20 Jul 2007 17:32:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=119</guid>
		<description><![CDATA[No, don&#8217;t bother looking, you won&#8217;t find reasons 1, 2 &#038; 3 on the blog. I haven&#8217;t quite decided what they are yet. Something to do with listening to musac in an air conditioned office, getting paid decently to do something I love, and reading/writing in code&#8230; But reason #4 is that I love to [...]]]></description>
			<content:encoded><![CDATA[<p>No, don&#8217;t bother looking, you won&#8217;t find reasons 1, 2 &#038; 3 on the blog. I haven&#8217;t quite decided what they are yet. Something to do with listening to musac in an air conditioned office, getting paid decently to do something I love, and reading/writing in code&#8230;</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_aTnDL_Z0UII/RqDzJO4ruQI/AAAAAAAAAnA/4tX-ixYnZ2w/s1600-h/paypalProcess.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_aTnDL_Z0UII/RqDzJO4ruQI/AAAAAAAAAnA/4tX-ixYnZ2w/s200/paypalProcess.png" alt="" id="BLOGGER_PHOTO_ID_5089334918868875522" border="0" /></a>But reason #4 is that I love to make diagrams. Here is my latest masterpiece. I spent the last 3 hours on it, and I actually enjoyed it so much I worked through my lunch.</p>
<p>I did it as part of my documentation process for a website I&#8217;m working on, and because I was getting an error with my paypal payment. For some reason the paymentId wasn&#8217;t getting inserted into the right table and I couldn&#8217;t figure out why. Once I mapped this puppy out I saw it in a heart beat. Somehow I had two identical variables with different names. I instantiated them both to &#8221; &#8221; and then set one to the payment Id, then I inserted the other one into the table. So the payment id dropped off the face of the earth once the page closed, and the table received a blank entry. Oops. That&#8217;s what happens when you rename crucial database columns in the middle of dev and forget to propagate the changes to your code fully&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/reason-4-im-a-web-designer/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>It&#8217;s the simple things in life&#8230;</title>
		<link>http://www.blog.cmcculloh.com/its-the-simple-things-in-life</link>
		<comments>http://www.blog.cmcculloh.com/its-the-simple-things-in-life#comments</comments>
		<pubDate>Fri, 06 Jul 2007 14:20:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=111</guid>
		<description><![CDATA[Sometimes programming (and textbooks) makes me laugh (after I finish crying). Especially when I read this line in my SQL textbook: &#8220;Oracle&#8217;s query language has structure&#8230;but they are basically the normal rules of careful English speech and can be readily understood. SQL&#8230;is an astonishingly capable tool&#8230;using it does not require an programming experience.&#8221; So, all [...]]]></description>
			<content:encoded><![CDATA[<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_aTnDL_Z0UII/Ro5VKskGcBI/AAAAAAAAAms/lZQn7_8Oz_k/s1600-h/sqlProgramming.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_aTnDL_Z0UII/Ro5VKskGcBI/AAAAAAAAAms/lZQn7_8Oz_k/s200/sqlProgramming.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5084094671597498386" /></a>Sometimes programming (and textbooks) makes me laugh (after I finish crying). Especially when I read this line in my SQL textbook:</p>
<p>&#8220;Oracle&#8217;s query language has structure&#8230;but they are basically the normal rules of careful English speech and can be readily understood. SQL&#8230;is an astonishingly capable tool&#8230;using it does not require an programming experience.&#8221;</p>
<p>So, all of you non-programmers out there. It seems then that (according to my textbook) you should all, with extreme clarity and speed, know EXACTLY what this query does:</p>
<p>UPDATE PARTICIPANT<br />SET renewal_date = (<br />TO_DATE(<br />TO_CHAR((<br />SELECT ADD_MONTHS((<br />SELECT DECODE(&#8217;1&#8242;,<br />(SELECT SIGN((<br />TO_DATE(TO_CHAR(PARTICIPANT.renewal_date, &#8216;MM/DD/YYYY&#8217;), &#8216;MM/DD/YYYY&#8217;)<br />) &#8211; (<br />TO_DATE(TO_CHAR(SYSDATE, &#8216;MM/DD/YYYY&#8217;), &#8216;MM/DD/YYYY&#8217;)<br />)) AS greater_equal_less FROM dual<br />), PARTICIPANT.renewal_date, SYSDATE<br />) AS the_date FROM PARTICIPANT WHERE userid = &#8216;testName&#8217;<br />), 12) AS the_future FROM dual<br />), &#8216;MM/DD/YYYY&#8217;<br />), &#8216;MM/DD/YYYY&#8217;)<br />)<br />WHERE userid = &#8216;testName&#8217;;</p>
<p>Right? I mean, if SQL is so easy to understand that it&#8217;s just like speaking English to the computer, then I don&#8217;t even need to tell you what this does, right?</p>
<p>It&#8217;s overly optimistic statements in introductions to complex programming language textbooks like that that make middle and upper management who take basic classes believe that programming is &#8220;easy&#8221; and &#8220;quick&#8221; and that you should be able to construct the above SQL in about 15 minutes. It took me a little over an hour and a half (with a few breaks). Granted, I have only been using SQL for <span style="font-weight:bold;">TWO YEARS</span> so I guess I&#8217;m just a noob&#8230;</p>
<p>By the way, if someone knows the &#8220;right&#8221; way to do what I am trying to do above (in oracle) please let me know&#8230;</p>
<p>Oh, and all the query does is adds 12 months to the renewal date of a member. If their renewal date is in the past, it just adds 12 months to today&#8217;s date.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/its-the-simple-things-in-life/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ChomperStomper</title>
		<link>http://www.blog.cmcculloh.com/chomperstomper-2</link>
		<comments>http://www.blog.cmcculloh.com/chomperstomper-2#comments</comments>
		<pubDate>Fri, 08 Jun 2007 20:05:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=90</guid>
		<description><![CDATA[Object chomperStomper = new FlashGame;chomperStomper.sourceOpen = true;chomperStomper.license = &#8220;MIT&#8221;;chomperStomper.sourceLocation = &#8220;http://www.chomperstomp.com/littleGame.zip&#8220;; chomperStomper.submitToGoogle = true; And for those of you who don&#8217;t read fake Object Oriented Programming Code, I open sourced my chomperstomper game code today under the MIT open source license, and submitted it to google for consideration to be included on their gadgets page. [...]]]></description>
			<content:encoded><![CDATA[<p>Object chomperStomper = new FlashGame;<br />chomperStomper.sourceOpen = true;<br />chomperStomper.license = &#8220;MIT&#8221;;<br />chomperStomper.sourceLocation = &#8220;<a href="http://www.chomperstomp.com/littleGame.zip">http://www.chomperstomp.com/littleGame.zip</a>&#8220;;</p>
<p>chomperStomper.submitToGoogle = true;</p>
<p>And for those of you who don&#8217;t read fake Object Oriented Programming Code, I open sourced my chomperstomper game code today under the MIT open source license, and submitted it to google for consideration to be included on their gadgets page.</p>
<p>I think whether or not they include it might have something to do with how many people have added it already, so if you want to, click the link below to add the gadget to your google home page.</p>
<p><a href="http://fusion.google.com/add?moduleurl=http%3A//www.chomperstomp.com/chomperStomper.xml"><img src="http://buttons.googlesyndication.com/fusion/add.gif" alt="Add to Google" border="0" height="17" width="104"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/chomperstomper-2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why I love Python already</title>
		<link>http://www.blog.cmcculloh.com/why-i-love-python-already</link>
		<comments>http://www.blog.cmcculloh.com/why-i-love-python-already#comments</comments>
		<pubDate>Sun, 15 Apr 2007 22:52:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=64</guid>
		<description><![CDATA[I just began learning Python. I bought &#8220;Python Programming, Second Edition&#8221; brand new at Half Price Books for $14.98 and I am on page 12, but already I love it. Why? The &#8220;interactive window&#8221;. It&#8217;s like a scratch pad where you can test a line of code out. With Java, if you want to test [...]]]></description>
			<content:encoded><![CDATA[<p>I just began learning Python.</p>
<p>I bought &#8220;Python Programming, Second Edition&#8221; brand new at Half Price Books for $14.98 and I am on page 12, but already I love it.</p>
<p>Why? The &#8220;interactive window&#8221;. It&#8217;s like a scratch pad where you can test a line of code out. With Java, if you want to test out a little chunk of code, you have to create a new document, write the code, save it, compile it, run it. Then while you are <span class="blsp-spelling-corrected" id="SPELLING_ERROR_0">refining</span> it, every little change requires a new save compile run. Tedious. With Python (it appears) you can just jot it out, and hit enter and it will run it right there in front of you.</p>
<p>Now, this could prove to just be a little useless &#8220;wow, cool!&#8221; in the long run, but at first glance, it&#8217;s unique, and pretty sweet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/why-i-love-python-already/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Joel Test</title>
		<link>http://www.blog.cmcculloh.com/the-joel-test</link>
		<comments>http://www.blog.cmcculloh.com/the-joel-test#comments</comments>
		<pubDate>Wed, 04 Apr 2007 21:23:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.blog.cmcculloh.com/?p=55</guid>
		<description><![CDATA[So I&#8217;m reading this awesome book, &#8220;Dreaming In Code&#8221; (Scott Rosenberg). I&#8217;m about 3/4 the way done with it now, and it is fascinating. I would highly recommend it. On page 257 there is a list of 12 questions asked by software &#8220;expert&#8221; Joel Spolsky to act as a quick and dirty test to determine [...]]]></description>
			<content:encoded><![CDATA[<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_aTnDL_Z0UII/RhQX9390HsI/AAAAAAAAAYg/pXrksTPal4A/s1600-h/catalog_cover.pperl"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_aTnDL_Z0UII/RhQX9390HsI/AAAAAAAAAYg/pXrksTPal4A/s320/catalog_cover.pperl" alt="" id="BLOGGER_PHOTO_ID_5049687433951846082" border="0" /></a><br />So I&#8217;m reading this awesome book, &#8220;Dreaming In Code&#8221; (Scott Rosenberg). I&#8217;m about 3/4 the way done with it now, and it is fascinating. I would highly recommend it.</p>
<p>On page 257 there is a list of 12 questions asked by software &#8220;expert&#8221; Joel Spolsky to act as a quick and dirty test to determine if a development organization has it&#8217;s act together.</p>
<p>The questions are:</p>
<p>1. Do you use source control?<br />2. Can you make a build in one step?<br />3. Do you make daily builds?<br />4. Do you have a bug database?<br />5. Do you fix bugs before writing new code?<br />6. Do you have an up-to-date schedule?<br />7. Do you have a spec?<br />8. Do programmers have quiet working conditions?<br />9. Do you use the best tools money can buy?<br />10. Do you have testers?<br />11. Do new candidates write code during their interview?<br />12. Do you do hallway usability testing?</p>
<p>A score of 12 is perfect, 11 is tolerable, 10 or lower and you&#8217;ve got serious problems. Most organizations are running with a score of 2 or 3. Microsoft runs at 12 full time.</p>
<p>Now, when I read that I was kind of shocked. My Bachelors degree was indeed worth something. I guess I didn&#8217;t really realize how much I had actually learned at college until I read that short bit right there.</p>
<p>In the past year since I started at PSI, I have almost single handedly took our company from fulfilling&#8230; well&#8230; basically none of these requirements, to fulfilling nine of them. With the remaining 3 being either irrelevant or unfeasible (9, 10 and 11). Well, I guess we do fulfill 9 because I brought in my home computer until they buy me a really good one. I am the sole full-time developer and we don&#8217;t have money/need for hiring testers so my wife and brother fill that role. We don&#8217;t hire new people, so there is no reason to have them write code during hiring.</p>
<p>Now admittedly, we could do better in several of these areas. For instance, #4 is kind of only halfway fulfilled. We do have a bug database, but it doesn&#8217;t really get used all that much because I fix most bugs as soon as I find them, and the rest get put on a &#8220;to do&#8221; list that I pin to my cubicle wall. We do use Bugzilla, but the server that hosts it is down for the next week. Once it gets back up we will begin to use more regularly.</p>
<p>Number 8 is debatable. I have sound-canceling headphones that I pipe music into my brain through all day long. But I am betting that what he means by that is that programmers don&#8217;t have to also function as tech support for inept computer users around the office who CONSTANTLY manage to screw up their machines even though they only use WORD AND EXCEL!!!!!! I got interrupted two times today, and one time yesterday for little crisis people around the office where having. So I guess we only mostly fulfill number 8.</p>
<p>I am particularly proud of numbers 1, 2, 3, 6 and 12 though. After our part timer (Jeff) pointed me in the direction of it, I implemented subversion with tortoise (source control management) which has been a life saver on several occasions. I refined our build process from a HORRIBLE 15 minute 8 step monstrosity, down to a 30 second one click deal. No one understood why I was doing it, and people (our part time coder Jeff, and our network admin Mike) complained while I was doing, but it is awesome now that it is done. I learned MS Project, and how to use it so that it accurately tracked time AND duration (our network admin swore up and down it could only do one or the other), and finally I got my managers to read &#8220;Don&#8217;t Make Me Think&#8221; so that they would understand the importance of Usability Testing.</p>
<p>So it was nice to have a little &#8220;validation&#8221; on what I have been doing here, and really cool to step back and see how far I have come since I started. If I were to add one more thing to this guy&#8217;s list it would be: 13. documentation. I think documentation is very important and I have probably made more advances in that area than any other since I started. When I got here there was almost no documentation to speak of whatsoever. Now everything is documented fairly well (although it could definitely be better).</p>
<p>This makes me happy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.cmcculloh.com/the-joel-test/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
