    <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</title>
        <link>https://members.accu.org/index.php/articles/474</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">Project Management + Journal Editorial + Overload Journal #39 - Sep 2000</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/c13/">Topics</a>

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

                                            <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/c165/">39</a>
<br />

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

                    -                        <a href="https://members.accu.org/index.php/articles/c66+185+165/">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</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 26 September 2000 17:50:58 +01:00 or Tue, 26 September 2000 17:50:58 +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>
<h3>A Change of Job</h3>
</div>
<p>I have recently, once again, changed employers. The first month
was depressing, the second was exciting. This column charts my
journey between these tropics.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e24" id="d0e24"></a>Month One:
Depression</h2>
</div>
<p>The company I have joined is both small and young; one hundred
people and one year old. They have a rather dull business problem
to solve; from which they hope to reap buckets of money. But while
problem may be mundane, the ultimate solution is not.</p>
<p>They have succeeded in a small way by following the usual
software development methodology: Analyse the business knowledge,
map it into a model, and implement the code. Well, to be honest,
they skipped the first and second bits and just wrote the code, but
that's only where the trouble begins. As each new requirement of
the system arrives we iterate through the whole process again. This
is what you'd expect for major software releases with a year
between revisions, but in our case the deployment of each and every
customer introduces new requirements into the system, which we hope
to be a weekly event. The implemented solution meets neither the
scalability nor flexability requirements of the business.</p>
<p>This failure stems from the short sightedness of the original
system designers in not focusing on the fundamentals and on their
reliance upon 'tools'.</p>
<p>One component of the extreme methodology that I disagree with is
'build for today, not for tomorrow'. The majority of my work has
been on large server systems that had to be built today for
tomorrow and serve as a platform for the future. In some cases
designing functionality two versions ahead, and three years into
the future. To me architectural vision is of key importance in any
software project.</p>
<p>My approach to software engineering has always been from first
principles. Step 1: Identify and document the problem. This is
often hard, as the people closest to the problem tend to only know
a small piece if it well. This is reminiscent of the five
blindfolded men asked to identify an object in a room. One man
believes it is a snake, another believes it to be a tree. I forget
what the other three were up to, but the thing is actually an
elephant. Step 2: Devise a solution from first principles. Ignore
implementation; just solve the problem. Step 3: Search for
appropriate off the shelf systems, components, tools and
technologies that could form an implementation. Step 4: Buy what
can be bought, and build what can't. Step 5: Integrate.</p>
<p>I have rarely come across so many people able only to think in
terms of tools and technologies. Given a problem they'll cast about
for any vaguely relevant tool hoping it'll serve as a solution.
They'll then combine it with some other randomly selected
component. If that doesn't work out they'll blame the tool, and
decide that the next version of the tool will actually solve the
problem. Or, that some other brand of tool within the same category
of tools is in fact a better solution. Never questioning whether
the category of tool is even appropriate. Actually studying the
problem from a fundamental viewpoint and developing a language and
model of the problem domain seem to be alien concepts to these
engineers. [<a href=
"#Conceptual-Modelling">Conceptual-Modelling</a>]</p>
<p>My Depression: The body of a startup company is a host for
dysfunctional behaviour.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e44" id="d0e44"></a>Month Two:
Excitment</h2>
</div>
<p>Having determined the sanity bisector, I settled down to think
about the problem from scratch.</p>
<p>The fundamental problem is that the soft code of the system has
been hard coded. The system needs to be able to adjust itself
dynamically to a changing environment at runtime. Czarnecki and
Eisenecker describe this type of system as being adaptive in their
superb book 'Generative Programming'. [<a href="#GP">GP</a>]</p>
<p>Having identified the real problem, I set about to document the
problem, and to define the requirements of a solution. I then cast
about in the software engineering literature for examples of
similar problems and solutions. For this kind of exploration I find
the digital libraries of the ACM and the IEEE to be invaluable.</p>
<p>Unfortunately I can't say too much about the details of the
problem or solution, as the lawyer guy in the office next door will
have a fit. I can however discuss the topics I've been
investigating recently, which I hope might be of interest to some
of you.</p>
<div class="variablelist">
<dl>
<dt><span class="term">XMI:</span></dt>
<dd>
<p>Rational Inc. and the Object Management Group (OMG) are working
on a standard interchange format for modelling tools. XMI, the XML
Metadata Interchange, is an XML encoding of a UML model. This has
the potential to allow the seamless sharing of models between
development tools. [<a href="#XMI">XMI</a>]</p>
</dd>
<dt><span class="term">XML Schema:</span></dt>
<dd>
<p>The XML specification includes 'document type declarations'
(DTDs) that provide a grammar for describing the contents of a
class of document. Commerce One Inc. and Microsoft Inc. have
developed more advanced schema languages, SOX and XDR respectively.
The W3C accepted these as proposals for standardization, but
elected to develop their own representation, named 'XML
Schema'.</p>
</dd>
<dt><span class="term">XML for UML:</span></dt>
<dd>
<p>Rational Inc. and Commerce One Inc. have developed a
specification suggesting how UML may be used to design XML Schemas.
[<a href="#UML-XML">UML-XML</a>]</p>
</dd>
<dt><span class="term">OCL:</span></dt>
<dd>
<p>The Object Constraint Language is a component of the UML used
for writing model constraints. It can be used for writing
invariants on classes, and for specifying the pre and post
conditions of operations. It has come out of the work of the formal
methods community, so has a very strong formal mathematic
background. I'm not aware of any mainstream modelling tools that
support the use of OCL, but hopefully there will be support soon.
[<a href="#OCL">OCL</a>]</p>
</dd>
<dt><span class="term">MOF:</span></dt>
<dd>
<p>The Meta Object Facility is an OMG standard that describes the
UML metamodel. A metamodel is a model of a model. In the case of
UML it's a model of UML, and of course that model is itself written
using UML. The OCL was in fact added to the UML specifically for
writing the UML metamodel UML model. [<i><span class="remark">No
the room is not spinning. At the first sitting this specification
made me feel quite ill. We should leave the discussion of the
meta-metamodel for another time.</span></i>]</p>
</dd>
<dt><span class="term">CWM:</span></dt>
<dd>
<p>The Common Warehouse Metamodel is a specification for modelling
metadata for relational, non-relational, multidimensional systems,
and most other objects found in a data-warehousing environment. In
addition, CWM models enable users to trace the lineage of data as
CWM provides objects that describe where the data came from and
when and how the data was created. Essentially, the CWM is a
specification for a repository of UML models.</p>
</dd>
</dl>
</div>
<p>Until this month all of these efforts were totally unknown to
me. It's easy to get yourself into the comfortable position of
thinking that you've pretty much seen a bit of everything in
software engineering. My team leader gave me some advice during an
exit interview some years ago. 'You're bright, but never stop
learning. If you get comfortable, you're doomed.'</p>
<p>If you're feeling comfortable, then you're probably not an
Overload subscriber. But, if your mind is parked in front of the
television with a beer in one fist and the remote in the other:
then I highly recommend 'Generative Programming'. It opens up a
whole new horizon of thought.</p>
<p>My excitement: I am no longer a mere-programmer. I am a
meta-programmer.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e113" id="d0e113"></a>Kevlin</h2>
</div>
<p>I picked up a copy of Java Report the other day in Printers
Inc., ordered a coffee, flicked through the magazine, and there was
Kevlin Henney staring out of page 92. It made me feel so proud: our
Kevlin, international superstar of the object world! [<a href=
"#Printers-Inc">Printers-Inc</a>]</p>
<p>Over the years Kevlin has made a huge contribution to Overload,
and I hope his work between these covers has contributed to his
success.</p>
<p>The subtext of these paragraphs is that each of you should stop
for a moment and think about your contribution to Overload, and
what Overload could do for you. Without Kevlin stepping in at the
last moment with an article previously printed in C++ Report this
issue would not have been completed.</p>
<p>Each of us has a worthy software tale to tell, perhaps not with
the eloquence of Mr. Henny, but the editorial board are experienced
at helping authors polish up their texts for publication.</p>
<p>Software is just another medium for knowledge. [<a href=
"#ACM-Article">ACM-Article</a>] If you're a programmer, then you're
a writer.</p>
<div class="bibliography">
<div class="titlepage">
<h2><a name="d0e132" id="d0e132"></a>References</h2>
</div>
<div class="bibliomixed"><a name="ACM-Article" id=
"ACM-Article"></a>
<p class="bibliomixed">[ACM-Article] The Case for a New Business
Model: Is software a product or a medium, Phillip G. Armour,
Communications of the ACM, August 2000, Volume 43, Number 8.</p>
</div>
<div class="bibliomixed"><a name="Conceptual-Modelling" id=
"Conceptual-Modelling"></a>
<p class="bibliomixed">[Conceptual-Modelling] Conceptual Modelling,
Magnus Boman, et. al.</p>
</div>
<div class="bibliomixed"><a name="GP" id="GP"></a>
<p class="bibliomixed">[GP] Generative Programming: Methods, Tools,
and Applications. Krzysztof Czarnecki, Ulrich W. Eisenecker.</p>
</div>
<div class="bibliomixed"><a name="OCL" id="OCL"></a>
<p class="bibliomixed">[OCL] UML - Object Constraint Language, Jos
Warmer.</p>
</div>
<div class="bibliomixed"><a name="Printers-Inc" id=
"Printers-Inc"></a>
<p class="bibliomixed">[Printers-Inc] Book shop and coffee bar,
downtown Mountain View, California. See Overload 30, August
1999.</p>
</div>
<div class="bibliomixed"><a name="UML-XML" id="UML-XML"></a>
<p class="bibliomixed">[UML-XML] UML for XML Schema Mapping
Specification.</p>
</div>
<div class="bibliomixed"><a name="XMI" id="XMI"></a>
<p class="bibliomixed">[XMI] XML Metadata Interchange, IBM.</p>
</div>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
