    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Afterwood</title>
        <link>https://members.accu.org/index.php/journals/2383</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>


        <h2>Journal Articles</h2>


<div class="xar-mod-head"><span class="xar-mod-title">Overload Journal #139 - June 2017 + Process Topics</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c374/">o139</a>
                    (7)
<br />

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c221/">Process</a>
                    (83)
<br />

                                            <a href="https://members.accu.org/index.php/journals/c374-221/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/journals/c374+221/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Afterwood</h1>
<p><strong>Author:</strong>&nbsp;Martin Moene</p>
<p>
<strong>Date:</strong> 01 June 2017 13:32:49 +01:00 or Thu, 01 June 2017 13:32:49 +01:00</p>
<p><strong>Summary:</strong>&nbsp;What makes programming fun? Chris Oldwood ponders what floats his boat.</p>
<p><strong>Body:</strong>&nbsp;<p>Back in 1986, Fred Brooks published the seminal essay <em>No Silver Bullet: Essence and Accident in Software Engineering</em> in which he introduced us to the idea that there are two different kinds of complexity which software engineers need to deal with. The first is â€˜essential complexityâ€™, which is complexity that is inherent in the problem being solved. Before we can solve the problem, we humans need to understand the problem domain and model it before we can think about how weâ€™re going to represent it in the solution domain. In the essay, Brooks argues that there is little to really help us quickly get into and understand the true essence of the problems we try to solve through software. Yes, there have been some advances but nothing stellar.</p>

<p>The second kind of complexity which Brooks described, he coined â€˜accidental complexityâ€™. This exists in the solution domain and is the complexity which exists as a by-product of the processes, tools and technologies we use to solve our customerâ€™s problems. This kind of complexity could be perceived as being a problem of our own making, as the programming languages and tools we use are imperfect and therefore imprecise. These are the silver bullets which the essay is referring to.</p>

<p>Unfortunately, the choice of the term â€˜accidentalâ€™ became a poor one as it was often interpreted incorrectly. In his follow-up essay almost 10 years later, <em>No Silver Bullet Refired</em>, he describes how it was often treated in the sense of â€˜misfortuneâ€™ rather than its alternative meaning of â€˜incidentalâ€™. As such, many rebuttals targeted the apparent incompetence of programmers instead of the imperfections in the tooling, which missed the point of the original essay.</p>

<p>In theory, as we make technological advances we should be reducing the degree of accidental complexity â€“ the ability to represent our solution for the problem in computerised form â€“ and instead spend more time focusing on tackling the essential complexity. The growth of the Agile movement which puts an emphasis on trying to ensure we â€˜build the right thingâ€™ before wasting time â€˜building the wrong thing, in the right wayâ€™ has also meant that the essential complexities are starting to get more of a look-in before we get bogged down in the coding. This is probably not surprising given that the latter part of <em>No Silver Bullet</em> lists the use of â€˜incremental developmentâ€™ and the metaphor to â€˜grow, not buildâ€™ software as probably the most promising approach to tackling the problem.</p>

<p><em>No Silver Bullet</em> was added to the Anniversary Edition of his book <em>The Mythical Man-Month: Essays on Software Engineering</em>, which was published 20 years later in 1995. The first essay in that book, and one Iâ€™m personally very fond of, is â€˜The Tar Pitâ€™. Itâ€™s one of the shorter ones, weighing in at just 6 pages, and provides a brief introduction to the rest of book by exploring what systems programming is all about. Along the way he looks at both the â€˜joysâ€™ and the â€˜woesâ€™ of the craft and suggests that for most people â€˜the joys far outweigh the woesâ€™, which I reckon most programmers would find little trouble agreeing with, even if on certain days it feels like the latter might be true.</p>

<p>And so with the lay of the land firmly established I feel comfortable in making my confession â€“ itâ€™s the accidental complexity that I find exciting. Thatâ€™s right, what floats my particular boat is solving the problems which shouldnâ€™t really exist but do because of those imperfections in the tooling we use. The Internet is awash with advice on how we should get better at understanding our customerâ€™s needs and solve their problems more efficiently but quite frankly thatâ€™s just not as interesting to me as trying to dig yourself out of a technical hole which either you (or your predecessor) got you into in the first place.</p>

<p>That doesnâ€™t mean I actively go out of my way to be obtuse or pick technologies that are unsuitable purely for the purposes of self-gratification â€“ on the contrary I still want to be professional and do the best job I can â€“ itâ€™s just I personally often find more pleasure solving the problems in the solution domain than solving the actual customerâ€™s problem.</p>

<p>One example of this would be the war stories that programmers like to share over a pint or two in the bar at a conference. The ones Iâ€™m most fond of hearing or reading about (and sharing) are those that involve one personâ€™s struggle against the technology. There are so many wonderful tales about how people have managed to bend, twist and generally contort one tool to make it do something it was never intended to. In <em>An Introduction to General Systems Thinking</em>, Gerry Weinberg suggests that you donâ€™t really know a tool until youâ€™ve abused it at least three times, so perhaps there is a rite of passage where we have to embrace the gnarly problems to truly grasp the very nature of accidental complexity so that we can try to elude it in the future. As an aside, that book was originally published at the same time as <em>The Mythical Man Month</em> (and 10 years before <em>No Silver Bullet</em>).</p>

<p>My current best efforts to explain these pangs of guilt come from Vivek Singh (@petmongrels) who recently tweeted â€œProgrammer Stack Envy â€“ A belief that work at a lower level in the stack is intellectually more challenging than at oneâ€™s own levelâ€. I know that when I leave the ACCU Conference every year, I am in awe of many of the people attending and the things theyâ€™ve accomplished, especially as the C++ language grows ever more complex with each new standard. But I wonder how many of those people are also suffering from a form of Stockholm syndrome and are in it largely because it <em>is</em> complex â€“ an enigma to be solved in its own right.</p>

<p>Secretly, I hope there will never be a silver bullet because when that day comes I fear itâ€™s the day the fun goes out of programming.</p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
