    <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  :: Editorial: The Buzzword Adoption Pattern?</title>
        <link>https://members.accu.org/index.php/articles/243</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>




<div class="xar-mod-head"><span class="xar-mod-title">Journal Editorial + Overload Journal #63 - Oct 2004</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/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c185/">Editorial</a>
<br />

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

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

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

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c149/">63</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c185-149/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c185+149/">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;Editorial: The Buzzword Adoption Pattern?</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 09 October 2004 16:25:38 +01:00 or Sat, 09 October 2004 16:25:38 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e20" id="d0e20"></a></h2>
</div>
<p>In my last editorial (in Overload 60, called &quot;An Industry That
Refuses to Learn&quot;) I asserted that the software development
industry has not made significant progress in the last quarter of a
century. This assertion provoked enough of a response to fill the
letters page in the following issue. I'm pleased about that, but at
the same time, not so pleased. I'm pleased because I managed to
provoke people into putting pen to paper - or rather, in this day
and age, putting fingers to keyboard. I'm not so pleased because
the response was one of overwhelming agreement, which is
unfortunate because it suggests that any hopes I may have had that
my experience is the odd one out, are false.</p>
<p>Once again it's my turn to write an editorial, and in search of
inspiration, I dug out Overload 62 and reread Alan Griffiths'
editorial &quot;The Value of What You Know&quot;. In that editorial, Alan
recounts how a colleague asked him how to return a NULL string -
because in C the colleague would have represented the string using
const char* and therefore could, and would, have returned NULL. The
developer just expected to get a simple answer because it never
occurred to him that in the context he was working, a different
solution may have been appropriate; in other words, returning NULL
may or may not have afforded the best set of tradeoffs in the given
situation.</p>
<p>Anyway, why am I going on about this? Well, it's because I have
observed on many occasions over the last few years, that when a
developer comes up with a solution to a problem, they think the
problem is solved and get on with implementing whatever it is
they've come up with. Like the developer in Alan's story, they
don't stop to consider that implementing a particular solution has
its own set of consequences - or, putting it another way, they
don't consider that there are tradeoffs to be considered.</p>
<p>A recurring example of this is speeding up the lookup process in
a data structure in memory, by keeping an index in memory in
addition to the data. This approach makes the simple trade of using
more memory in return for a gain in speed. Whether or not the
tradeoffs are acceptable depends very much on the execution
environment. For example, if the structure holds enough data to
take up (say) thirty percent of a computer's memory, then the index
is likely to be sufficiently large to have an impact on both speed
and memory requirements. It should be noted that if measures must
be taken to speed up element lookup, then there is an implication
that the structure is likely to be large. Further, even if the
structure will be large, an index will not be of any benefit if
most of the elements searched for are near the starting point for
the lookup (typically the beginning of the structure). The upshot
of all this is that the solution using indexing is only a good idea
if:</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>There is enough memory to support it</p>
</li>
<li>
<p>The overhead of referencing the index will not impose too much
overhead on lookup speed, too much of the time</p>
</li>
</ol>
</div>
<p>What we're heading towards here is Pattern territory. It's worth
extending the discussion to consider Patterns, because the original
idea of Patterns was that any particular Pattern captures not only
a problem and a solution, but also the tradeoffs that must be
accepted if the solution is adopted. The problem of speeding up
lookup in a data structure and solving it using indexing, may or
may not qualify as a pattern (there are other factors that are
beyond the scope of this discussion). However, there is an analogy
to be drawn, because indexing is a solution to the problem, but
only if a certain set of tradeoffs - i.e. the two cited above, at
least - are acceptable.</p>
<p>The concept of a Pattern originates in &quot;The Timeless Way of
Building&quot; by the Architect Christopher Alexander, first published
in the late 1970s. The idea was imported into the software
development community in the early 1990s. However, it was the
publication of &quot;Design Patterns: Elements of Reusable
Object-Oriented Software&quot; by Erich Gamma, Richard Helm, Ralph
Johnson and John Vlissides, the &quot;Gang of Four&quot; (or &quot;GoF&quot;), that
brought Patterns to the attention of the software development
community at large, focusing on twenty-three patterns from the
domain of object-oriented design. Over the years this book has
become known as the &quot;GoF book&quot;.</p>
<p>Unfortunately the GoF book, in its attempt to make Patterns more
accessible, also (partly due to its presentation of Patterns, and
partly due to the way it has been read by the development community
at large) accidentally popularised some misconceptions. For
example:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Patterns are for object-oriented design, and there are
twenty-three only, no more and no less</p>
</li>
<li>
<p>A Pattern is a configuration of classes that works in more than
one place.</p>
</li>
<li>
<p>Patterns are invented</p>
</li>
</ul>
</div>
<p>Whereas, in reality (respectively):</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Patterns occur at all stages of the development process</p>
</li>
<li>
<p>A Pattern captures a problem, a solution, and the tradeoffs
involved</p>
</li>
<li>
<p>Very important: Patterns are harvested from existing
practice/experience</p>
</li>
</ul>
</div>
<p>In my Overload 60 editorial &quot;An Industry That Refuses To Learn&quot;,
I expressed my concerns that by bringing Patterns to the attention
of the development community at large, the GoF book has lead to
them being hijacked and turned into a buzzword - not because of any
fault of the GoF, but because it is in the nature of the industry
to do this. I am finding more and more, that having the phrase
&quot;Design Patterns&quot; on my CV is becoming advantageous when applying
for contract work, when it comes to playing the inescapable
&quot;buzzword bingo&quot; with the agencies. I have a recollection from an
interview, of being asked if I was familiar with &quot;The Patterns
Book&quot;; I recall telling the interviewer, yes, I've read &quot;Software
Patterns&quot; by James Coplien. Naturally that approach didn't get me
anywhere. In passing, and for the record, I regard &quot;Software
Patterns&quot;<sup>[<a name="d0e67" href="#ftn.d0e67" id=
"d0e67">1</a>]</sup> to be a much better candidate for being The
Patterns Book than the GoF book, because it is much more likely to
leave the reader with an understanding of what Patterns are and
what they can offer.</p>
<p>Above, I cited indexing as an example of speeding up lookup in a
data structure subject to certain tradeoffs being acceptable. The
industry's hijacking of Patterns has meant that the tradeoffs
element has been lost. Given that the most effective means of
learning is by example, the loss of tradeoffs means that a valuable
example of considering tradeoffs when considering solutions has
been lost.</p>
<p>Anyway, at this point I'd like to move on to a different but
related topic, and this time on a more positive note. In this
editorial and in my previous one mentioned above, I have talked
about the how the software development industry has hijacked
concepts and practices and turned them into buzzwords. Well, it
seems this has - by accident rather than design - lead to an area
of improvement, and I can write about something other than doom and
gloom.</p>
<p>Back in the early days of the desktop PC, programmers typically
just sat down at the computer and wrote code, testing their work by
some sequence of random actions that involved running the program
they were working on and seeing what happened. Their practices were
unfortunately a far cry from the rigor of their mainframe
counterparts. Today the computers used as both desktop workstations
and as servers, are much more advanced that the PCs of ten and
twenty years ago. Further, the software that runs on them is much
larger in scale and much more complex. However, all too often, the
software development practices have not advanced. Until now, that
is...</p>
<p>It seems that one of the age-old practices of the mainframe
developers of old, namely that of unit testing, has resurfaced!
You've probably heard mention of &quot;Test-Driven Development&quot; (aka
&quot;TDD&quot; or &quot;Test-First Development&quot;) in various places over the last
few months. Well, a friend of mine went for an interview recently,
and was asked what he knew about this practice. He got the job, and
it played a part that he'd read Kent Beck's book &quot;Test-Driven
Development&quot;<sup>[<a name="d0e81" href="#ftn.d0e81" id=
"d0e81">2</a>]</sup>, which went down well with the interviewer. I
have noticed recently myself, this phrase is beginning to be
mentioned occasionally when the agencies reel off their list of
buzzwords.</p>
<p>Granted, TDD is a bit more than just unit testing (it advocates
that a piece of code's tests should be written before the code
itself is written), but that's not really the point. The point is,
there must be some ironic twist in the fact that unit testing is
finding its way back into mainstream workstation/server
programming, simply because someone thought up a buzzword - or
rather a buzz-phrase - to associate with it. Don't get me wrong
though, I'm quite happy that TDD is becoming trendy. Sadly it was
for the wrong reasons that TDD came to the attention of this
development community at large, but it can only have a positive
effect on the quality of software.</p>
<p>In &quot;The Value of What You Know&quot;, Alan finishes with the
sentiment to the readers: &quot;I'll have to trust you'll have your own
story to tell&quot;. Well, here I've told (one of) mine - or rather,
I've started in one place and followed a line of thought to where
it led me (there is an element of thinking out loud in this
editorial). I've looked at Patterns - or rather, all that has gone
wrong for Patterns - being adopted by the development community. I
then moved on to look at how by a happy accident TDD has been
adopted, but in this case to the benefit of the projects on which
it is used.</p>
<p>Perhaps we should learn from experience with TDD and take stock
of practices that we would like to see adopted more widely, and
then sharpen our skills in coming up with buzzwords and/or
buzz-phrases that are sufficiently catchy for the majority of
developers and/or managers. Then, as what happened to TDD happens
to other useful practices, maybe the &quot;Buzzword Adoption Pattern&quot;
will start to emerge.</p>
</div>
<div class="footnotes"><br>
<hr class="c3" width="100">
<div class="footnote">
<p><sup>[<a name="ftn.d0e67" href="#d0e67" id=
"ftn.d0e67">1</a>]</sup> Available as a free download from:
<a href="http://www.bell-labs.com/user/%20cope/Patterns/WhitePaper"
target="_top">http://www.bell-labs.com/user/
cope/Patterns/WhitePaper</a></p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e81" href="#d0e81" id=
"ftn.d0e81">2</a>]</sup> Note that Kent Beck is completely open
about the origins of unit testing. In his book &quot;Extreme Programming
Explained&quot;, he asserts that XP is built on the premise that its
practices are of proven effectiveness.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
