<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkYBRH0-fyp7ImA9WhRVEk8.&quot;"><id>tag:blogger.com,1999:blog-16341181</id><updated>2012-01-10T12:29:15.357-06:00</updated><category term="education" /><category term="lawsofpower" /><category term="tools" /><category term="refactoring" /><category term="process" /><category term="programming" /><category term="development" /><category term="language" /><category term="a" /><category term="communication" /><category term="book" /><category term="expectations" /><category term="psychology" /><category term="pragmatic" /><category term="craftsmanship" /><category term="behavior" /><category term="history" /><category term="design" /><category term="traits" /><category term="testing" /><category term="requirements" /><category term="review" /><category term="biography" /><category term="training" /><category term="management" /><category term="science" /><title>The CodeWrights Tale</title><subtitle type="html">The Codewright's Tale is a place to discuss the craft of software development. The focus is more about the human aspect of programming, there are plenty of sites which post the latest and greatest tools or blocks of 'how to' code.  All the tools, methodologies, or languages in the world won't help if the primary obstacle of quality software is human nature and not a human invention.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://codewright.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TheCodewrightsTale" /><feedburner:info uri="thecodewrightstale" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>TheCodewrightsTale</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0QNR3w_eCp7ImA9WhRWEUQ.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-6395273874993168787</id><published>2011-12-29T14:43:00.000-06:00</published><updated>2011-12-29T14:43:16.240-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-29T14:43:16.240-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>SharePoint 2010 Custom IFilter development update</title><content type="html">The previous post on&lt;a href="http://codewright.blogspot.com/2011/07/mysteries-of-ifilter-development.html"&gt; IFilter development for Windows and SharePoint&lt;/a&gt;, I included several links&amp;nbsp;to resources we used to&amp;nbsp;code a&amp;nbsp;custom IFilter; the hope being they would be useful to anyone looking to write their&amp;nbsp;own, seeing as how difficult it was to find accurate information on the subject.&lt;br /&gt;
&lt;br /&gt;
Alex Culp did an outstanding job with the IFilter, so much so that Microsoft asked him to write a MSDN article on the subject of &lt;a href="http://msdn.microsoft.com/en-us/library/hh694268.aspx"&gt;writing a custom IFilter&lt;/a&gt;.&amp;nbsp; The custom file type wasn't the issue, it was all the complexities of C++ and IFilter development combined with registry entries, properties, 32bit/64bit details and so forth,&amp;nbsp;like how the 64-bit version of Visual Studio creates a 32-bit installer by default which then didn't install the correct version of the .Net dlls.&amp;nbsp; Another bit-ness nugget is to pay attention to which Regedit you run when setting registry entries; 64-bit entries are not visible to the 32-bit executable.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-6395273874993168787?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Jz-mDhDoB1w:We99DZmc4eE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Jz-mDhDoB1w:We99DZmc4eE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Jz-mDhDoB1w:We99DZmc4eE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Jz-mDhDoB1w:We99DZmc4eE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/Jz-mDhDoB1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/6395273874993168787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2011/12/sharepoint-2010-custom-ifilter.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/6395273874993168787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/6395273874993168787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/Jz-mDhDoB1w/sharepoint-2010-custom-ifilter.html" title="SharePoint 2010 Custom IFilter development update" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2011/12/sharepoint-2010-custom-ifilter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04HQ3c9cSp7ImA9WhRVEkw.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-6280100782377411143</id><published>2011-10-03T16:40:00.001-05:00</published><updated>2012-01-10T12:25:32.969-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T12:25:32.969-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title>Mysteries of IFilter Development Revealed</title><content type="html">Alex Culp and I worked on a IFilter for a customer file type.&amp;nbsp; His page on &lt;a href="http://alexculpblog.wordpress.com/2011/07/01/ifilter/"&gt;writing an ifilter&lt;/a&gt; is down while he works on publishing an article on writing ifilters for Microsoft. [Update: His MSDN article on IFilter development has been published, see my post, &lt;a href="http://codewright.blogspot.com/2011/12/sharepoint-2010-custom-ifilter.html"&gt;http://codewright.blogspot.com/2011/12/sharepoint-2010-custom-ifilter.html&lt;/a&gt;]&amp;nbsp; In the meantime, I figured I'd share my list of IFilter development links.&amp;nbsp; Considering all the other technology out there and the age of the ifilter interface, I was surprised how difficult it was to find useful information.&lt;br /&gt;
&lt;br /&gt;
A good start is this MSDN page: &lt;a href="http://msdn.microsoft.com/en-us/library/ms916793.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms916793.aspx&lt;/a&gt;. It's somewhat old but does cover lots of the details involved. We had the hardest time finding out how to create a custom property or property set for the ifilter to use when it found metadata.&amp;nbsp; We ended up using an existing category, Basic, and creating property ID's above the range of existing properties, i.e. we started at 200 since the existing Basic properties didn't get above 100.&lt;br /&gt;
&lt;br /&gt;
Here's&amp;nbsp;info on &lt;a href="http://blogs.msdn.com/b/ifilter/archive/2007/02/06/debugging-ifilters-in-moss-wss.aspx"&gt;debugging IFilters in MOSS&lt;/a&gt;. We did have trouble getting all the registry entries needed to properly register the IFilter with the server. Keep a log of the entries, there are quite a few and in confusingly similiar places, especially since GUIDs are involved.&lt;br /&gt;
&lt;br /&gt;
Here is another page on &lt;a href="http://blogs.msdn.com/b/ifilter/archive/2006/12/25/chronicles-of-an-ifilter-development-inception-to-deployment.aspx"&gt;ifilter development&lt;/a&gt;.&amp;nbsp; Keep reading through the comments, lots more details are discussed there.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.citeknet.com/Products/IFilters/IFilterExplorer/tabid/62/Default.aspx"&gt;IFilter explorer&lt;/a&gt;. Shows information about the installed ifilters.&lt;br /&gt;
&lt;br /&gt;
Good article series&amp;nbsp;from Anne Stenberg on &lt;a href="http://blogs.technet.com/b/anneste/archive/tags/crawled+properties/"&gt;crawled properties&lt;/a&gt; and how to find the one you want to map. This is useful in understanding more about a crawled property, like when you want to make your own.&lt;br /&gt;
&lt;br /&gt;
This post mentions a dev guide to writing your own &lt;a href="http://sharepointsearch.com/cs/blogs/notorioustech/archive/2007/06/19/writing-a-custom-protocol-handler-for-sharepoint.aspx"&gt;SP2007 protocol handler&lt;/a&gt;. Might be a good resource.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-6280100782377411143?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=683jFl5vyVw:YLo5Z22wfAs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=683jFl5vyVw:YLo5Z22wfAs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=683jFl5vyVw:YLo5Z22wfAs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=683jFl5vyVw:YLo5Z22wfAs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/683jFl5vyVw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/6280100782377411143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2011/07/mysteries-of-ifilter-development.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/6280100782377411143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/6280100782377411143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/683jFl5vyVw/mysteries-of-ifilter-development.html" title="Mysteries of IFilter Development Revealed" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://codewright.blogspot.com/2011/07/mysteries-of-ifilter-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYBRH09cSp7ImA9WhRVEk8.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-1830090063467722890</id><published>2011-01-11T09:00:00.002-06:00</published><updated>2012-01-10T12:29:15.369-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T12:29:15.369-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><category scheme="http://www.blogger.com/atom/ns#" term="language" /><title>Computer Science is an Art</title><content type="html">&lt;br /&gt;
Of the many eternal debates that spiral around software development blogs the one that seems the most intransigent is whether the practice of programming is an art or a science. &lt;br /&gt;
&lt;br /&gt;
Chefs have a similar discussion over cooking and baking.&amp;nbsp; Cooking is an art while baking is a science.&amp;nbsp; Why?&amp;nbsp; Because when you put something in the oven, you had better get it right the first time.&amp;nbsp; Mistakes mean starting over.&amp;nbsp; Cooking, on the other hand, allows the chef the leeway to make changes as the dish progresses. The chef can take action to keep the dish from heading off course. For example, when making gravy you keep adding flour until it is the right consistency and if you add too much flour you can add some milk to thin it down.&amp;nbsp; It is incremental by nature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-1830090063467722890?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=yZD8GWEzoQk:6kYuVV0tUSk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=yZD8GWEzoQk:6kYuVV0tUSk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=yZD8GWEzoQk:6kYuVV0tUSk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=yZD8GWEzoQk:6kYuVV0tUSk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/yZD8GWEzoQk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/1830090063467722890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2011/01/computer-science-is-art.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/1830090063467722890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/1830090063467722890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/yZD8GWEzoQk/computer-science-is-art.html" title="Computer Science is an Art" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2011/01/computer-science-is-art.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkACSH4ycCp7ImA9Wx9SE08.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-428944327000456306</id><published>2010-12-01T09:20:00.002-06:00</published><updated>2010-12-02T14:12:49.098-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-02T14:12:49.098-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="history" /><category scheme="http://www.blogger.com/atom/ns#" term="a" /><title>Computer Science or Software Engineering - An Elemental Problem</title><content type="html">What is the difference between Computer Science and Software Engineering?&amp;nbsp; That depends on the nature of the problem you are trying to solve -&amp;nbsp; is your problem one of &lt;a href="http://en.wikipedia.org/wiki/Silicon"&gt;Silicon&lt;/a&gt; or one of &lt;a href="http://en.wikipedia.org/wiki/Carbon"&gt;Carbon&lt;/a&gt;?  &lt;br /&gt;
&lt;br /&gt;
In my 20-year career in working with software, the single biggest issue has also been an elephant 
in the room: the abysmal success rate of large software systems.&amp;nbsp; Plenty
 of books have been written on the subject with lots of great, if 
unheeded, advice.&amp;nbsp; Scope creep, ambiguous or missing requirements, poor communications, bad risk management; lots of reasons have been documented and just as many if not more solutions have been suggested.&amp;nbsp; &lt;b&gt;Brooks &lt;/b&gt;gave us "&lt;i&gt;The Mythical Man-Month&lt;/i&gt;", &lt;b&gt;Yourdon &lt;/b&gt;writes of "&lt;i&gt;The Death March&lt;/i&gt;", &lt;b&gt;Tom DeMarco&lt;/b&gt; has "&lt;i&gt;Peopleware&lt;/i&gt;". All of them attempting to answer the question, "Why is it
 so hard to write software?"&lt;br /&gt;
&lt;br /&gt;
If you take the all the books on writing software and put their suggestions in one big list, the first question would be, "If we have all the answers, why don't we use them?"&amp;nbsp; That might be nice for getting it off your chest but isn't has helpful in pointing us in the right direction. At its core, this question does have a useful kernel, it assumes that 'we' are the problem.&amp;nbsp; If only we used this process, if only we implemented that practice, if only we hired the right people, if only we kept our teams motivated.&amp;nbsp; As an aside, most of the reasons for failure are management reasons, not technical ones.&amp;nbsp; It should be no surprise that many find the &lt;a href="http://virtualschool.edu/mon/CaseStudies/Vasa/vasa.html"&gt;case study on the sinking of the Vasa in 1628&lt;/a&gt; to be very instructive. The blame is as much, if not more so, on the King's unrealistic demands as on the builder's efforts to failure to meet the royal requirements. In our endless efforts to build bigger, more complex and complicated software solutions in the face of almost certain failure, should question our sanity; one definition of insanity being, "doing the same thing and expecting different results." Biting off more than we can chew, choking, and then doing it all again time after time only shows how our hubris can get the better of us, allowing us to continue on our &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Sisyphus"&gt;Sisyphean task&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
This brings me to an interesting observation.&amp;nbsp; There is a long running debate over whether computer programming is/should be considered a form of artistic expression or of engineering prowess.&amp;nbsp; Computers have such a wide scope that many sub-fields have crept up, hardware and software being the most obvious. Hardware is typically the realm of the engineer, designing circuit boards or embedded sensors.&amp;nbsp; This changes as the hardware gets larger in size or scope.&amp;nbsp; CPUs have microcode, missiles have on-board navigation systems with programmable targets. &lt;br /&gt;
&lt;br /&gt;
Most universities that offer degrees related to programming computers name the department Computer Science.&amp;nbsp; Now, being considered a 'science' may be just a way of expressing the notion that computers are deterministic and worthy of comparison with mathematics or engineering, having likely grown as an offshoot of the field of electrical engineering.&amp;nbsp; Whether it be data mining, security, networking, or pure algorithms, most of the areas seem to ignore the question of why software is so hard. They assume the problem is in the silicon computer chips.&amp;nbsp; Curiously, these fields don't even attempt to address this most difficult of questions, assuming improvements of our silicon constructs or their usage will somehow mitigate our human foibles. If only we had better tools, or faster computers, etc. then our carbon-based brains could somehow ascend above the project management miasma and become a beacon to those who struggle and toil without end. Considering the gargantuan number of man-hours and humongous amounts of money wasted, such an accomplishment would be of heroic proportions, mythic even; a modern-day retelling of Prometheus or Sisyphus.&lt;br /&gt;
&lt;br /&gt;
The truth is that Computer Science may bring improvements in areas where
 the problem is in the silicon, it is mute when asked to provide answers
 to problems of a carbon nature.&amp;nbsp; Software Engineering attempts to develop solutions that include how humans work together.&amp;nbsp; Software Engineering does not assume that software development is as cut-and-dried as putting the right circuits on a board to achieve the desire product, or breaking down a complex problem into constituent algorithms to make the problem more manageable. There is no magic bullet, no single development process, no single answer.&amp;nbsp; To understand why humans have a hard time developing software, we must admit that humans are part of the equation. Doing is brings with it a cold truth about humans - they are non-deterministic by nature.&amp;nbsp; Alistair Cockburn describes it as people being &lt;a href="http://alistair.cockburn.us/Characterizing%20people%20as%20non-linear,%20first-order%20components%20in%20software%20development"&gt;non-linear, first order components in software development&lt;/a&gt;.&amp;nbsp;&amp;nbsp; To answer the question of what is software development, we might have to take detours through Psychology, and may be surprised to end up working with Philosophy even.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-428944327000456306?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=lnwu9Bx6cn0:jGFjTCYxXh8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=lnwu9Bx6cn0:jGFjTCYxXh8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=lnwu9Bx6cn0:jGFjTCYxXh8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=lnwu9Bx6cn0:jGFjTCYxXh8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/lnwu9Bx6cn0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/428944327000456306/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/12/computer-science-or-software.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/428944327000456306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/428944327000456306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/lnwu9Bx6cn0/computer-science-or-software.html" title="Computer Science or Software Engineering - An Elemental Problem" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/12/computer-science-or-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQHk6fCp7ImA9Wx5QFE4.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-3611188744945242221</id><published>2010-09-02T09:21:00.002-05:00</published><updated>2010-09-02T09:24:41.714-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T09:24:41.714-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><title>When the Student is Ready, the Teacher Appears</title><content type="html">&lt;br /&gt;
I remember hearing from a 'higher-up' once at a previous company that we shouldn't do Use Cases.&amp;nbsp;
"The customer doesn't like them", something I never heard directly from
a customer. Doing a design review with use cases, a domain model, and a set of fleshed-out sequence diagrams was once described as 'over designed'. It was a mystery to me at the time why they would be so ambivalent about better ways to develop software. &lt;br /&gt;
&lt;br /&gt;
Now, in my graduate class at UTA on Software Design Patterns, the assignments are ironically familiar:
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
project requirements&lt;/li&gt;
&lt;li&gt;
use cases (3 levels)&lt;/li&gt;
&lt;li&gt;
domain model&lt;/li&gt;
&lt;li&gt;
sequence diagrams, design class diagram&lt;/li&gt;
&lt;li&gt;pair programming&lt;/li&gt;
&lt;li&gt;test driven development&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Not even ten years ago, these practices were still gaining acceptance in the industry.&amp;nbsp; A common complaint up until now has been that colleges and universities don't teach these techniques, which only gave the critics more ammunition.&amp;nbsp; Now that has started to change, hopefully the debate about these practices will be about how to best implement them instead of how to dismiss them.&lt;br /&gt;
&lt;br /&gt;
It turns out that the solution to the mystery had nothing to do with the merits of any software development methodology but rather had everything to do with the rejection of in-house software development. This company had a long history of developing their own software and over the years had ended up with one of the largest technology departments&amp;nbsp; I've ever worked in, close to 1,000 people.&amp;nbsp; When the leadership changed, the attitude shifted from "Not built here" to "Don't build it if you can buy it".&amp;nbsp; They didn't value the capability to develop software, so trying to improve the process had become moot. Preferring to buy vs. build is a perfectly reasonable approach.&amp;nbsp; Some company's realize they don't want to be a development shop and make no bones about it.&amp;nbsp; The harm comes when there is a disconnect between management and the teams doing the work.&amp;nbsp; Psychologically, this would fall under cognitive dissonance; having a development shop mindset at the same time the departments actions are turning away from development. &lt;br /&gt;
&lt;br /&gt;
It wasn't a surprise then, when it was announced that they were 'partnering' with a large three-letter company to rewrite their web-site, which happens to be the company's main source of revenue.&amp;nbsp; The team that developed the site was held in high esteem by the department, full of some of the smartest guys and pushing the envelope, all while supporting a truly business-critical app 24/7 with close to zero unscheduled downtime. The site happened to be written in C++, putting the bar high for development skills for recruiting. One of the clues to the mystery was at a monthly meeting of technical leads prior to the partnering decision.&amp;nbsp; Using C++ was being de-emphasized, the reason given was the difficulty in finding qualify developers.&lt;br /&gt;
&lt;br /&gt;
The interesting question becomes, if you devalue software development skills will you lose the ability to monitor your partner and be a fully engaged partner?&amp;nbsp; Inevitably, you'll have to take some consultants word on a technical matter and you'll no longer be a partner but rather a simple client.&amp;nbsp; Keeping your organizations software development skills sharp benefits you even if you don't write the code.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-3611188744945242221?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=kp1-X2k4BeQ:CZ5hXA8zLts:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=kp1-X2k4BeQ:CZ5hXA8zLts:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=kp1-X2k4BeQ:CZ5hXA8zLts:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=kp1-X2k4BeQ:CZ5hXA8zLts:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/kp1-X2k4BeQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/3611188744945242221/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/09/when-student-is-ready-teacher-appears.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3611188744945242221?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3611188744945242221?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/kp1-X2k4BeQ/when-student-is-ready-teacher-appears.html" title="When the Student is Ready, the Teacher Appears" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/09/when-student-is-ready-teacher-appears.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEGRHg4fip7ImA9Wx5SE0o.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-4141927460213563756</id><published>2010-08-09T11:58:00.001-05:00</published><updated>2010-08-09T12:07:05.636-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T12:07:05.636-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="education" /><title>Student, Teach Thyself - A Theoretical Computer Science QnA site</title><content type="html">I've been a fan of Stackoverflow for a while.&amp;nbsp; &lt;a href="http://www.codinghorror.com/blog/"&gt;Jeff Atwood&lt;/a&gt; and &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; have helped the Internet turn a corner when it comes to helping people find answers to their questions.&amp;nbsp; Google may do an incredible job indexing pages but it would be to no avail if the pages themselves were all junk.&lt;br /&gt;
&lt;br /&gt;
I don't have a ton of time to be on the new site-proposal system called &lt;a href="http://area51.stackexchange.com/"&gt;area51.stachexchange.com&lt;/a&gt;. During one of my CS grad school classes, I asked a &lt;a href="http://stackoverflow.com/questions/2625261/how-is-a-lattice-used-by-a-compiler"&gt;question regarding my schoolwork&lt;/a&gt; on the main Stackoverflow site and was underwhelmed by the responses.&amp;nbsp; Since the main site is more for working programmers who typically expect a code snippet as an answer, I figured the proposal for a &lt;a href="http://area51.stackexchange.com/proposals/8766/theoretical-computer-science?referrer=Q9zc-ltJyTBRULukYsvH_w2"&gt;site on theoretical computer science&lt;/a&gt; deserved a shout out.&lt;br /&gt;
&lt;br /&gt;
Now if they would only restart their podcast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-4141927460213563756?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Of6TWs86EEw:rK0yBxYW368:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Of6TWs86EEw:rK0yBxYW368:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Of6TWs86EEw:rK0yBxYW368:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Of6TWs86EEw:rK0yBxYW368:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/Of6TWs86EEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/4141927460213563756/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/08/student-teach-thyself.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4141927460213563756?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4141927460213563756?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/Of6TWs86EEw/student-teach-thyself.html" title="Student, Teach Thyself - A Theoretical Computer Science QnA site" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/08/student-teach-thyself.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCQXg5cCp7ImA9Wx5TEkk.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-9162907651691137809</id><published>2010-07-27T10:11:00.113-05:00</published><updated>2010-07-27T10:11:00.628-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-27T10:11:00.628-05:00</app:edited><title>The Battle of Computer Science Training</title><content type="html">There is a constant battle between the corporate and academic worlds.&amp;nbsp; Universities want to teach more theory so students are prepared for a wide range of situations.&amp;nbsp; Companies want graduates with technology-specific training so they can contribute immediately.&amp;nbsp; Who is right? Both and neither.&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_ikmwGzALbOc/TEh7726F5sI/AAAAAAAAAQk/cRVzai45LM4/s1600/the-blacksmith.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_ikmwGzALbOc/TEh7726F5sI/AAAAAAAAAQk/cRVzai45LM4/s200/the-blacksmith.jpg" width="160" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Equipped with skills&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
When taking a course in algorithms, you might need to demonstrate some type degree of learning through programming a lab assignment.&amp;nbsp; Its a decent bet that languages the student may not be the best choice to highlight the various algorithms being taught. The student then finds himself learning a new language for the sake of submitting a lab assignment.&amp;nbsp; This is usually done with zero training or exposure and very little support outside of asking classmates or asking for help from the instructor who is eternally busy with other things.&lt;br /&gt;
&lt;br /&gt;
Version control is another topic that shows the rift between the two worlds.&amp;nbsp; Most IT shops require the use of some version control system.&amp;nbsp; Most developers learn enough to get the job done but never really understand it enough to make it an equal partner in the development process.&amp;nbsp; The administrative function is usually lacking.&amp;nbsp; big IT shops can afford to hire VCS admins also have so many repositories that the admin's time is spread too thin unless you happen to be working on the 800-lb gorilla project.&amp;nbsp; Smaller shops muddle through and usually someone takes the admin role upon themselves because they are tired of the situation and are the first to hit their frustration threshold.&amp;nbsp; Not unlike the newlywed dilemma, "If the full sink of dishes bothers you, you wash them."&lt;br /&gt;
&lt;br /&gt;
Since starting grad school, I figured I'd apply my own coding lessons and use version control for my assignments.&amp;nbsp; What an eye-opening experience!&amp;nbsp; Some tools with which I'm familiar already have enough version history.&amp;nbsp; Eclipse has a nice feature where it automatically saves the change history of a file every time you save it. This works for solo Java projects but doesn't for other languages or group projects.&lt;br /&gt;
&lt;br /&gt;
There are two main obstacles to using version control in academia; having to be your own VCS admin/trainer, and the lack of consistency from the university.&amp;nbsp; You have to have the discipline to keep your VCS configured and working but also extend it to whatever environment that might be required.&amp;nbsp; It does you little good if you have your personal repository setup on your own PC when the professor requires assignments to be done on the campus Unix box.&amp;nbsp; The same holds true when a lab is required to be done in a language that your IDE doesn't support. Eclipse has 'C' support through the CDT but if you aren't going to be using it next semester, the time it takes to get it configured and working becomes that much time away from getting the assignment done or studying for the next test.&amp;nbsp; When working on a group project, it also means having to teach your teammates how to use the tool and then hope that they actually use it.&lt;br /&gt;
&lt;br /&gt;
This leads to the second obstacle.&amp;nbsp; Without a departmental policy or professorial dictate, version control usage by students will be as rare has hen's teeth. The university or at least CS department would need to support VCS tools for campus computing environments, at least for administrivia.&amp;nbsp; The professors and instructors would need to make VCS part of the lab requirements.&lt;br /&gt;
&lt;br /&gt;
Don't hold your breath.&lt;br /&gt;
&lt;br /&gt;
There is no impetus by the faculty to standardize on a VCS tool.&amp;nbsp; The  sheer number of languages and environments make it unlikely for any  consensus to appear. This is odd because CS classes constantly have issues with turning in code and checking for plagiarism/cheating.&amp;nbsp; Looking through the check-in history would be a simple way to verify a student's progress.&amp;nbsp; Code diff tools would make it almost effortless to check for "borrowed" code. There are enough cross-platform tools that it is not a technology problem, it's a human problem.&lt;br /&gt;
&lt;br /&gt;
The fundamental problem is the two worlds are trying to 'train' for different things.&amp;nbsp; In school, technology is a means to an end. Students are being trained to understand how to approach and solve problems.&amp;nbsp; They are being prepared for unknown situations so they can recognize when an approach is guaranteed to fail or maybe has been solved before and a stock algorithm exists.&amp;nbsp; Employers, on the other hand, want people who are trained in the tools they are using to solve their problems.&amp;nbsp; New hires aren't the ones who get to analyze a business problem not to mention prioritizing which problem to address. Managers still like to think of coding like a factory floor, the workers don't get to design the manufacturing process or choose the tools.&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ikmwGzALbOc/TEh8siIR4FI/AAAAAAAAAQs/2UbB-zlJPuw/s1600/factory.jpeg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="111" src="http://2.bp.blogspot.com/_ikmwGzALbOc/TEh8siIR4FI/AAAAAAAAAQs/2UbB-zlJPuw/s200/factory.jpeg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Trained to repeat a process&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
For those of you that like analogies, here is how I'd put this conundrum.&amp;nbsp; College is training blacksmiths that don't make the same thing repeatedly.&amp;nbsp; They can be given a strange piece of hardware and figure out how to fix it.&amp;nbsp; They can be asked to create something new based on ambiguous requests.&amp;nbsp; Business wants someone who is trained to make swords.&amp;nbsp; The enemy is already defined by the leaders, the strategies already determined by the generals.&lt;br /&gt;
&lt;br /&gt;
The problem isn't training sword-smiths, it's wanting nothing but sword-smiths and then discovering you need a telescope, or horseshoes. Technology is still changing at an unheard of pace.&amp;nbsp; Training in the current technology is a recipe for obsolesce. The window of current technology is getting smaller and smaller.&amp;nbsp; COBOL was king-of-the-mountain for 20 years, C/C++ for maybe 15, Java is already on the downhill slope with C# and JavaScipt taking the spotlight and other languages in the wings (Ruby, Python, Scala) or working backstage (Perl, PHP, SQL).&lt;br /&gt;
&lt;br /&gt;
Pick your tools well and train for anything. You'll have your fate in your own hands and not be surprised by the winds of change. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-9162907651691137809?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=ibbPStEPiCQ:L-A4x8ED_F4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=ibbPStEPiCQ:L-A4x8ED_F4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=ibbPStEPiCQ:L-A4x8ED_F4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=ibbPStEPiCQ:L-A4x8ED_F4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/ibbPStEPiCQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/9162907651691137809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/07/battle-of-computer-science-training.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9162907651691137809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9162907651691137809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/ibbPStEPiCQ/battle-of-computer-science-training.html" title="The Battle of Computer Science Training" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ikmwGzALbOc/TEh7726F5sI/AAAAAAAAAQk/cRVzai45LM4/s72-c/the-blacksmith.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/07/battle-of-computer-science-training.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4MQXk9cCp7ImA9WxFQGEk.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-8748797095804072796</id><published>2010-05-14T08:33:00.003-05:00</published><updated>2010-05-14T08:33:00.768-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-14T08:33:00.768-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>To Buy or Not to Buy Technical Books, That is the Question</title><content type="html">&lt;div class="post-text"&gt;So the rookie coder is working at his new job, fresh out of college, when the team malcontent is overheard a couple of cubes over, "This place is so cheap! They should reimburse me for this technical book. It's a heckuva lot cheaper then a training class."&amp;nbsp; However true that is, it hides a simple choice: keep the book and be out the money, or give up the book and pocket the cash - &lt;a href="http://stackoverflow.com/questions/233903/how-can-i-convince-my-boss-to-buy-books-for-programmers"&gt;assuming the boss will foot the bill&lt;/a&gt;. &lt;/div&gt;&lt;div class="post-text"&gt;&lt;br /&gt;
Recently a &lt;a href="http://stackoverflow.com/questions/944878/should-programmers-buy-their-hardware-if-their-company-doesnt-buy"&gt;question on Stackoverflow&lt;/a&gt; reminded me of that rookie coder. Being fresh out of college gives you an amazing combination of overconfidence and cluelessness.&amp;nbsp; Without any basis, it's easy to take the office attitude and run with it.&amp;nbsp; You shouldn't have to buy your tools, your company should.&lt;br /&gt;
&lt;br /&gt;
I disagree.&lt;br /&gt;
&lt;br /&gt;
Why? Because they are tools. It's not even a cost thing. A professional should be responsible for knowing which tools they need to be most productive. Tour an airline maintenance facility and check out the workshop.&amp;nbsp; A large area, maybe 1000 sq. ft., with nothing but large toolboxes;&amp;nbsp; each with a name and a lock. The mechanics have to buy all their own tools, think wrench sets and so forth - not large things like engine dollies.&lt;br /&gt;
&lt;br /&gt;
At first it seems a bit silly and redundant but when you start to think about it, it's easy to see that not everyone is going to want to spend the extra money on the high-end tools, or they might want extras of the same set for whatever reason. Also, consider the hassles with sharing, e.g. "Where are the 1/2 inch box-end wrenches?" By not making the tools shared, the '&lt;a href="http://en.wikipedia.org/wiki/Tragedy_of_the_commons" rel="nofollow"&gt;Tragedy of the commons&lt;/a&gt;' is avoided.  &lt;br /&gt;
&lt;br /&gt;
Another example is chefs and their knives. You don't touch another chef's knives. The restaurant provides the big things like ovens and stoves, the chefs bring their own knives.&lt;br /&gt;
&lt;br /&gt;
Back in the world of computers, I've brought in extra memory before. I told my manager so he'd know that some of my personal property was in the PC in case it needed to be worked on by the internal techs. I also put a note on the box itself. I would have had a bigger issue if they discouraged bringing your own hardware. Most shops like to provide the box itself because it minimizes their support issues but they shouldn't have any problems with you bringing accessories like monitors, keyboards, mice, etc.&lt;br /&gt;
&lt;br /&gt;
To summarize, change how you think about tools and strive to use whatever makes you better at your job, even if you have to pay for them out of your own pocket. It's the 'Professional" thing to do.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-8748797095804072796?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=GobFkcN3So8:9yYorTcvztE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=GobFkcN3So8:9yYorTcvztE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=GobFkcN3So8:9yYorTcvztE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=GobFkcN3So8:9yYorTcvztE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/GobFkcN3So8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/8748797095804072796/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/05/to-buy-or-not-to-buy-technical-books.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8748797095804072796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8748797095804072796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/GobFkcN3So8/to-buy-or-not-to-buy-technical-books.html" title="To Buy or Not to Buy Technical Books, That is the Question" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/05/to-buy-or-not-to-buy-technical-books.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBQn09fip7ImA9Wx5WE0k.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-8390317736139709917</id><published>2010-04-21T13:13:00.001-05:00</published><updated>2010-09-24T10:30:53.366-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-24T10:30:53.366-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>Martin Fowler, Alistair Cockburn, and Optimism</title><content type="html">The effort to make Software Engineering actually live up to the 'Engineering' part has been greatly helped by &lt;a href="http://martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;'s book on &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201485672"&gt;refactoring&lt;/a&gt;. Martin recently posted about &lt;a href="http://martinfowler.com/bliki/Semat.html"&gt;his decision&lt;/a&gt; to not participate in an effort by others in the industry, not lacking in optimism, to define a common process for software development.&lt;br /&gt;
&lt;br /&gt;
Martin Fowler declined to get involved in a similar effort and for the same reason.&amp;nbsp; The key quote is,&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
“Why this is so was primarily crystallized for me by Alistair Cockburn who explained that since people are the central element in software development, and people are &lt;a href="http://alistair.cockburn.us/Characterizing%20people%20as%20non-linear,%20first-order%20components%20in%20software%20development"&gt;inherently non-linear and unpredictable&lt;/a&gt; - such an effort is fundamentally doomed.”&lt;/blockquote&gt;
&lt;br /&gt;
While my &lt;a href="http://codewright.blogspot.com/2009/11/extreme-programming-is-people.html"&gt;previous post&lt;/a&gt; about Alistair's paper covers much of the same ground I felt it was worthy of an update.&amp;nbsp; There will always be souls who crave consistency just as there will always be salesmen willing to offer the illusion of it.&amp;nbsp; Facing our own nature is one of life's hardest lessons. Some of those who ignore the human factor are optimists seeking to improve their chances of consistency, which has &lt;a href="http://codewright.blogspot.com/2007/04/technology-is-harsh-mistress.html"&gt;driven many towards the latest and greatest geegaw&lt;/a&gt;, a new language, a new GUI, a new design tool. Others are simply deluding themselves in the hopes that if only people would sit up and fly right (read this to mean 'do it their way') all our problems would be solved.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Studying the &lt;a href="http://www.blogger.com/%20http://codewright.blogspot.com/2009/03/chapter-3-how-can-we-study-programming.html"&gt;process of computer programming&lt;/a&gt; has been around for decades.&amp;nbsp;&amp;nbsp; Even so, we still have trouble internalizing human foibles - people aren't predictable and follow "standards" about as well as a &lt;a href="http://en.wikipedia.org/wiki/Random_walk"&gt;random-walk&lt;/a&gt;.&amp;nbsp; So the most successful way to get people to be consistent is to lead by example, blaze a trail ahead and show them the way.&amp;nbsp; In this manner Extreme Programming was its own worst enemy and its own best cheerleader. By showing how a set of practices work in situ, it created a much-needed focus. The "Waterfall" model was the favorite whipping-boy, essentially dead, and the iterative approach was in its infancy.&amp;nbsp; So XP served as a lightning-rod for discussions on the craft of software development.&amp;nbsp; It provided an example of practices that could be emulated and provided an easy target for the doubters, disbelievers, and denialists; no doubt the negativity coming from the critics was channeling&amp;nbsp; their  innate understanding of the &lt;a href="http://codewright.blogspot.com/2009/06/why-extreme-programming-fails.html"&gt;darkside of human behavior&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
While Extreme Programming hasn't become the standard development model, that doesn't mean it failed.&amp;nbsp; When the history of Software Development is written, XP will be given credit for re-introducing the most important factor; not tools nor process, but people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-8390317736139709917?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=UTdSzPU1WU0:KZqFy_tWKqY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=UTdSzPU1WU0:KZqFy_tWKqY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=UTdSzPU1WU0:KZqFy_tWKqY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=UTdSzPU1WU0:KZqFy_tWKqY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/UTdSzPU1WU0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/8390317736139709917/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/04/martin-fowler-alistair-cockburn-and.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8390317736139709917?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8390317736139709917?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/UTdSzPU1WU0/martin-fowler-alistair-cockburn-and.html" title="Martin Fowler, Alistair Cockburn, and Optimism" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/04/martin-fowler-alistair-cockburn-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8CQXkyeyp7ImA9WxFSEEQ.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-4563963552191370286</id><published>2010-04-12T12:21:00.000-05:00</published><updated>2010-04-12T12:21:00.793-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-12T12:21:00.793-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><title>Context as a commodity</title><content type="html">&lt;div class="Section1"&gt;&lt;div class="MsoNormal"&gt;How much context do you need to do your job?&amp;nbsp; Can we quantify context in any way?&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Jeff Atwood has mentioned that he doesn’t shut his machine down every night.&amp;nbsp; He wants his environment to be as he left it at the end of the previous coding session.&amp;nbsp; Getting all the apps, tools or other windows opened to the right place takes not only CPU time but mental energy, aka context.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Some jobs require no context, for example a bank teller can walk in to work on Tuesday and not need to remember any of the transactions that took place on Monday.&amp;nbsp; Contrast that with a novelist in the middle of writing a new book, let’s say writing the next chapter not editing anything.&amp;nbsp; They need to remember all the characters, their personalities, the existing story, and in what ways the plot threads are to interact in the new material.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Another good contrast is a professional athlete.&amp;nbsp; A pro baseball player doesn’t need to remember what happened in yesterday’s game in order to pitch a strike, hit a home-run, or execute a double-play.&amp;nbsp; The limited context that does appear has to do with the optimizing performance.&amp;nbsp; A pitcher does need to know the preferences and history of the batter who is at the plate, just like the batter needs to know if the pitcher has a wicked slider.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Companies want to be “green” these days and have instituted policies to shutdown computers overnight.&amp;nbsp; This may be pennywise and pound foolish. &amp;nbsp;Here’s why.&amp;nbsp; A consultant gets paid $50/hr and it takes 30 minutes to get their workspace ready after an overnight shutdown lasting from 5pm to 8am the next day, 15 hours.&amp;nbsp; A conservative energy estimate would be if electricity costs $0.25 a kilowatt hour multiplied by 15 hours for a cost of $3.75.&amp;nbsp; So $25 is spent trying to save $3.75.&amp;nbsp; That’s motivation to use the hibernate feature at a minimum. It also is a very simple way to quantify the cost of context.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Can we describe jobs by how much context is required?&amp;nbsp; If so, is there a relationship between&amp;nbsp; the amount of context needed and the average salary?&amp;nbsp; Those are interesting questions, maybe I’ll cover those in a later post.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-4563963552191370286?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=9w120gewPtA:trx6rwWz3dk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=9w120gewPtA:trx6rwWz3dk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=9w120gewPtA:trx6rwWz3dk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=9w120gewPtA:trx6rwWz3dk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/9w120gewPtA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/4563963552191370286/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/04/context-as-commodity.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4563963552191370286?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4563963552191370286?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/9w120gewPtA/context-as-commodity.html" title="Context as a commodity" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/04/context-as-commodity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEDQHo_fip7ImA9WxFTGE4.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-9158391927726753815</id><published>2010-01-21T09:30:00.004-06:00</published><updated>2010-04-09T13:44:31.446-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-09T13:44:31.446-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="process" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><category scheme="http://www.blogger.com/atom/ns#" term="language" /><title>Programmings Best Kept Secret</title><content type="html">Software development is often compared to engineering or construction which has a hidden and debatable assumption that the source code is the product.&amp;nbsp; One camp has declared that &lt;a href="http://c2.com/xp/TheSourceCodeIsTheDesign.html"&gt;source code is the design &lt;/a&gt;.&amp;nbsp;&amp;nbsp; Other camps declare that programming as a branch of applied mathematics; see Dijkstra's "&lt;a href="http://www.cs.virginia.edu/%7Eevans/cs655/readings/ewd498.html"&gt;uncomfortable truth&lt;/a&gt;" quotes. Extreme Programming as a &lt;a href="http://codewright.blogspot.com/2009/06/why-extreme-programming-fails.html"&gt;movement may have failed&lt;/a&gt;, it at least served as the flashpoint for a new examination of the nature of programming. Instead of arguing about engineering we can brag about how &lt;a href="http://www.agilemanifesto.org/"&gt;Agile&lt;/a&gt; we are or that we are &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;Software Craftsmen&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Programmers are not engineers, nor are they artists.&amp;nbsp; Even when they are compared to craftsmen,&amp;nbsp; the comparison is always with woodworkers or blacksmiths. Programmers are nothing of the sort, &lt;a href="http://codewright.blogspot.com/2009/09/software-as-literature.html"&gt;programmers are writers&lt;/a&gt;.&amp;nbsp; Danny Thorpe discusses how you might tell &lt;a href="http://dannythorpe.com/2009/06/29/software-as-literature/"&gt;what sort of literature your app may be&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Danny is on the right track but when it comes to software, there is an elephant in the room that needs to be discussed in the open.&amp;nbsp; Developers do not produce software, they write code.&amp;nbsp; This means that sometimes they need the logic skills of an engineer but just as often they need the communication skills of a poet.&amp;nbsp; Reading and writing, thinking about how to achieve a desired affect through the written word, those are the qualities of a writer.&amp;nbsp; It just so happens that the one of the chosen audiences is a&lt;a href="http://codewright.blogspot.com/2009/06/what-did-you-say.html"&gt; single-minded overly-literal pendantic polyglot idiot-savant&lt;/a&gt;, otherwise known as a computer.&amp;nbsp; The other audience is other humans that may or may not have to actually follow the instructions, they do have to understand them well enough to tell if the instructions are correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It would be useful to compare programming to other fields and see how the comparison holds up.&amp;nbsp; It is not a coincidence that the games industry has adopted the filmmaking model for the production of games. Good choices would be publishing a book, producing a movie, or creating a recipe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Programming as publishing&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programmers are the authors.&amp;nbsp; The compiler is the printing press.&amp;nbsp; Publishers are the companies that agree to fund the process in hopes of turning a profit.&amp;nbsp; Self publishing would be like creating training manuals for internal use; no profit is involved but the medium is appropriate for other reasons.&amp;nbsp; The book still needs to be edited, proofread, typeset, marketed, etc. &lt;a href="http://codewright.blogspot.com/2009/05/myth-of-code-construction.html"&gt;I've covered this ground before&lt;/a&gt; but there is still much to contemplate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Programming as filmmaking&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Filmmaking"&gt;Filmmaking &lt;/a&gt;is in interesting comparison because it deals with translating the written word into another medium. Programmers are the writers of the scripts and screenplays.&amp;nbsp; The producer is the stakeholder who desires the software. The director is the project lead.&amp;nbsp; Instead of actors and crew&amp;nbsp; we have the compiler which takes our instructions and executes whatever script of commands we provide; call it a screenplay or call it an application, the actions and actors my be different but it's still a set of commands given to actors to be performed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Programming as cooking&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Programmers create a recipe for a given dish.&amp;nbsp; The recipe is not the final product, the result of following the recipe is.&amp;nbsp; You don't buy a cookbook for the fabulous chocolate cake recipe, you buy it because you want to eat the cake.&amp;nbsp; In this case the compiler would be the tools available to the chef; pots and pans, utensils, and the stove/oven.&amp;nbsp; Having the right tools really helps but even the best oven won't correct a recipe that calls for 2 cups of vinegar for the sugar cookies.&amp;nbsp; Eventually software may survive the &lt;a href="http://yro.slashdot.org/article.pl?sid=09/02/25/232212"&gt;patent wars&lt;/a&gt; and finally be considered on par with a recipe; instructions to a cook in order to produce the desired product.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Software is&amp;nbsp; actually a mix of disciplines, all trying to contribute towards a common goal. The game industry may have it right, evidenced by them being to busy producing games and not endlessing debating whether their process is broken or &lt;a href="http://codewright.blogspot.com/2007/04/technology-is-harsh-mistress.html"&gt;seeking the latest silver bullet&lt;/a&gt;.&amp;nbsp; They use directors, producers, art and sound specialists, etc.&amp;nbsp; The compiler is their camera, used to capture the intent of the contributors; the CPU the silver screen for which to project the final product for consumption by the audience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-9158391927726753815?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=pgMP6am-kZ4:e7ZLpw1tXBw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=pgMP6am-kZ4:e7ZLpw1tXBw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=pgMP6am-kZ4:e7ZLpw1tXBw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=pgMP6am-kZ4:e7ZLpw1tXBw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/pgMP6am-kZ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/9158391927726753815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2010/01/programmings-dirty-little-secret.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9158391927726753815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9158391927726753815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/pgMP6am-kZ4/programmings-dirty-little-secret.html" title="Programmings Best Kept Secret" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2010/01/programmings-dirty-little-secret.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMGQXw4fSp7ImA9WxBREEQ.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-4821481657697803594</id><published>2009-12-29T08:37:00.003-06:00</published><updated>2009-12-29T08:37:00.235-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-29T08:37:00.235-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="expectations" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Of Rockstars and Bricklayers</title><content type="html">Today we're going to start with a thought experiment.&amp;nbsp; You are one of the better coders in your company.&amp;nbsp; All the proof I need is that you're reading this.&amp;nbsp; Ok, that may be a little self-serving but it is true that the better coders I know are always reading something about coding.&amp;nbsp; It might be a new language, or a new technique, a &lt;a href="http://stackoverflow.com/"&gt;programming question and answer site&lt;/a&gt;, or even a site that likes to &lt;a href="http://thedailywtf.com/"&gt;rag on bad code&lt;/a&gt;.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Based on how many &lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;Code Monkeys&lt;/a&gt; you know, it's easy to figure yourself in the top half of programmers, a 'good' coder if you will. An assumption that is easy to make is that the higher your productivity the higher your pay.&amp;nbsp; Is this true?&amp;nbsp; If you base it on simple experience, the answer is no.&amp;nbsp; It's too easy to get a job right out of college and get mediocre raises and then find yourself interveriewing candidates for openings in your own group where you have to offer 'market rates' to attract anybody.&amp;nbsp; If you've been there for 5+ years, given a company desperate to hire warm bodies, it doesn't take much for the new guy to be making 15-25% more than you even if he is a two-finger typist and can't spell SQL if you spotted him the 'S' and the 'Q'.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, I'm happy where I am but it didn't take much to trigger my bad habit of thinking up 'what-ifs'.&amp;nbsp; The Stackoverflow podcast has been a good one for this sort of pondering.&amp;nbsp; Jeff and Joel have enough real-world experience to bring a ton of wisdom to the discussion on programming as it's own topic and in episode #42 &lt;a href="http://itc.conversationsnetwork.org/shows/detail4017.html"&gt;discuss underperforming programmers&lt;/a&gt;.&amp;nbsp; I'd been reading about how star actors can command huge salaries based on their past work and the expected effect on the box-office if their name appeared on the marquee.&amp;nbsp; That major-league sports can have individuals who make 10-times what the lowest paid athlete makes on a single team, it doesn't take much to ask why programming doesn't see the same effect.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
I submitted this as a question to the Stackoverflow podcast which they spent a good 10 minutes on in &lt;a href="http://itc.conversationsnetwork.org/shows/detail4328.html%20%20-%20Transcript%20wiki:%20https://stackoverflow.fogbugz.com/default.asp?W29113"&gt;episode 77&lt;/a&gt;. It didn't fit so well as a &lt;a href="http://stackoverflow.com/questions/1767957/paying-great-programmers-more-than-average-programmers"&gt;question on Stackoverflow itself&lt;/a&gt;, I suspect the culprit is the lack of code snippets. Interestingly enough I discovered the podcast when they were at episode 65 and decided to start listening back at #1 and was up to around #42 when I decided to contribute my question.&amp;nbsp; So anyway, when I saw the summary for #77, I didn't have the audio handy so jumped over to the&lt;a href="https://stackoverflow.fogbugz.com/default.asp?W29113"&gt; transcript wiki for #77&lt;/a&gt; and read the transcript.&amp;nbsp; It was a pleasant surprise at how engaged they were and that the question wasn't dismissed out-of-hand.&amp;nbsp; When I downloaded the audio, to hear their discussion it only reinforced my reaction. &lt;br /&gt;
&lt;br /&gt;
The range of talent can be mighty wide even if there is some disagreement on the empirical numbers.&amp;nbsp; Joel Spolsky talks about the &lt;a href="http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html"&gt;difficulty in finding great programmers&lt;/a&gt;, and uses similiar metaphores in a&lt;a href="http://www.joelonsoftware.com/articles/HighNotes.html"&gt; comparison with opera singers&lt;/a&gt;. Jeff has a similar take on &lt;a href="http://www.codinghorror.com/blog/archives/001214.html"&gt;Coding Horror&lt;/a&gt;.&amp;nbsp; Finding great talent is hard because there are only so many people who can do what you need done. &lt;br /&gt;
&lt;br /&gt;
There have been some good discussions that has surfaced.&amp;nbsp; &lt;a href="http://www.johndcook.com/blog/2009/12/23/why-programmers-are-not-paid-in-proportion-to-their-productivity/"&gt;John Cook&lt;/a&gt; has a good argument based on lack of meaningful metrics.&amp;nbsp; It's a question that has been around for awhile.&amp;nbsp; &lt;a href="http://www.revsys.com/about/bio/frankwiles.html"&gt;Frank Wiles&lt;/a&gt; makes the claim that hiring average (or below) programmers&lt;a href="http://www.revsys.com/blog/2007/aug/05/a-guide-to-hiring-programmers-the-high-cost-of-low-quality/"&gt; actually costs your company money&lt;/a&gt; (&lt;a href="http://www.revsys.com/blog/2007/aug/08/followup-to-a-guide-to-hiring-programmers/"&gt;followup post&lt;/a&gt;). Obviously when a company says they only hire the to 10%, they are deluding themselves or at least paying lip-service to wanting good programmers.&amp;nbsp; Joel does a great job of &lt;a href="http://www.joelonsoftware.com/items/2005/01/27.html"&gt;shattering that particular illusion&lt;/a&gt;.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
What about sales? In some fields top salesmen can bring home seven-figure incomes so we know that the wide range of incomes aren't limited to Hollywood and the big leagues.&amp;nbsp; &lt;a href="http://baselinescenario.com/2009/12/24/salespeople-and-programmers/"&gt;James Kwak&lt;/a&gt; picks up on John's post and supports Joel and Jeff contention that paying the top performers much more than the average, outside of easily measured areas like sales and movies, has a corrosive effect on the group and the best coders end up leaving for greener pastures while the dregs hang on for dear life or are eventually pushed out.&amp;nbsp; I can't disagree.&amp;nbsp; It seems that if you are underpaid you have to ask yourself Ann Lander's question, "Am I better off leaving or staying put?"&amp;nbsp; Just realize that it's no use complaining to the company, the status quo works for them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-4821481657697803594?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Xo1lswtbItU:IuySUNifhoM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Xo1lswtbItU:IuySUNifhoM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=Xo1lswtbItU:IuySUNifhoM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=Xo1lswtbItU:IuySUNifhoM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/Xo1lswtbItU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/4821481657697803594/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/of-rockstars-and-bricklayers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4821481657697803594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4821481657697803594?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/Xo1lswtbItU/of-rockstars-and-bricklayers.html" title="Of Rockstars and Bricklayers" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/of-rockstars-and-bricklayers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEEQXgyeyp7ImA9WxBSFUw.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-330837015587151062</id><published>2009-12-21T14:53:00.007-06:00</published><updated>2009-12-22T13:36:40.693-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-22T13:36:40.693-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Life's Too Short To Work For Clowns.</title><content type="html">One of the cliche's of our culture is the little boy who rebels against his parents and dreams of running away to join the circus.  His mind is filled with the glamor of the Big Top, the exotic animals, the independence of wandering the country from one town to the next.  He hasn't really thought about what it means to work in a circus.  The Ringmaster did many menial jobs before arriving in the spotlight.  The animals have to be cared for; double the time it takes to feed them when you consider both ends of the animal.  Traveling from town to town may sound romantic until you realize it means you spend more time traveling than in one place, lots of lonely nights on the road regardless of the weather or climate because 'the show must go on" after all.  The life of a circus is not just popcorn, parades, and pretty girls.&lt;br /&gt;
&lt;br /&gt;
I ran across a quote in Christopher Duncan's, "The Career Programmer: Guerilla Tactics for an Imperfect World" that made me both laugh and sigh.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;You need to consider one additional thing when trying to convince management the current approach to developing software needs improvement.  What do you do if non of this sways them and they insist on continuing with chaotic development approaches that consistently create disasters and stress? Update your resume. Life's too short to work for clowns.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
So the question becomes, do you work for clowns?  Does the development process at your company make a circus look like a well-oiled machine? You might work for a clown.&lt;br /&gt;
&lt;br /&gt;
I plan on putting together a complement to &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test&lt;/a&gt; where instead of a list of things a company does before you consider working for them, The Clown Test would be a list of things that indicate you might work for clowns.&lt;br /&gt;
&lt;br /&gt;
This might describe your boss,&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;if he thinks an &lt;a href="http://codewright.blogspot.com/2009/04/estimate-by-any-other-name.html"&gt;estimate is a promise&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;if he thinks &lt;a href="http://codewright.blogspot.com/2009/04/programming-as-social-activity.html"&gt;developers are interchangeable &lt;/a&gt;with no effect on the schedule,&lt;/li&gt;
&lt;li&gt;if he thinks its ok for the lead developer to &lt;a href="http://codewright.blogspot.com/2009/06/why-extreme-programming-fails.html"&gt;publicly berate a junior developer&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;if he thinks &lt;a href="http://codewright.blogspot.com/2006/08/compost-heap-theory-of-development.html"&gt;requirements documents are a waste of time&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;if he thinks the &lt;a href="http://codewright.blogspot.com/2007/01/have-design-will-travel.html"&gt;only place for designers&lt;/a&gt; is at a fashion show,&lt;/li&gt;
&lt;li&gt;if he thinks he just needs &lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;one good programmer&lt;/a&gt; who can code anything,&lt;/li&gt;
&lt;li&gt;if he thinks that people &lt;a href="http://codewright.blogspot.com/2009/04/chapter-5-programming-team.html"&gt;whine too much about teamwork&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;if he believes in &lt;a href="http://codewright.blogspot.com/2007/04/technology-is-harsh-mistress.html"&gt;Silver Bullets&lt;/a&gt;,&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
he might be a Tech Clown.&lt;br /&gt;
&lt;br /&gt;
My apologies to Jeff Foxworthy.&lt;br /&gt;
&lt;br /&gt;
When you run across a good example of a Tech Clown, send 'em my way and I'll add it to the list for every one's enjoyment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-330837015587151062?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=cv50L7iqvBI:t7tSNegKZ58:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=cv50L7iqvBI:t7tSNegKZ58:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=cv50L7iqvBI:t7tSNegKZ58:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=cv50L7iqvBI:t7tSNegKZ58:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/cv50L7iqvBI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/330837015587151062/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/lifes-too-short-to-work-for-clowns.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/330837015587151062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/330837015587151062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/cv50L7iqvBI/lifes-too-short-to-work-for-clowns.html" title="Life's Too Short To Work For Clowns." /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/lifes-too-short-to-work-for-clowns.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQMQX85fyp7ImA9WxBTFUk.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-8647214322044135110</id><published>2009-12-11T09:13:00.000-06:00</published><updated>2009-12-11T09:13:00.127-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-11T09:13:00.127-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="expectations" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="traits" /><title>The Myth of the Aging Developer</title><content type="html">I question that I've heard throughout my career is, "&lt;a href="http://stackoverflow.com/questions/972611/old-developers-any-future"&gt;What happens to older software developers?&lt;/a&gt;"  The danger with this question is when the discussion turns to the implied version which is "The lack of older developers means that it is a young persons game." Nothing could be further from the truth..&lt;br /&gt;&lt;br /&gt;My wife and I are both developers. We have both been working as developers for 15+ years.  One thing we noticed was that there were a lot of people working as developers who really shouldn't be, they didn't have the aptitude, interest or sometimes even the background.  It would be easy to dismiss the problem as a &lt;a href="http://codewright.blogspot.com/2005/09/education-of-codewright.html"&gt;lack of proper education&lt;/a&gt; but that doesn't explain the developers who lack a CS degree but who can code circles around veteran devs.  Those folks usually decide that programming is not for them and move on to different job.  Some go into management, some become analysts, while others change careers completely.&lt;br /&gt;&lt;br /&gt;What's left? The ones who are passionate about development and are interested in doing it right.  They love learning new stuff and don't gripe about how things used to be in "The good ole' days."  They might be grumpy but they usually know their stuff.&lt;br /&gt;&lt;br /&gt;The main problem would be in finding management who doesn't have a pre-conceived notion about what makes a good developer.  If they feel that only the younger ones have the stamina to keep up with the pace, I'd wonder whether those same employers were the same ones who believe that the 'Deathmarch' style of project management is standard operating procedure.  They'd rather grind through fresh-meat developers (&lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;Code-Monkeys&lt;/a&gt; anyone?) than listen to the experienced ones and change their development process much less change their &lt;a href="http://codewright.blogspot.com/2008/11/tale-of-two-managers.html"&gt;management style&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lastly, I've noticed that doing nothing but coding holds less business value than being able to communicate with customers, users, management, and vendors.  One reason you start coding less is because finding answers to ambiguous requirements takes more experience and provides more payback to the business.&lt;br /&gt;&lt;br /&gt;My advice, to those who worry about their coding future, would be to find a place where they need experienced developers to help with the overall task of creating or maintaining software, that also gives you the opportunity to code regularly. That way you can have the time to keep up with industry changes while taking advantage of your understanding of software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-8647214322044135110?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=D9A4_V7g2Ec:H9ZyjE_TYEg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=D9A4_V7g2Ec:H9ZyjE_TYEg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=D9A4_V7g2Ec:H9ZyjE_TYEg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=D9A4_V7g2Ec:H9ZyjE_TYEg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/D9A4_V7g2Ec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/8647214322044135110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/myth-of-aging-developer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8647214322044135110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8647214322044135110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/D9A4_V7g2Ec/myth-of-aging-developer.html" title="The Myth of the Aging Developer" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/myth-of-aging-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUMQXw5eyp7ImA9WxBTEko.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-9163235667866659844</id><published>2009-12-08T07:18:00.000-06:00</published><updated>2009-12-08T07:18:00.223-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-08T07:18:00.223-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="history" /><category scheme="http://www.blogger.com/atom/ns#" term="science" /><title>What I learned about Cryptography</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ikmwGzALbOc/SwzDmAgFl_I/AAAAAAAAAPk/3kF8ODCA8YA/s1600/Scytale1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_ikmwGzALbOc/SwzDmAgFl_I/AAAAAAAAAPk/3kF8ODCA8YA/s320/Scytale1.jpg" alt="" id="BLOGGER_PHOTO_ID_5407912310302152690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In preparing a presentation on cryptography for a graduate class, I was surprised by what I learned. &lt;br /&gt;&lt;br /&gt;Cryptography has been used from ancient times through the Industrial Age to the modern day.  It's been used for military, diplomatic, criminal, and commercial purposes.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;In the simplest and oldest form, Greeks used strips of paper wrapped around sticks of a certain size called a scytale - rhymes with Italy.&lt;br /&gt;&lt;br /&gt;Julius Caesar is one of the first known users of the simple letter substitution method.  The modern day cousin is ROT13.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the letters of the alphabet, that not a word could be made out. If anyone wishes to decipher these, and get at their meaning, he must substitute the fourth letter of the alphabet, namely D, for A, and so with the others.&lt;br /&gt;—Suetonius, Life of Julius Caesar &lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;Hiding messages (steganography) is as old as the ancients.  An example would be a tattoo on a shaved head. The hair would grow back hiding the tattoo.  A modern example is hiding text in the pixels of a digital image.&lt;br /&gt;&lt;br /&gt;Charles Babbage is a name taught in every into to computer science class as a pioneer in computing machines.  I never knew that he helped the English during the Crimean War by breaking cryptological codes.&lt;br /&gt;&lt;br /&gt;Mary "Queen of Scots" was caught when one of her secret codes were broken.&lt;br /&gt;&lt;br /&gt;The Voynich Manuscript may have been an elaborate hoax to defraud a king, who had a interest in mysteries like coded messages, out of a large amount of gold.&lt;br /&gt;&lt;br /&gt;A mob boss used encrypted messages to give out orders to his lieutenants and was arrested when the police cracked his amateur code.&lt;br /&gt;&lt;br /&gt;Cryptography is thousands of years old and is used all around us everyday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-9163235667866659844?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=3u_MEU5P3_g:NDzFimpAZI0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=3u_MEU5P3_g:NDzFimpAZI0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=3u_MEU5P3_g:NDzFimpAZI0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=3u_MEU5P3_g:NDzFimpAZI0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/3u_MEU5P3_g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/9163235667866659844/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/what-i-learned-about-cryptography.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9163235667866659844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/9163235667866659844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/3u_MEU5P3_g/what-i-learned-about-cryptography.html" title="What I learned about Cryptography" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ikmwGzALbOc/SwzDmAgFl_I/AAAAAAAAAPk/3kF8ODCA8YA/s72-c/Scytale1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/what-i-learned-about-cryptography.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8BRnkzfCp7ImA9WxBTFUk.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-2395493670316395233</id><published>2009-12-03T08:52:00.007-06:00</published><updated>2009-12-11T08:14:17.784-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-11T08:14:17.784-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="traits" /><title>Programmers - Poets or Mathematicians?</title><content type="html">Programming software is much like writing a story.  Any given story can be told in a near-infinite number of ways and those who practice the craft will spend just as much time, if not more, arguing over the style of a work, as if their subjective opinion can suddenly become objective fact. Usually this leads to a contest of "If you don't agree with me, I'll just keep talking until you see reason" or otherwise known as talking the subject to death.&lt;br /&gt;&lt;br /&gt;I thought I'd shine some light on an example of this issue in programming.  There is a never-ending debate in programming circles about the 'proper' way to write code that creates some true/false decision.  Stackoverflow has a &lt;a href="http://stackoverflow.com/questions/423823/whats-your-favorite-programmer-ignorance-pet-peeve/424005#424005"&gt;good example of this&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;div class="post-text"&gt;&lt;p&gt;My personal pet peeve (petty but my teeth grind everytime I see it) is verbosely setting booleans, e.g.&lt;/p&gt;  &lt;pre class="prettyprint"&gt;&lt;code&gt;&lt;span class="kwd"&gt;bool&lt;/span&gt;&lt;span class="pln"&gt; isValid&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;percentage &lt;/span&gt;&lt;span class="pun"&gt;&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt; percentage &lt;/span&gt;&lt;span class="pun"&gt;&lt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;100&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;  isValid &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;true&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;else&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;  isValid &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;false&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;p&gt;whats wrong with &lt;/p&gt;  &lt;pre class="prettyprint"&gt;&lt;code&gt;&lt;span class="kwd"&gt;bool&lt;/span&gt;&lt;span class="pln"&gt; isValid &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; percentage &lt;/span&gt;&lt;span class="pun"&gt;&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt; percentage &lt;/span&gt;&lt;span class="pun"&gt;&lt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;100&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;p&gt;It's soooooo much more succinct and easier on the eye&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="post-text"&gt;&lt;p&gt;&lt;/p&gt; &lt;/div&gt;Even though the single line version isn't the most complex, different people read through code in different ways. A single expression can be easily parsed by people who have a math background or are experienced coders. That's not the point. The expanded version reads more like a sentence than a formula. It's easy to forget that there are plenty of coders without a background in math. It really comes back to the preferred style of the &lt;i&gt;reader&lt;/i&gt;. Do they prefer reading expressions and formulae or something more like human speech.&lt;br /&gt;&lt;br /&gt;Homer's &lt;span style="font-style: italic;"&gt;The Illiad&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;The Oddessy&lt;/span&gt; are ancient works dedicated to expressions of speech. They were originally poems that were passed down in an oral tradition and meant to be sung instead of read.&lt;br /&gt;&lt;br /&gt;Euclid's &lt;span style="font-style: italic;"&gt;Elements&lt;/span&gt; is a work dedicated to expressions of logic. It covers objective proofs and unambiguous facts and is the beginning of the mathematical tradition, if you will, of rigorous scientific thinking.&lt;br /&gt;&lt;br /&gt;The problem we face in software is code is a form of human expression, with all the imprecision that entails, attempting to communicate with the utterly logical CPU; programmers will be forever trying to translate "An Ode to the Machine" into the Pythagorean Theorem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-2395493670316395233?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=NpCyESloCMs:idDERmIVIb4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=NpCyESloCMs:idDERmIVIb4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=NpCyESloCMs:idDERmIVIb4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=NpCyESloCMs:idDERmIVIb4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/NpCyESloCMs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/2395493670316395233/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/programmers-poets-or-mathematicians.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2395493670316395233?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2395493670316395233?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/NpCyESloCMs/programmers-poets-or-mathematicians.html" title="Programmers - Poets or Mathematicians?" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/programmers-poets-or-mathematicians.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNQ3YzfSp7ImA9WxNaGEo.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-8129398858782916678</id><published>2009-12-01T08:27:00.007-06:00</published><updated>2009-12-03T13:58:12.885-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T13:58:12.885-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><title>If Gulliver Were a Designer</title><content type="html">The term 'Design' gets thrown around a lot in software developer circles.  There are constant flamewars over favorite techniques and battles over what good design really entails.  When those arguments start getting too &lt;a href="http://en.wikipedia.org/wiki/Ad_hominem"&gt;ad hominem&lt;/a&gt; figure out whether the speaker is a &lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;Code Monkey &lt;/a&gt;before giving them much credence. Since I've already braved the waters, see "&lt;a href="http://codewright.blogspot.com/2007/01/have-design-will-travel.html"&gt;Have Design Will Travel&lt;/a&gt;" or "&lt;a href="http://codewright.blogspot.com/2006/08/age-of-design-review.html"&gt;The Age of the Design Review&lt;/a&gt;",  instead of safely avoiding the issue, I'm going to bravely (or foolishly) join the fray.&lt;br /&gt;&lt;br /&gt;Realize that there is more than one type of 'Design'.  Design in the large turns into architecture and is something that really only comes with experience. Designing at the lower levels, say at the individual class/object level is easier to cover.  Today I'm writing about design in the small vs the large; &lt;a href="http://en.wikipedia.org/wiki/Gulliver%27s_Travels"&gt;Lilliput vs. Brobdingnag&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The issues with designing a class is the same regardless of platform or language.  The key is whether an object should be autonomous or whether it is better for any given behavior to be spread out among objects with limited scope and distributed responsibility.&lt;br /&gt;&lt;br /&gt;For each class the answer might be different.  We end up with a spectrum along which we can place classes based upon the &lt;span style="font-weight: bold;"&gt;Density of Responsibility&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;             (Level of responsibility for behavior)&lt;br /&gt;        Autonomy - - - - - - - - - - -  - - Dependence&lt;br /&gt;     High&lt;br /&gt; C      -   [god object]                [spaghetti]&lt;br /&gt; l      -&lt;br /&gt; a      -&lt;br /&gt; s      -                                &lt;br /&gt; s      -           &lt;br /&gt;        -                  &lt;br /&gt; s      -&lt;br /&gt; i      -&lt;br /&gt; z      -&lt;br /&gt; e      -  [template]                   [framework]&lt;br /&gt;      low&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Let's say you favor letting the class perform all the behaviors itself, or as many as you can.  Starting on the left side of this graph, when you make your class more autonomous, the size of the class will grow unless you continuously refactor it to make it more generic.  This leads to a &lt;span style="font-weight: bold;"&gt;template&lt;/span&gt;.  If no refactoring is done, the tendency is for the class to become more "&lt;span style="font-weight: bold;"&gt;god-like&lt;/span&gt;" because if there is some behavior it needs, it has a method for that - it can do anything and everything.  The number of fields and methods grow and soon become both unmanageable and unavoidable.   Since the class already does so much, coders would rather add to the monstrosity than try to piece it apart and cut the Gordian knot.&lt;br /&gt;&lt;br /&gt;The right side of the graph has classes that depend on other classes to a large degree.  If the dependency level is high but the individual class is small, that is a sign of a &lt;span style="font-weight: bold;"&gt;framework&lt;/span&gt;; each class doesn't do much and requires lots of dependent classes to accomplish some function.  On the other hand, a highly-dependent class that also has a large amount of code is a sign that the class is full of &lt;span style="font-weight: bold;"&gt;spaghetti&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The key to this question is to determine where you feel more comfortable on the graph.  In any event, individual classes will end up spread out on the graph unless some organizational principle is applied, which is how you can achieve the results of &lt;span style="font-weight: bold;"&gt;Template&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;Framework&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Having just written that, I would say that there is a correlation between class size and degree of organization.  Robert C. Martin (or "Uncle Bob") covers similar ground with package dependencies in his very thorough paper on &lt;a href="http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf"&gt;Design Principles and Design Patterns&lt;/a&gt;[pdf]. &lt;a href="http://www.ibm.com/developerworks/java/library/j-ap01117/"&gt;JDepend&lt;/a&gt; is an implementation of the ideas behind the graph on page 26 and complements &lt;a href="http://www.ibm.com/developerworks/java/library/j-ap01117/"&gt;static analysis tools&lt;/a&gt; such as &lt;a href="http://checkstyle.sourceforge.net/"&gt;Checkstyle&lt;/a&gt; and &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-8129398858782916678?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=fVh08W9P4-o:GPcrJRGgOF4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=fVh08W9P4-o:GPcrJRGgOF4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=fVh08W9P4-o:GPcrJRGgOF4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=fVh08W9P4-o:GPcrJRGgOF4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/fVh08W9P4-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/8129398858782916678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/12/if-gulliver-were-designer.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8129398858782916678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8129398858782916678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/fVh08W9P4-o/if-gulliver-were-designer.html" title="If Gulliver Were a Designer" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/12/if-gulliver-were-designer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAAQH09cSp7ImA9WxNUEUs.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-3388151721218065037</id><published>2009-11-02T05:19:00.001-06:00</published><updated>2009-11-02T05:19:01.369-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-02T05:19:01.369-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lawsofpower" /><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><title>Extreme Programming is People</title><content type="html">There has been an enormous about written in the blogosphere on ways to improve how we write software. Much of the virtual ink spilled on the Internet about &lt;a href="http://codewright.blogspot.com/2009/06/why-extreme-programming-fails.html"&gt;Extreme Programming&lt;/a&gt;, or Agile, or SCRUM, gathers at opposite ends of the spectrum.  Some focuses on how those practices make things better, usually in a overly enthusiastic way which invites the curt dismissal as nothing more than hype and hyperbole.  Others constantly remind everyone that they've tried it and it didn't work which invites observations about anti-social programmers.&lt;br /&gt;&lt;br /&gt;Both camps need to call a truce. They'll get much farther - and be happier - if they stop throwing grenades at each other and start talking to each other.&lt;br /&gt;&lt;br /&gt;We can get both sides to agree that the previous ways of software development is problematic and certainly non-optimal, at least if the goal is to develop acceptable software in a reasonably quick, consistent, and effective manner.&lt;br /&gt;&lt;br /&gt;Once we've agreed on common goals, we can discuss typical obstacles and plan ways to avoid or mitigate them. One of the biggest problems, and least discussed, is how people affect the processes in which they participate.  There is a good article by Alistair Cockburn about this phenomenon. His paper is titled "&lt;a href="http://alistair.cockburn.us/Characterizing%20people%20as%20non-linear,%20first-order%20components%20in%20software%20development"&gt;Characterizing people as non-linear, first-order components in software development&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;The Story of Joe and Al&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So let's examine more of the laws and how they affect an effort to introduce Extreme Programming.  People who use the &lt;a href="http://www2.tech.purdue.edu/cgt/courses/cgt411/covey/48_laws_of_power.htm"&gt;48 Laws&lt;/a&gt; as a handbook for how to live their lives are usually label as evil, justifiably so.  I don't want this discussion to degenerate into name calling or dismissed because of guilt by association so let's create two personas as our antagonist and protagonist.  We'll call the willing and manipulative one Joseph (think Stalin) and the unwitting and hapless one Al (think Flowers for Algernon).&lt;br /&gt;&lt;br /&gt;Law #1 "Never Outshine The Master". Humans are sensitive about losing face in front of others.  Joseph uses this to his advantage to keep from attracting the wrong kind of attention.  Al is proud of his achievements and doesn't understand why others don't share in his celebration. &lt;br /&gt;&lt;br /&gt;Law #2 "Never put   too Much Trust in Friends, Learn how to use Enemies" - Joseph keeps reminding himself to watch out for number one.  He doesn't want to put his fate into the hands of others which means fewer allies but also fewer fair-weather friends. Al, on the other hand, cannot comprehend the idea that people have hidden motives even while having repeated instances of being taken advantage of. &lt;br /&gt;&lt;br /&gt;Law #3 "&lt;span style="font-style: normal;font-size:100%;" &gt;Conceal   your Intentions"&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;is "Do unto others before they have a chance to do it to you". Keep the knife hidden from your intended victim. Joseph believes that life is a &lt;a href="http://en.wikipedia.org/wiki/Zero-sum"&gt;zero-sum game&lt;/a&gt;. Since he values himself over all others, he won't lose any sleep taking what he wants so he'll have more.  He's interested in power and control, if he takes it from you it means you'll be powerless to respond after his power grab is fate de'compli. Al doesn't have the mental capacity to think one thing while saying or acting another.  &lt;a href="http://en.wikipedia.org/wiki/Nineteen_Eighty-Four"&gt;George Orwell's "Doublespeak"&lt;/a&gt; would be a foreign concept.&lt;br /&gt;&lt;br /&gt;Law #7 "Get others   to do the Work for you, but Always Take the Credit". Some &lt;a href="http://stackoverflow.com/questions/1205191/what-are-things-that-make-a-programmers-life-miserable/1237117#1237117"&gt;poor soul&lt;/a&gt; on &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; called this a "Seagull Manager - a scavenger who takes all the credit for your hard earned work and hangs around you like a bad smell." This will be a common behavior for Joseph who lacks scruples and thinks those who let him get away with it deserve to have their credit stolen.  Al believes what society preaches in public, the value of hard work, work hard and keep your nose clean and you'll get what's coming to you, etc.  He has the pride of the workman where good work will be recognized and rewarded. Combine that with no ability to detect deceit in others and you end up with someone who becomes the pawn of others. Naively believing the promises of their antagonists.&lt;br /&gt;&lt;br /&gt;You can't approach a social situation as if everyone has the same motivations.  Workplaces have plenty of Josephs blending in waiting for any situation to turn to their own personal advantage,  and Algernons trying in vain to be accepted.  If we don't recognize that, we'll be like farmers watering their crops with beer, "It tastes good to me so it must also be good for growing corn."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-3388151721218065037?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=N1_f9DivTQ4:SDlOAYA2G2Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=N1_f9DivTQ4:SDlOAYA2G2Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=N1_f9DivTQ4:SDlOAYA2G2Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=N1_f9DivTQ4:SDlOAYA2G2Q:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/N1_f9DivTQ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/3388151721218065037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/11/extreme-programming-is-people.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3388151721218065037?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3388151721218065037?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/N1_f9DivTQ4/extreme-programming-is-people.html" title="Extreme Programming is People" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/11/extreme-programming-is-people.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QNSHs-eCp7ImA9WxNVF0k.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-5800207585596034709</id><published>2009-10-28T06:34:00.002-05:00</published><updated>2009-10-28T09:49:59.550-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T09:49:59.550-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>Chapter 5 - The Programming Team</title><content type="html">This continues &lt;a href="http://codewright.blogspot.com/2009/02/review-psychology-of-computer.html"&gt;my review&lt;/a&gt; of "The Psychology of Computer Programming" by Gerald M. Weinberg.&lt;br /&gt;&lt;br /&gt;So far we've had individual programmers either working solo or in an environment where other programmers work but on separate tasks.  As long as a single person can maintain the conception of the program, conflict resolution involves the thinking of a single individual, regardless how much advice is available or heeded.  When a problem is too large for one person to hold in their mind at once, the scale of the problem goes up due to the increasing communication needs but is now one of a different kind. In this second case,&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"conflicting technical demands are translated into potential interpersonal conflicts, and a social mechanism must be formed to resolve them"&lt;/blockquote&gt;This is part of the territory.  Two people with solutions that are mutually exclusive.  Programmers are proud of their intelligence and are more than willing to argue their side.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;How A Team Forms&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;"As a rough rule, three programmers organized into a team can do only twice the work of a single programmer of the same ability"&lt;/blockquote&gt;I'm no longer as convinced of this as I once was.  It really depends on how well defined the separation is between the modules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Establishing And Accepting Goals&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;"Social psychologists have verified in other contexts that failure of one or more members to share the group goals affects the group performance -- not only through that member's share but through a reduced performance on the part of the others, for they invariably perceive the division within the group or the indifference of one of the members."&lt;/blockquote&gt;A non-programming example of this is when football teams get a new coach; the TV pundits like to use the phrase "They've bought into the new system" meaning that the players have taken the coaches goals for their own. A common programming example you might see in a development shop is where the current toolset and technology stack used is from Microsoft and there is that one guy who keeps muttering under his breath that "Microsoft sucks".  His lack of cooperation will be felt by the rest of the team.  The result may be that they avoid him instead of sharing the new trick they learned to solve some daily annoyance.  &lt;a href="http://codewright.blogspot.com/2009/06/why-extreme-programming-fails.html"&gt;No one wants to pair-program with him&lt;/a&gt;.  The price being paid, at a minimum,  is the reduced productivity of the frustrated Microsoft-hater.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The Team In Crisis&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;"The replacement of a leader--or any team member--is probably the most frequent and typical crisis in the life of a team.  The effect of adding or removing a member depends quite sensitively on the group structure, and many a manager has been unpleasantly surprised at the change in performance resulting from the removal or addition of an 'insignificant' group member. "&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;If we need proof that programming is a social activity, we need look no further.  Unless you are the sole programmer working at a company or on a project, there will always be a social aspect to what you do.  I'll go even farther and say that unless you are the only person who will use the application, there will inevitably be people involved, from the person who asked you to write the app to the person who will be using the app.&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;"A member who is competent but who does not get along with the others can be an even more serious problem for the democratic group than an out-and-out incompetent. In an authoritarian group, such a member would not have much contact with others on a working basis anyway, so as long as he gets along adequately with the leader, he presents no particular problem. Indeed, some programmers prefer to work under a strong, centralized leader in order that they do not have to socialize with their fellow workers. But in a democratic team, an antisocial member cuts lines of communications and is a constant impediment to consensus in team meetings."&lt;/blockquote&gt;&lt;br /&gt;Sometimes we are &lt;a href="http://codewright.blogspot.com/2009/06/we-have-met-enemy.html"&gt;our own worst enemy&lt;/a&gt;.  If we want to stay our of our own way, we need to remember in software development,  &lt;a href="http://alistair.cockburn.us/Characterizing%20people%20as%20non-linear,%20first-order%20components%20in%20software%20development"&gt;people are the biggest cause of failure&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Summary&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Questions&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;For Managers:&lt;br /&gt;&lt;br /&gt;- Are your hiring practices such that you get more uniformity on teams that you would like? When making up teams, do you try to see that a good "mix" of people is on each one, or do you strive in the opposite direction?&lt;br /&gt;&lt;br /&gt;- Do you ever do things to try to inflate the appearance of your technical competence in front of the people who work for you? Describe some of these incidents, and also some incidents in which it was discovered that your technical competence was in at least one respect inferieor to one of the people who work for you.  What were the consequences of that discovery, and do they justify attempting to cover up?&lt;br /&gt;&lt;br /&gt;- In setting your own working goals, what part is set by what is passed down from above, and what part is set by what comes up from below? Are you satisfied with this arrangement, or would you like to alter it in some ways?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For Programmers:&lt;br /&gt;&lt;br /&gt;- What part of programming work do you do best? Are you permitted to contribute that best part of your work to your team, and is it generally recognized that it is the best part of your work?&lt;br /&gt;&lt;br /&gt;- Has your manager ever done anything to make you doubt his honesty? If so, describe the incident, what ultimately happened to your doubt, and how your work was affected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-5800207585596034709?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=_VXxv3nk8CA:B2C5dV_XVeM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=_VXxv3nk8CA:B2C5dV_XVeM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=_VXxv3nk8CA:B2C5dV_XVeM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=_VXxv3nk8CA:B2C5dV_XVeM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/_VXxv3nk8CA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/5800207585596034709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/04/chapter-5-programming-team.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/5800207585596034709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/5800207585596034709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/_VXxv3nk8CA/chapter-5-programming-team.html" title="Chapter 5 - The Programming Team" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/04/chapter-5-programming-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04ARHo7eyp7ImA9WxNVGUk.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-3869833807136960496</id><published>2009-10-01T09:09:00.006-05:00</published><updated>2009-10-30T17:32:25.403-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-30T17:32:25.403-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title>Peanut Butter Programming</title><content type="html">When I first started messing with dynamic web pages it was using Perl and CGI. It was fun at first getting a page to respond based on some algorithm. It was also easy to overlook the growing mound of HTML strings embedded in your program.  It soon became apparent that this approach doesn't scale very well.  Keeping track of which tag needed to be closed and when was too much like keeping track of dynamic memory allocations in C.&lt;br /&gt;&lt;br /&gt;Java came along with Java Servlet Pages (JSPs) and it seemed like a huge improvement.  By inverting the relationship between code and HTML, you didn't have to have your HTML all strung out in little bits in the program.  When you wanted to include some program logic in your page, you had two choices: write an extension so your logic could be expressed like an HTML tag, or you could embed it as a code-snippet directly in with the HTML.  While there were plenty of examples of how to create your own tags, the overwhelming amount of JSP code I've seen took the other approach. To the extreme.  When some behavior was needed in multiple places, sometimes it refactored into a common file and then referred to from multiple pages. Other times (which translates to whenever possible), it was copied and pasted around with the justification of "I just need it to work".  The result was a file with little bits of program strung out through your HTML.  Sometimes mixing two things can prove to be a good thing. remember the the TV commercial for peanut butter cups? "You have your peanut butter in my chocolate! No, you have your chocolate in my peanut butter!"  Unlike that TV commercial, mixing HTML and code is a recipe for heartburn. Peanut butter may be tasty but will stick to everything it touches and you'll end up with a greasy mess to clean up if you're not careful. That's why I call this "Peanut Butter Programming".&lt;br /&gt;&lt;br /&gt;Why do developers keep using approaches like 'cut-n-paste' even though they usually know better?  When the choice is between doing the expedient thing and the right, people typically want to do the right thing but only to a point.  If 'cut-n-paste' is simpler or easier than doing the right thing, the playing field becomes so tilted that some other motivation needs to be strong enough to deter choosing the short-term solution. Code standards are one example of that kind of motivation.  They express a value judgment that the increasing maintenance costs of supporting bad code is not worth the time saved by taking short-cuts.  If the programmer knows he'll have to face his peers and explain why he took a short-cut, his choice becomes "I can do it quick-and-dirty (QaD) in 5 minutes instead of the right way which would take 15 minutes. But if I do it QaD, I'll have to spend 30 minutes arguing at the code-review. It's not worth the argument so I'll just do it the right way and save myself the trouble."  This sort of balancing act shows up naturally during pair-programming where having the second coder around makes it harder to justify writing messy code on the first pass.&lt;br /&gt;&lt;br /&gt;Recently, I went to a class on Microsoft's ASP.NET technology. Setting aside any feelings for the company, the way they approached the problem of mixing code and HTML was to make it easier to do the right thing.  They introduced the concept of a separate 'Code Behind' file which contains the C# or VB code for a given page. By making it easy to manipulate objects on the page and respond to events while keeping the code separate, they've made the right way also be the easiest way.&lt;br /&gt;&lt;br /&gt;Even experienced developers will justify taking a short-cut, however short-sighted, if doing the right thing is hard enough to do relative to the short-cut.  Different people have different tolerance level for short-cuts.  Understanding why people do the things they do isn't easy but gives us the perspective needed to address the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-3869833807136960496?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=5cBpC05rbbk:0qaGsVug0cs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=5cBpC05rbbk:0qaGsVug0cs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=5cBpC05rbbk:0qaGsVug0cs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=5cBpC05rbbk:0qaGsVug0cs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/5cBpC05rbbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/3869833807136960496/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/10/peanut-butter-programming.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3869833807136960496?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/3869833807136960496?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/5cBpC05rbbk/peanut-butter-programming.html" title="Peanut Butter Programming" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/10/peanut-butter-programming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQERXo_fyp7ImA9WxNQF0k.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-4655551609452863369</id><published>2009-09-21T09:56:00.008-05:00</published><updated>2009-09-23T17:01:44.447-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-23T17:01:44.447-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><category scheme="http://www.blogger.com/atom/ns#" term="language" /><title>Software as Literature</title><content type="html">Alternative title: Sonnets to CPUs&lt;br /&gt;&lt;br /&gt;Have you ever noticed that code follows some basic patterns? JUnit uses Setup(), Test(), Teardown().&lt;br /&gt;&lt;br /&gt;I’ve playfully mixed writing and coding below.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="width: 200em"&gt;&lt;br /&gt;//[Play about A Monarch's Destiny, in three acts]&lt;br /&gt;Public KingdomFuture tellTheTaleOfMyRule(Kingdom landMyFatherLeftMe)&lt;br /&gt;{&lt;br /&gt;   //[1st Act:  Build Drama]&lt;br /&gt;   Vassal mySubjects = SoliloquyAboutMyKingdom.getMyPeasants();&lt;br /&gt;   Boolean mySubjectsLoyalty = testOfLoyalty(mySubject);&lt;br /&gt;&lt;br /&gt;   Vassal theCaptainOfTheGuard = SoliloquyAboutMyKingdom.getMyTrustedRightHandMan();&lt;br /&gt;   Boolean myTrustedServantsLoyalty = testOfLoyalty(theCaptainOfTheGuard);&lt;br /&gt;&lt;br /&gt;   KingdomFuture historysTaleOfMyRule = KingdomFuture.UNDECIDED;&lt;br /&gt;&lt;br /&gt;   //[2nd Act: Drama plays out]&lt;br /&gt;   if ( mySubjectsLoyalty == TRUE &lt;br /&gt;        &amp;amp;&amp;amp; myTrustedServantsLoyalty == TRUE)&lt;br /&gt;   {&lt;br /&gt;       HeapPraiseUpon(theCaptainOfTheGuard);&lt;br /&gt;       historysTaleOfMyRule = ExpandKingdomByForce(mySubjects);&lt;br /&gt;   }&lt;br /&gt;   if ( mySubjectsLoyalty == FALSE &lt;br /&gt;        &amp;amp;&amp;amp; myTrustedServantsLoyalty == FALSE)&lt;br /&gt;   {&lt;br /&gt;       ArrestTraitor(theCaptainOfTheGuard);&lt;br /&gt;       historysTaleOfMyRule = ImposeDispicableLaws(mySubjects);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //[3rd Act: resolve drama]&lt;br /&gt;   if ( deceptionHiddenSuccessfully(theCaptainOfTheGuard) )&lt;br /&gt;   {&lt;br /&gt;       return oldRulerOverthrown;&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   { &lt;br /&gt;      return historysTaleOfMyRule;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-4655551609452863369?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=EVb4zE_xEqo:_gbh8Y2qHNY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=EVb4zE_xEqo:_gbh8Y2qHNY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=EVb4zE_xEqo:_gbh8Y2qHNY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=EVb4zE_xEqo:_gbh8Y2qHNY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/EVb4zE_xEqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/4655551609452863369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/09/software-as-literature.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4655551609452863369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/4655551609452863369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/EVb4zE_xEqo/software-as-literature.html" title="Software as Literature" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/09/software-as-literature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AFRXY5eCp7ImA9WxNQEkw.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-5992806596438093599</id><published>2009-09-14T09:23:00.002-05:00</published><updated>2009-09-17T13:21:54.820-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T13:21:54.820-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pragmatic" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="refactoring" /><title>Discontinuous Integration</title><content type="html">Refactoring is becoming a commonplace term thrown around these days. The expectation is building that refactoring is something that all good developers do and if you don't, you must be in one of "those" types of companies. You know the ones, they don't use a version control system or have a repeatable build, i.e. Continuous Integration, much less a well-defined deployment procedure.&lt;br /&gt;&lt;br /&gt;If you are lucky enough to be building the first version of a product, you can refactor to your hearts content. There is no existing code to worry about breaking. If you are changing an existing system refactoring isn't always simple or straightforward.  Even if you have the most automated CI and 100% code coverage of unit tests you'll still face the practical issues of deployment and business dependencies.&lt;br /&gt;&lt;br /&gt;Let's say you operated the worlds most modern airline reservation system. It's written in the latest language and has all the buzzwords, highly available, highly reliable, highly scalable, etc.  It has tons of automated tests so you are 100% confident that nothing will break.  Now, since you have business partners like travel agencies and customers looking to book a flight or retrieve flight information, they have a stake in your deployment.  The customers may tolerage a "Down for maintenencem, come back later." message but your partners will take a dim view of your downtime.  They'll insist you tell them in advance so they can prepare any necessary changes in their systems or alert their support staff in case there are issues after the deployment.&lt;br /&gt;&lt;br /&gt;Another example would be a large back-office accounting system.  Whatever level of confidence you have in your code. you still have to deal with the myriad inputs and outputs of the system and disrupting the processing schedule for a code migration. No amount of automated testing/build/migration will ever solve these types of complexities.&lt;br /&gt;&lt;br /&gt;The point is that considerations like these limit the opportunities to deploy code changes and increase the cost of change even when that change is guaranteed to work.&lt;br /&gt;&lt;br /&gt;Refactoring is good but there are practical considerations why it's not done to the degree it could be in some shops.  Keep that in mind next time you want to pass judgement on the perceived lack of refactoring somewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-5992806596438093599?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=55EMxeNPVlk:ohG-nJgEdmM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=55EMxeNPVlk:ohG-nJgEdmM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=55EMxeNPVlk:ohG-nJgEdmM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=55EMxeNPVlk:ohG-nJgEdmM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/55EMxeNPVlk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/5992806596438093599/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/09/discontinuous-integration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/5992806596438093599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/5992806596438093599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/55EMxeNPVlk/discontinuous-integration.html" title="Discontinuous Integration" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/09/discontinuous-integration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHQX0zfCp7ImA9WxNVGE8.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-8195627345876257135</id><published>2009-08-31T09:45:00.006-05:00</published><updated>2009-10-29T08:32:10.384-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-29T08:32:10.384-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><title>In Search of Wisdom</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ikmwGzALbOc/Spv9a82ewaI/AAAAAAAAAPM/9C5ZmwaQEV0/s1600-h/200px-Efez_Celsus_Library_3_RB.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer; width: 200px; height: 266px;" src="http://3.bp.blogspot.com/_ikmwGzALbOc/Spv9a82ewaI/AAAAAAAAAPM/9C5ZmwaQEV0/s320/200px-Efez_Celsus_Library_3_RB.jpg" alt="[Pic: statue of the personification of Wisdom]" id="BLOGGER_PHOTO_ID_5376169219649880482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The other day I was reading &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, a forum for developers to ask and answer technical questions, and ran across a &lt;a href="http://meta.stackoverflow.com/questions/12259/should-i-be-discouraged-by-stackoverflow"&gt;post from a discouraged student&lt;/a&gt;.  The responses had one thing in common:&lt;a href="http://meta.stackoverflow.com/questions/12259/should-i-be-discouraged-by-stackoverflow/12262#12262"&gt; programmers know that they must keep learning&lt;/a&gt;. Tomorrow's hot new technology is just as soon to be yesterday's lost and forgotten relic.  The best programmers are not the experts in a given niche but the ones who are comfortable with learning as a way of life.  They know that they do not know and accept it. This makes them resistant to dictated dogma; a good example being &lt;a href="http://www.joelonsoftware.com/articles/fog0000000319.html"&gt;Joel Spolsky's "Emperor's New Clothes"&lt;/a&gt; treatment of C-style strings. They are then freed from the ups and downs of the technological tide and are not battered by the &lt;a href="http://justplaintech.com/blog/2008/08/13/netbooks-fad-or-future/"&gt;constant waves of the newest, latest fad&lt;/a&gt;, nor do they feel deserted when some favored tech is &lt;a href="http://en.wikipedia.org/wiki/Newton_%28platform%29"&gt;washed away into the sea&lt;/a&gt; or &lt;a href="http://dead-zone.nanovox.com/destivu-software.html"&gt;wrecked upon the shoals&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Socrates"&gt;Socrates&lt;/a&gt; is said to have walked the streets of Athens looking for a wise man.  Wisdom is usually associated with knowledge but since it is &lt;a href="http://en.wikipedia.org/wiki/I_know_that_I_know_nothing"&gt;impossible to know everything&lt;/a&gt;, true Wisdom is the awareness that you don't know.  You can know a little about some things or a lot about a few.  Those who believe they do know are blinded by their own ego and are thus willing to dismiss all doubts and set a course powered by a self-fulfilling sense of certainty.  This describes how many a tribe of men met their tragic fate. Technology is not immune from the siren's song of certainty hence the never-ending search for the always-elusive "&lt;a href="http://codewright.blogspot.com/2007/04/technology-is-harsh-mistress.html"&gt;Silver Bullet&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;When it comes to Wisdom, what sets apart the &lt;a href="http://codewright.blogspot.com/2005/11/scars-we-bear.html"&gt;Codewright&lt;/a&gt; from the &lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;Code Monkey&lt;/a&gt;? A healthy dose of self-doubt. Doubt enough to realize that risks should not be dismissed solely because they are improbable. Doubt enough to allow the most skillful to help do the work, the most far-sighted to help guard the course, the most cynical to help figure the schedule. Doubt enough to keep unjustified self-confidence from enabling acts of hubris. This is just as true for teams as well.  The best teams are the ones who understand both their strengths and their weaknesses.  A group of individual superstars who can't learn to play together&lt;a href="http://en.wikipedia.org/wiki/USA_men%27s_national_basketball_team"&gt; isn't always guaranteed success&lt;/a&gt; while a bunch of unknown amateurs who work has a cohesive unit can &lt;a href="http://en.wikipedia.org/wiki/Miracle_on_Ice"&gt;perform miracles&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Software development as a field naturally attracts those who are willing to accept the reality that there will always be more to learn.  It is a good sign, one that indicates our chosen field will never stagnate. There will always be something to discover, a constantly flowing river of new challenges to overcome and puzzles to solve.  The search for Wisdom is not for a desired destination, but of a fulfilling journey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-8195627345876257135?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=dubwBGKDepA:886Nds2wQF0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=dubwBGKDepA:886Nds2wQF0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=dubwBGKDepA:886Nds2wQF0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=dubwBGKDepA:886Nds2wQF0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/dubwBGKDepA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/8195627345876257135/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/08/in-search-of-wisdom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8195627345876257135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/8195627345876257135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/dubwBGKDepA/in-search-of-wisdom.html" title="In Search of Wisdom" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ikmwGzALbOc/Spv9a82ewaI/AAAAAAAAAPM/9C5ZmwaQEV0/s72-c/200px-Efez_Celsus_Library_3_RB.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/08/in-search-of-wisdom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UDQng5fCp7ImA9WxJUFkQ.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-2320222579122811826</id><published>2009-07-15T16:52:00.003-05:00</published><updated>2009-07-15T17:01:13.624-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T17:01:13.624-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><title>Tower of Babbling</title><content type="html">When I started coding at my first job almost 20 years ago, it was at an OS/2 shop using C and Presentation Manager. I had several different languages in college so I wasn't too phased by the 1-2 week C training course we got.  What I wasn't prepared for was memory management, C style string handling, message-driven applications, just to name a few.&lt;br /&gt;&lt;br /&gt;I began my dislike of C early with the insanity called string handling. I was pleased when I found out that &lt;a href="http://www.joelonsoftware.com/articles/fog0000000319.html"&gt;Joel agrees with me&lt;/a&gt;.  Although there are plenty of people who will defend how 'intuitive' the string functions are, I knew there were much simpler ways to manipulate strings as long as you didn't need one larger than 255 characters, in which case using a char* buffer would be fine.  Writing apps in something other than C was dismissed offhand with statements like, "C is much closer to the metal", "You don't have the run-time bloat of other languages", or "You have so much more control with C" which almost sounds like a masculinity test or something. Think lumberjacks and "my chainsaw is bigger so only the strongest can use it" type argument. Nowadays, this type of behavior would remind me of &lt;a href="http://codewright.blogspot.com/2005/12/codewright-and-code-monkey.html"&gt;The Code Monkey&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Even 2 decades ago, it was possible to call code written in one language to call code written in another; in school we called assembly graphics routines from within Ada code for one class assignment. Notable exceptions are running compiled code from within scripts or executing a system command from within compiled code; but rarely do we write a library in C++ to use in our Java app. When Java first appeared and it was still slow, I never understood the resistance to writing the main app in Java and moving the bottleneck code into some C/C++ dll and called using JNI. It's like we use the "language X sucks at a, b, and c so we can't use it" as a shield that keeps us from having to design multi-language applications. &lt;br /&gt;&lt;br /&gt;So, after all these years, what keeps us from writing multi-language apps?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-2320222579122811826?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=BkmX79b3B80:cGFfnwTAnDQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=BkmX79b3B80:cGFfnwTAnDQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=BkmX79b3B80:cGFfnwTAnDQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=BkmX79b3B80:cGFfnwTAnDQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/BkmX79b3B80" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/2320222579122811826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/07/tower-of-babbling.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2320222579122811826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2320222579122811826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/BkmX79b3B80/tower-of-babbling.html" title="Tower of Babbling" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/07/tower-of-babbling.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MRXg4fyp7ImA9WxJVGEQ.&quot;"><id>tag:blogger.com,1999:blog-16341181.post-2638057489244360817</id><published>2009-07-06T09:19:00.001-05:00</published><updated>2009-07-06T11:33:04.637-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T11:33:04.637-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="craftsmanship" /><title>An Apprentice of His Very Own</title><content type="html">In my career as a developer, I reached a point where the amount of work that needed to be done was much greater than I had time to do myself.  Budget realities aside, there was a lot of coding tasks like writing more unit tests or keeping various diagrams up-to-date that would be tedious but easy to accomplish as long as a basic understanding of development was present.  Wouldn't it be nice to be able to afford to hire your own apprentice? Someone maybe still in college who had some exposure to coding but was still wet behind the ears enough to keep quiet and learn by osmosis.&lt;br /&gt;&lt;br /&gt;At the time, I had visions of a helper who could take rough UML diagrams, like from scratch paper or from a white-board session, and update the project documentation.  As each change came through, they would create new versions and archive old ones like a file clerk from decades ago.&lt;br /&gt;&lt;br /&gt;First off, a fresh-from-college developer might consider that type of work as beneath him or her. I'd argue that learning the processes is just as valuable as learning how to code.  Did they learn about version control, shared builds or managing a large code-base in school? Of course not, but experience with those types of processes are what most junior developers lack.&lt;br /&gt;&lt;br /&gt;Secondly, if your job is consistently repeatable enough to explain to an apprentice, why are you there in the first place? The apprentice is much cheaper and easier to replace.  More than likely, you job is one of those ones which is hard to explain because it relies on your experience and training to understand how to approach the problem and the possible/practical solutions.&lt;br /&gt;&lt;br /&gt;Usually I stay away from comparing software with construction but in this respect, iron workers have a similar problem: how to bring on new blood without getting anyone hurt or jeopardizing the project.  Even the most junior iron worker needs to understand how to do his small part and stay safe. The head iron worker needs to trust that his men won't need explicit instructions for every task and that when a crisis erupts, they'll understand what the priorities are without having to stop and have a meeting. &lt;br /&gt;&lt;br /&gt;So, what you end up needing is someone who wants to learn, has the patience to listen, the intelligence to follow directions, the determination to keep doing hard work even when they don't know the importance of their contribution, and the wisdom to understand that not all knowledge comes from a book.  The next step is to think about how to carve up your work so someone can help you with it. That will have to wait for another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16341181-2638057489244360817?l=codewright.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=X7gyp1HxGLs:WlihDRfHRzg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=X7gyp1HxGLs:WlihDRfHRzg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?i=X7gyp1HxGLs:WlihDRfHRzg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheCodewrightsTale?a=X7gyp1HxGLs:WlihDRfHRzg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheCodewrightsTale?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodewrightsTale/~4/X7gyp1HxGLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codewright.blogspot.com/feeds/2638057489244360817/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codewright.blogspot.com/2009/07/apprentice-of-his-very-own.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2638057489244360817?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16341181/posts/default/2638057489244360817?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TheCodewrightsTale/~3/X7gyp1HxGLs/apprentice-of-his-very-own.html" title="An Apprentice of His Very Own" /><author><name>Kelly</name><uri>http://www.blogger.com/profile/08846371280799024151</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://codewright.blogspot.com/2009/07/apprentice-of-his-very-own.html</feedburner:origLink></entry></feed>

