    <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  :: Ruminations on Studying Design Patterns</title>
        <link>https://members.accu.org/index.php/journals/539</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 #32 - Jun 1999 + Programming 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/c172/">32</a>
                    (11)
<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/c65/">Programming</a>
                    (877)
<br />

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

                    -                        <a href="https://members.accu.org/index.php/journals/c172+65/">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;Ruminations on Studying Design Patterns</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 26 June 1999 17:50:53 +01:00 or Sat, 26 June 1999 17:50:53 +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="d0e18" id="d0e18"></a></h2>
</div>
<p>As regular readers will know, I have been spending time over the
last year studying and trying to digest the contents of Design
Patterns (Gamma, Helm, Johnson &amp; Vlissides). I have decided to
call it a day. The reasons for this decision are probably more
instructive than my attempts at adding to your understanding by my
articles here.</p>
<p>One of the principles for Design Patterns (or Patterns in
general) is that they are the distillation of good practice based
on at least three distinct uses. I have on several occasions taken
others to task because the write or speak about 'inventing' a
Pattern. Patterns can, by their very nature, only be discovered or
recognised. I suspect that most of the single thread design
patterns have already been discovered and documented which is what
makes them a useful tool in furthering design of new software.</p>
<p>Let me digress for a moment and ask you how you would describe
symphonic form to someone whose musical experience was restricted
to playing solo music on a Recorder? Even if they were a superb
technician with the instrument and had a profound sense of musical
interpretation they would completely lack the relevant experience
for any meaningful understanding of orchestral musical forms. The
first requirement would be to broaden their experience by exposing
them, at least as listeners, to a much wider range of musical
experience. Only at that stage could you hold a dialogue with them
on the subject of different orchestral forms. Even then their grasp
would probably be pretty mediocre, they would need to extend their
understanding by either dissecting several substantial pieces or by
writing (however badly) some orchestral music themselves.</p>
<p>Note that I am concerned with understanding and not just a
superficial ability to imitate. Much bad poetry, poor writing and
superficial painting comes about from imitation without
understanding. The observer can often identify the lack of quality
without being able to identify what is wrong. For example I can
remember having a professionally produced play (in a major London
theatre) completely wrecked for me by the bad lighting. Most of the
audience knew something was not right, having worked on the
technical side of theatre I could point unambiguously at an
incorrectly placed lighting bar which was far too low. The lighting
engineer should have been sacked because he was clearly incompetent
and destroyed the work of others by his failures.</p>
<p>Now let me return to my studies of Design Patterns.
Fundamentally I am ill-equipped for such a study because I have
insufficient experience of large scale software design. I have
written a couple of reasonably large (25000+ line) programmes but
that does not give me either the breadth or depth of experience to
relate largely verbally described patterns with solutions to
problems that I have experienced. Design Patterns is clearly a good
book for those with relevant experience as it allows them to
crystallise their experience and provides them with a common
language for discussion with others. However, despite claims made
to the contrary, it is not a substitute for experience.</p>
<p>Lower level patterns (such as some of those described by Frank
Buschmann in Pattern-Oriented Software Architecture) and idioms are
fine for me because I have the relevant experience to understand
them and relate them to my own experience. I am also pretty certain
that many of the intermediate patterns are relevant but I need more
help in understanding them. I suspect that I am not alone in this.
I also suspect that many others are hiding their lack of
understanding because they think they ought to know. They use the
terminology, often incorrectly, but in a way that is analogous to
name-dropping.</p>
<p>Let me take a little time suggesting a way forward.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e34" id="d0e34"></a>For
Students</h2>
</div>
<p>I am quite disturbed by the idea that students should be taught
patterns as some kind of academic study. Before they study patterns
they should be exposed to good software design and have a wealth of
material to study. When studying any particular pattern they should
be provided with at least three examples of its correct use as well
as one or more examples of incorrect or inappropriate usage. (It is
only by the contrast between the two that most will be able to
abstract what the pattern is, what it does and why it works)</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e39" id="d0e39"></a>For
Writers</h2>
</div>
<p>What I would like to see is articles (in Overload) that tackle a
single pattern with several examples of its use. The supporting
material could be provided on the ACCU Web site. I would also be
interested to see the production of a series of short books each
dedicated to one or two patterns. Instead of authors looking for
new patterns, let us see knowledgeable authors writing
comprehensively about those that have already been documented. I
know that some will look at this idea with disdain because they
will claim that what is already written is enough. It probably is
for people at their level of expertise but I am pretty certain that
it is not for the majority. Unfortunately working programmers will
claim they do not have the time to study. This is why I suggest a
series of short monographs. A team leader should be able to ask
members of his team to read up on a specific pattern. Students
should be able to go and study a pattern in depth. This means that
the examples must be properly explained and an attempt made to
document why the pattern solved a real design problem. It is no
good saying patterns are obvious. That is among the least helpful
of responses to someone asking for help.</p>
<p>A story told about an Oxford lecturer (one of the Whitehead
brothers, I think) illustrates this point. Apparently one day he
wrote a theorem or lemma up on his blackboard and declared that the
proof was obvious. He then looked again and walked out of the room.
Forty minutes later he returned to what was left of his audience
and said 'It was.'</p>
<p>Now which one of you is willing to pick a pattern and present
three suitable uses of it in sufficient detail so that even I can
understand what it is and why it solves the problem? If no one does
I will begin to suspect it is because none of you understand any of
the Design Patterns well enough to explain them with examples.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
