<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>let x=x &#187; craftsmanship</title>
	<atom:link href="http://www.crazymcphee.net/x/tag/craftsmanship/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.crazymcphee.net/x</link>
	<description>programming idiom and methodology</description>
	<lastBuildDate>Fri, 27 Jan 2012 09:36:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Frustrated Architect</title>
		<link>http://www.crazymcphee.net/x/2011/11/16/the-frustrated-architect/</link>
		<comments>http://www.crazymcphee.net/x/2011/11/16/the-frustrated-architect/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 11:48:34 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile architecture]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[methodology]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=701</guid>
		<description><![CDATA[An interesting set of slides by Simon Brown from a talk he gave about the role of the architect. A PDF is attached to the linked post or you can view the slides online. Wish I had heard the talk (see below). The Frustrated Architect: Software architecture plays a pivotal role in the delivery of [...]]]></description>
			<content:encoded><![CDATA[<p>An interesting set of slides by Simon Brown from a talk he gave about the role of the architect. A PDF is attached to the linked post or you can view the slides online. <strike>Wish I had heard the talk</strike> (see below).</p>
<p><a href="http://www.codingthearchitecture.com/presentations/skillsmatter2011-the-frustrated-architect/">The Frustrated Architect</a>:</p>
<blockquote><p>Software architecture plays a pivotal role in the delivery of successful software yet it&#8217;s frustratingly neglected by many teams. Whether performed by one person or shared amongst the team, the architecture role exists on even the most agile of teams yet the balance of up front and evolutionary thinking often reflects aspiration rather than reality.</p></blockquote>
<p>(Via <a href="http://www.codingthearchitecture.com/">coding the architecture</a>.)</p>
<p><strong>Update</strong> &#8211; if you go to <a href="http://skillsmatter.com/podcast/java-jee/frustrated-architect">this page</a> you can get a video of the presentation; it&#8217;s about an hour long. A word of warning: I couldn&#8217;t make the video play on the site with Chrome, I had to use Safari.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2011/11/16/the-frustrated-architect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>blog link: world–</title>
		<link>http://www.crazymcphee.net/x/2011/10/14/blog-link-world%e2%80%93/</link>
		<comments>http://www.crazymcphee.net/x/2011/10/14/blog-link-world%e2%80%93/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 09:28:34 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[infrastructure and frameworks]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/2011/10/14/blog-link-world%e2%80%93/</guid>
		<description><![CDATA[world– by Robert Merkel at Larvatus Prodeo. Published October 14, 2011 at 09:02AM The technology world has just lost another giant, though one without the towering public persona of Steve Jobs. If you’re not actually a programmer, you’ve probably never heard of Dennis Ritchie. But the vast majority of software you use was built using [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://larvatusprodeo.net/2011/10/14/world/">world–</a> by Robert Merkel at <a href="http://larvatusprodeo.net">Larvatus Prodeo</a>. Published October 14, 2011 at 09:02AM</p>
<blockquote><p>The technology world has just lost another giant, though one without the towering public persona of Steve Jobs.</p>
<p>If you’re not actually a programmer, you’ve probably never heard of <a href="http://www.washingtonpost.com/blogs/blogpost/post/dennis-ritchie-father-of-c-programming-language-and-unix-dies-at-70/2011/10/13/gIQADGNbhL_blog.html">Dennis Ritchie</a>. But the vast majority of software you use was built using a tool that he originally designed, and the rest by tools that very liberally sample from his.</p>
<p>The “native language” that the central processor in a computer understands is an ornery beast. For one thing, back in the 1970s every two-bit computer company (if you’ll pardon the techy pun) had its own native language; these days, there still remain two very common ones, and dozens of less common examples out there. More importantly, it’s almost incomprehensible, even to most programmers. Take this little snippet, part of the preliminaries to a very simple program that just prints the message “hello, world” to the screen:</p>
<pre>_start:
        mov    eax, 4
        mov    ebx, 1
        mov    ecx, str
        mov    edx, str_len
        int    80h</pre>
<p>Writing long and complicated bits of software with such unhelpful notation is extremely slow and error-prone.</p>
<p>“High-level” languages, that allowed the logic of software to be expressed in more compact and readable notation, had existed since the 1950s; <a href="http://en.wikipedia.org/wiki/Grace_Hopper">Grace Hopper</a> was responsible for one of the first. Over time, more and more of the scientific and business software run on the large computers of the era was written in FORTRAN, COBOL, and other high-level langages. However, the “operating systems”, the software plumbing that joined those applications to the hardware, was invariably written in the machine language of specific systems.</p>
<p>In the late 1960s, Ritchie, working with Ken Thompson at Bell Laboratories, hacked together their own little operating system for an obsolete computer nobody was making use of. It was small, but it worked, and was one of the first practical systems to support “timesharing” – the ability for multiple users to run multiple programs simultaneously and interactively. Fairly early on, they had another brainwave; they would rewrite as much of the system – which became known as Unix – as possible in a high-level programming language, to speed development. But first, they needed a suitable high-level language. The resulting language, an evolution of earlier languages entitled BCPL and B, was called “C”.</p>
<p>Both C and Unix were raging successes, partly because of their inherent strengths. The use of C allowed Unix to be “ported” to many different computer systems, a process that continues today as its spiritual successor Linux, written in C, runs on everything from IBM mainframes (and the amphormous “Googleplex” of Google’s servers which, reportedly, draw 240 megawatts of power), to virtually every smartphone on the planet (the iPhone’s operating system is not Linux, but it is also a derivation of Unix and substantial parts are written in C). They also had the good fortune, as with the Internet and World Wide Web which owes so much to both, that they gradually escaped the crush of intellectual property law to become part of the intellectual commons of the field.</p>
<p>Almost as important was the elegance and economy that Ritchie, along with Brian Kernighan, brought to teaching the language. Their textbook <a href="http://en.wikipedia.org/wiki/The_C_Programming_Language">The C Programming Language</a> remains the best programming language textbook ever written, in my view, and the one that I still strongly recommend to my students.</p>
<p>Much of the Windows operating system, and Mac OS X, are implemented in C. Those parts that aren’t, are implemented in computer languages directly derived from it – C++ and Objective-C. Most of the software that runs on those systems is also written in C or its successor languages. And perhaps the most pervasive “new” high-level language of the last 20 years – Java – retains so much of C’s “look and feel” that it often takes a second glance to tell which language a piece of code is written in.</p>
<p>Neither C nor Unix were by any means perfect. While some of its design faults have been eliminated in its successors others remain, and will likely continue to bamboozle neophyte (and, all too often, experienced) programmers, for generations to come. But there was so much he and his colleagues got right. Fate did play its part, but there are very good reasons that generations of software developers not yet born will express themselves in notations largely based on Ritchie’s.</p>
<p>RIP, dmr.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2011/10/14/blog-link-world%e2%80%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A terrible, terrible Eclipse bug</title>
		<link>http://www.crazymcphee.net/x/2011/03/10/a-terrible-terrible-eclipse-bug/</link>
		<comments>http://www.crazymcphee.net/x/2011/03/10/a-terrible-terrible-eclipse-bug/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 00:55:19 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[tools and techniques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[poorly attempted humour]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[test driven design]]></category>
		<category><![CDATA[wizards considered harmful]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=610</guid>
		<description><![CDATA[I found a massive bug in Eclipse &#8211; it has a copy and paste function. In Eclipse&#8217;s defence, Intellij IDEA and Netbeans also exhibit identical broken functionality.]]></description>
			<content:encoded><![CDATA[<p>I found a massive bug in Eclipse &#8211; <em>it has a copy and paste function</em>.</p>
<p>In Eclipse&#8217;s defence, <em>Intellij IDEA</em> and <em>Netbeans</em> also exhibit identical broken functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2011/03/10/a-terrible-terrible-eclipse-bug/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>REST and SOA and Agile and Waterfall</title>
		<link>http://www.crazymcphee.net/x/2010/12/21/rest-and-soa-and-agile-and-waterfall/</link>
		<comments>http://www.crazymcphee.net/x/2010/12/21/rest-and-soa-and-agile-and-waterfall/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 08:26:07 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[infrastructure and frameworks]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tools and techniques]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=595</guid>
		<description><![CDATA[Recently I&#8217;ve been working on two projects. They are an exercise in contrasts. First the technologies and the development methodologies. So the first company uses a very Waterfall process and the integration platform is SOA. We&#8217;ve managed to build, in the middle of this, a small and focussed Java component that uses JMS in and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been working on two projects. They are an exercise in contrasts.</p>
<p>First the technologies and the development methodologies.</p>
<p>So the first company uses a very Waterfall process and the integration platform is SOA. We&#8217;ve managed to build, in the middle of this, a small and focussed Java component that uses JMS in and out to avoid building horrible <em>horrible</em> BPEL or BPMN etc. But at either end, there&#8217;s some SOA bits to manage the integration with the &#8220;legacy&#8221;. So we&#8217;ve got this great bit of software, does amazing things, delivers real value to the business, which they want to put into production asap, but at every turn we&#8217;re hampered by the organisation or the technology platform. Its not so much the technology platform but the waterfall process the company has put around it. I&#8217;ve been told an internal wiki article detailing all the JMS  configuration is not  acceptable and the detail had to be in a Word document attached to an email requesting a not-production server configuration change. Word documents attached to emails are apparently far more &#8220;controllable&#8221; than a wiki with strong authentication protocols and history details in this world-view. Naturally I cut and pasted my wiki configuration detail into a Word document, spent a morning formatting it, and even added a link to the wiki before attaching it to an email. Acceptable process; configuration delivered. SOA and waterfall go together to make software development hell.</p>
<p>The second project has its many issues but one thing it does not have (for the components I have designed at least) is any SOA. It is all REST all the way down. There are multiple server-side-only components that all communicate to each other with REST over HTTP. Some of the data passed between servers is (or soon will be) JSON. The user interface is about to be delivered in two parts &#8211; one through actual REST-inspired web page requests to get the HTML and the other, via JQuery running on the web pages to actual JSON over REST services. These services will also call the REST services on the other components of the system (no database at the UI level). In fact many of the same JSON documents will be used to communicate from server to server as from ui to server. We are using Jersey for the REST. The process is Agile. The organisation hasn&#8217;t delivered such a large project with Agile before, and while I&#8217;ve been away on the other project there&#8217;s been some loss of focus. But despite some critical moments we had last week there&#8217;s been a renewed commitment to improving the engineering and project processes to achieve high velocity and good success. Its not perfect but it feels like the senior managers want the agile process to succeed. So, REST and Agile go together to make developer success.</p>
<p>Now, to the organisations. See if you can match the organisational description to the project style.</p>
<p>One of these two projects is a really fascinating piece of software in the transport industry (I can&#8217;t say more than that) which is integrating a number of &#8220;old&#8221; software solutions and creating some really sexy new features that the customer wants and loves. It is across what Eric Evans calls the &#8220;core domain&#8221; of the business. Not only is it a relatively short piece of work, but it will deliver high value to the business. It also enables a bunch of even higher value business services in the future. Things that directly expand their capabilities they can offer to their customers (which will be many of my readers) and do other related sexy things core to the business. The business salivate over it. It buffs their shine. They want it.</p>
<p>The other project is a little less flashy. The product is a rather niche product but it&#8217;s purpose is around the environmental effects of carbon emissions so at it&#8217;s core is the mission &#8220;save the planet from CO2&#8243; &#8212; a pretty high value mission you&#8217;d think. However the actual functions of the software product are fairly mundane &#8211; based around helping large organisations capture and control data about their carbon emissions, because many of them have been required now to report these numbers to government agencies for a number of years. It has customers, all of then big companies or government agencies, and all the future prospects are similar sorts of organisations.</p>
<p>Which one is which? Which one uses REST/Agile, and which one is the SOA/Waterfall project? Do you think you can guess?</p>
<p>Would you be surprised if I said that the &#8220;sexy&#8221; transport project is the first one (SOA/Waterfall) and the second one is the REST/Agile project?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/12/21/rest-and-soa-and-agile-and-waterfall/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Throw it away and write another one</title>
		<link>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/</link>
		<comments>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/#comments</comments>
		<pubDate>Sun, 30 May 2010 08:47:10 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[professional practice]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[tools and techniques]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ANTLR]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[test driven design]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=557</guid>
		<description><![CDATA[Most developers familiar with agile methods are familiar with the idea of the spike. A spike is a time-boxed task that concentrates on clarifying the unknowns in your project. Usually these are technological (&#8220;can this be done with this technology?&#8221;) but they are also sometimes in the area of the business domain (&#8220;is this a [...]]]></description>
			<content:encoded><![CDATA[<p>Most developers familiar with agile methods are familiar with the idea of the <em>spike</em>. A spike is a time-boxed task that concentrates on clarifying the unknowns in your project. Usually these are technological (&#8220;can this be done with this technology?&#8221;) but they are also sometimes in the area of the business domain (&#8220;is this a good idea?&#8221;) too. One key idea is that the at the end of the spike, it is thrown away. It&#8217;s not supposed to be used as production code, it&#8217;s just supposed to answer some questions about the project, to validate or invalidate particular approaches to a problem, to provide further clarity around unknowns, to explore risk, to help with estimation, etc. I think this can be a useful general idea when dealing with technology, even in a &#8220;production&#8221; context.</p>
<p>Recently I was learning <a href="http://www.antlr.org">ANTLR</a>, trying to decide whether this was a right technology to pursue a particular project which involved parsing a preexisting message format. After a week of a spike, we decided that it was worth pursuing and started on earnest on the grammar for our project. However a week into this process, I had an epiphany &#8230; I was doing some things wrong with the ANTLR grammar which were now slowing progress in adding the new characteristics it needed to be complete. Many developers know this feeling; the features of my grammar that I had built over the first week were naive and now hampering it from expanding into the new requirements. I took it on myself to kill the entire grammar and start again. It took less than a day and half to replicate that week&#8217;s worth of work (i.e. pass the test suite which had built up around it).  I&#8217;ve done this before; scrap the first attempt at building a domain and try again. Here my domain was the same (it was after all defined in both a standards specification and in the many hundreds of thousands of sample messages we captured from an existing system), but its implementation needed refinement.</p>
<p>So I think that the rule about throwing away spikes can in fact be made a general axiom of programming:</p>
<blockquote><p>When you are learning a new technology, make sure you  throw away the first thing you build that works &#8211; to avoid accumulating  your mistakes.</p></blockquote>
<p>Thanks to <a href="http://www.twasink.net/">Robert</a> for the important qualifier &#8220;that works&#8221;. <img src='http://www.crazymcphee.net/x/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>N.B. my views about <a title="The rewrite will be ready shortly" href="http://www.crazymcphee.net/x/2009/02/01/the-rewrite-will-be-ready-shortly/">system  rewrites</a> have not changed regardless.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2010/05/30/throw-it-away-and-write-another-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Architecture and Craftsmanship</title>
		<link>http://www.crazymcphee.net/x/2009/12/05/on-architecture-and-craftsmanship/</link>
		<comments>http://www.crazymcphee.net/x/2009/12/05/on-architecture-and-craftsmanship/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 01:55:05 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[latin]]></category>
		<category><![CDATA[profession]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=502</guid>
		<description><![CDATA[The science of the architect depends upon many disciplines and various apprenticeships which are carried out in other arts. His work consists in craftsmanship and technology. Craftsmanship is continued and familiar practice, which is carried out in the hands in such material as is necessary for the purpose of a design. Technology sets  forth and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The science of the architect depends upon many disciplines and various apprenticeships which are carried out in other arts. His work consists in craftsmanship and technology. Craftsmanship is continued and familiar practice, which is carried out in the hands in such material as is necessary for the purpose of a design. Technology sets  forth and explains things wrought in accordance with technical skills and method.</p>
<p>So architects who without culture aim at manual skill cannot gain a prestige corresponding to their labours, while those who trust to theory and literature obviously chase a shadow and not reality. But those who have mastered both, like men equipped in full armour, soon acquire influence and attain their purpose.</p>
<p>M. Vitruvius Pollio,   <em>De Architectura Libri Decem</em>, 1.1.1-2. (approx 31 to 27 B.C.)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/12/05/on-architecture-and-craftsmanship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m not making this mess anymore!</title>
		<link>http://www.crazymcphee.net/x/2009/03/17/im-not-making-this-mess-anymore/</link>
		<comments>http://www.crazymcphee.net/x/2009/03/17/im-not-making-this-mess-anymore/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 12:14:48 +0000</pubDate>
		<dc:creator>Scot Mcphee</dc:creator>
				<category><![CDATA[professional practice]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[emergent design]]></category>
		<category><![CDATA[profession]]></category>
		<category><![CDATA[refactor]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[test driven design]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.crazymcphee.net/x/?p=236</guid>
		<description><![CDATA[XP: After 10 years why are we still talking about it? By Robert C. Martin. Uncle Bob argues passionately, and correctly, for the principles of software craftsmanship. Link: http://www.viddler.com/explore/sergiopereira/videos/7/.]]></description>
			<content:encoded><![CDATA[<p>XP: After 10 years why are we still talking about it? By Robert C. Martin. Uncle Bob argues passionately, and correctly, for the principles of software craftsmanship.</p>
<p><object width="437" height="370" data="http://www.viddler.com/player/ef4eb06a/" type="application/x-shockwave-flash"><param name="id" value="viddler_ef4eb06a" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.viddler.com/player/ef4eb06a/" /><param name="name" value="viddler_ef4eb06a" /><param name="allowfullscreen" value="true" /></object></p>
<p>Link: <a href="http://www.viddler.com/explore/sergiopereira/videos/7/"> http://www.viddler.com/explore/sergiopereira/videos/7/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazymcphee.net/x/2009/03/17/im-not-making-this-mess-anymore/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

