    <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  :: ACCU Conference 2005</title>
        <link>https://members.accu.org/index.php/articles/819</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">CVu Journal Vol 17, #4 - Aug 2005</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/c76/">Journals</a>

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

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c95/">174</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;ACCU Conference 2005</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 August 2005 05:00:00 +01:00 or Wed, 03 August 2005 05:00:00 +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>I was inspired by Pete Goodliffe to write up some of my
experiences from the ACCU conference in Oxford last April, as he
did in the June issue of C Vu. Unfortunately the deadline for that
issue whooshed past before I was able to get it finished, but
perhaps that's not so bad as it means you get two consecutive
issues containing conference reports.</p>
<p>These reports are based on the notes I made at the time, so if I
have reported anything incorrectly you can blame me for not paying
proper attention during the conference sessions. I hope they give a
taste of the kind of things you can learn about in the formal
sessions (you can of course learn many other things in the informal
&quot;sessions&quot; in the hotel bar and the pubs of Oxford!) I have only
omitted a couple of sessions, and that's because those were so
interesting I didn't make good notes!</p>
<p>I would like to point out that all the sessions I attended were
worthwhile and interesting, a testament to the ability of the
presenters and relevance of their subject matter. I didn't fall
asleep once, not even in any after lunch talks!</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e28" id="d0e28"></a>Wednesday
Keynote: Ross Anderson</h2>
</div>
<p>The first keynote speech of the conference was on the subject of
security, a subject of course that has heightened importance in
these days of script kiddies, phishing, DDOS, and other such
threats. It was also a keynote on the subject of Open Source vs.
Proprietary software, a nice controversial subject guaranteed to
get the conference delegates talking on the first day of the
conference proper.</p>
<p>After struggling with failing audio amplification, Ross posed
the question: <span class="emphasis"><em>Which is better for
security, Open or Closed systems?</em></span></p>
<p>In order to try to answer the question he turned to statistics
and mathematics, and made an analogy between thermodynamics and
software development, where the number of bugs in a software system
is the analogue of the temperature of a physical system. At first I
feared the mathematics would make this a rather dry keynote,
however this wasn't to be and Ross moved on, making the speech more
interesting as it progressed.</p>
<p>According to Ross it turns out, rather controversially, that
open and closed source systems are equally good when it comes to
finding and removing vulnerabilities (bugs) in them, because the
statistics shows that the benefit from the undoubted increased
initial rate of bug finding in the open source world is cancelled
out in the closed source arena.</p>
<p>Having dropped this bombshell on the open-source advocates in
the audience, he qualified this with the phrase &quot;in an ideal
world&quot;, and pointed out that nothing is black and white - various
factors affect this equivalence, then becoming the first to mention
one of the phrases of the conference, &quot;Symmetry breaking&quot;. Then
Ross moved on to report real-world experience backing up his
findings, and empirical studies designed to identify the best
approach to bug finding and fixing.</p>
<p>Concluding, Ross compared the process of software development
with that of medicine: It started out as rather a black art, known
only to initiates, but is now big enough to enable statistical
methods to be used to help all of us.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e45" id="d0e45"></a>Pete Goodliffe:
Life in the Software Factory</h2>
</div>
<p>In a packed Cartoon room, Pete started off by nearly alienating
his audience when he said, &quot;There are a lot of dross programmers
out there!&quot; Of course everyone in the room knew he was not talking
about them, was he?</p>
<p>To get his audience involved, Pete then plucked several
volunteers from the audience, not all of whom were called Alan (or
Allan), and proceeded to use them to create a simulation of a
software program. This was great fun and involved ultimately
several threads passing data, in the form of a ball, around.</p>
<p>This generated much discussion and quite a bit of heckling from
the audience, not for the first time in this talk. However the fun
was now over and Pete moved on to his slides, beginning with a
diagram showing a target with &quot;the individual programmer&quot; in the
middle. I don't think this is what was intended however, as the
idea was to show levels of teamwork - the main theme of this
session.</p>
<p>The message from this talk was that software development
management structure affects code, at least the &quot;code shape&quot;. To
clarify this, Pete listed seven team disasters or diseases,
followed by a discussion of the opposite - team health.</p>
<p>Finally we were urged to use one of Pete's action sheets to
actually go and achieve something positive as a result of this
talk. Hopefully some people actually did this!</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e58" id="d0e58"></a>Jutta Eckstein:
Planning, Estimating, &amp; Correction in an Agile World</h2>
</div>
<p>In this session, Jutta talked about how planning fits in to the
Agile software development methodologies' short release cycles. The
assumption seemed to be that most of the audience were at least
fairly familiar with the concept of the Agile methodologies, but to
be sure, Jutta began by reiterating their main points. The one that
stood out the most was that &quot;working software is a measure of
success&quot;.</p>
<p>Moving on, the session proper began by discussing the short
&quot;time boxes&quot; used in Agile development, and in particular, what was
the best day of the week to finish each time cycle. Aided by two
energetic members of the audience, both of whom were called Allan
(or Alan) Kelly, it was quickly established that whatever day you
settled on, it shouldn't be Friday.</p>
<p>Jutta continued on the discussion of various considerations when
planning Agile projects. Many of these seemed like common sense,
but like much good advice you don't always think of it until after
the event, so having it presented in black and white is helpful. An
example of a common sense point is, when requirements change - and
they will -- don't try to control all four of the following
factors: <span class="bold"><b>Time</b></span>, <span class=
"bold"><b>Project scope</b></span>, <span class=
"bold"><b>Resources</b></span>, and <span class=
"bold"><b>Quality</b></span>. It seems obvious but many people
working in traditional methodologies would try, and fail. Leading
from this is the idea that fixed-price projects are BAD, but
realistically they are common, so you must plan to vary the scope
or the time of such a project, but not both!</p>
<p>The key point underlying most of the principles is that your
plan should be result-oriented, in other words you aim to deliver
working software to the client. After discussing the planning of
the Agile project's iterations, Jutta moved on to talk about
measurement of results and reflection on past iterations or
releases. Such feedback is vital in planning the next
iterations.</p>
<p>Summary: Remember, requirements WILL change, this is not a bad
thing because it means the customer knows more clearly what he or
she wants. However this means we can't begin with &quot;a plan&quot;, but
rather engage in the activity of &quot;planning&quot; throughout the life of
the project.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e83" id="d0e83"></a>Paul Grenyer:
Aeryn</h2>
</div>
<p>Aeryn is a C++ test framework Paul developed to help him test
his software. It can be used for unit-testing but is not specific
to this function. Apparently it's named after a character in a
television science fiction series.</p>
<p>Aeryn makes heavy use of macros, which Paul decided to state
up-front, in case any of the audience had &quot;a problem&quot; with that.
No-one did (or were brave enough to admit that they did) which was
a relief as otherwise the session could have digressed straight
away into a holy war over when and where to use macros.</p>
<p>A multi-layered approach is used, and Paul began at the bottom
level, describing the Test Conditions he has implemented (with
macros!) that allow you to put tests in your code using such
expressions as <tt class=
"literal">IS_EQUAL(LifeTheUniverseAndEverything, 42)</tt>.</p>
<p>The next layer up is that of Test Fixtures, which are functions
and classes containing Test Conditions. Next, Test Cases are
wrappers for Text Fixtures. Finally Test Runner is an object to
which Test Cases are added</p>
<p>Once a Test Runner has been created and appropriate Test Cases
added to it, it can be invoked, whereupon it will run all the test
cases and generate a report of each one's success, or otherwise.
Finally it will return an overall status which can help when
scripting automated runs of test cases.</p>
<p>Paul then showed a simple example using Visual Studio .Net. and
engaged the audience in discussion about the reporting features. He
also showed how Aeryn could be extended to generate custom test
reports.</p>
<p>Finally, because this talk was a relatively short one, Paul
decided to fill the time with a discussion of a testing technique
called &quot;Mock Objects&quot;. This is not related to Aeryn but Paul
included it as it's a useful testing technique.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e103" id="d0e103"></a>Thursday
Keynote, Bjarne Stroustrup: Generic Programming</h2>
</div>
<p>This was always going to be a popular one, and it paid to turn
up early. As one might have supposed, the hall was packed with
expectant delegates eager to hear what news the founder of C++ had
to bring.</p>
<p>Bjarne started off with a threat to mobile phones. Suffice to
say that people hurriedly turned theirs off in fear of being
singled out.</p>
<p>On to the real subject of the day: C++, or to be more precise,
the current state of the language and how it can (will?) be
improved to better support generic programming.</p>
<p>The ability to do generic programming with C++ through templates
has had a major impact on the development and use of the language.
Templates, both through the STL, and through metaprogramming, are a
big success and make many programming tasks easier. But there are
problems, which Bjarne described as &quot;the language is straining&quot;
under the effort. Certain error messages are an abomination, and
some uses of templates simply require too much brain power!</p>
<p>Bjarne stated that the aims of the language additions he was
describing were to support generic programming and templates. He
described the following three areas for improvement:</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>Minor improvements including auto and decltype which are used to
enable the compiler to work out the actual type of a variable
itself, and template aliases which should allow &quot;template
typedefs&quot;.</p>
</li>
<li>
<p>Concepts - these are a kind of restriction on what &quot;kind&quot; of
class a typename passed as a template parameter can be. For example
currently when you say &quot;typename T&quot; the user is free in principle
to pass any type they want as T. Using concepts you could tell the
compiler that only types usable as forward iterators, say, are
allowed.</p>
</li>
<li>
<p>Initialization - the final improvement Bjarne described was to
allow easier initialization of container classes with a list of
items. This can be done with a kind of &quot;sequence constructor&quot;.
Other constructor improvements were to be expected, including
forwarding constructors.</p>
</li>
</ol>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e126" id="d0e126"></a>Bjarne
Stroustrup: Direction for C++0x</h2>
</div>
<p>This two-presenter talk followed on from the Bjarne's keynote,
and dealt with similar items, ie. changes we can expect to see in
the next C++ standard, expected within 10 years (not that long in
ISO standard-time!).</p>
<p>Bjarne began by defining the problems faced by the standards
committee when trying to &quot;fix&quot; C++. Namely, that people want
improvements but you can't please everyone and we also want
stability.</p>
<p>So why change? The language must adapt but carefully! He
described a list of &quot;rules of thumb&quot; to be followed by the
committee with the intention of minimizing problems with new
features.</p>
<p>After the talk, Bjarne opened the floor to questions, and some
discussion on the merits of deprecating features followed, before
he gave way to the co-presenter of this session, Herb Sutter.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e137" id="d0e137"></a>Herb Sutter:
Something cool in C++0x</h2>
</div>
<p>As if Bjarne wasn't sufficient draw, the first session was
combined with a talk by one of ACCU conferences most popular
speakers. Herb, as he often does, had given this talk a subtitle -
&quot;The Concurrency Revolution&quot;. His point was that concurrency was
&quot;here&quot;, and is a revolution on the scale of &quot;the OO revolution&quot;. By
which Herb means, and I quote directly, &quot;<span class="quote">It
will change the way you write software</span>&quot;.</p>
<p>One last quote from the introduction to make the point:
&quot;<span class="quote">The state of the industry is
terrible!</span>&quot;</p>
<p>Herb really, really wanted to get the point across that
concurrency is a big issue and getting bigger. And if we're not
careful it's going to be a big problem. He began a list of truths
by by describing the fact that Moore's famous law just didn't apply
any more. A &quot;wall&quot; had been hit and we can't have faster
single-threaded programs any more. Instead, through innovations
like dual-core processors and Hyperthreading, we get faster
multi-threaded programs, which means we all have to learn to be
multi-thread programmers.</p>
<p>The next list after Truths, was Consequences. This was all about
issues with memory models (we need guarantees), locking (broken!),
and something about Santa Claus and elves that I haven't come
across before!</p>
<p>Finally, appropriately, was the list of Futures. Herb pointed
out that non-mainstream languages are better but this doesn't help
the majority of programmers.</p>
<p>A thought-provoking talk.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e157" id="d0e157"></a>Francis
Glasborrow: Proposals for Change</h2>
</div>
<p>Continuing the day's theme on the future of C++, Francis began
by explaining that the C++ standard committee was known as
SC22-WG21 and if we want to have a say, we should get involved,
urging us to Google for that string of characters.</p>
<p>Now began the list of proposals under consideration for the next
version of C++, beginning with the Forwarding Constructor. This
brings the much-desired ability for one class constructor to
forward to another at the initialisation stage, rather than having
to call an ordinary member function from the constructor body.
However it also raises the question of when is the class considered
to be complete? When one constructor has finished? When ALL
constructors, including any forwarded to, have finished? This
subject is still under discussion.</p>
<p>Another proposal Francis described was the idea of Explicit
Classes. These are classes that have no automatically-generated
classes (copy constructors and so forth). The idea is that there
will be switches to explicitly re-enable the generation of these
functions.</p>
<p>Francis then described a couple of features that are on hold
because of overlap with other proposals, before finally mentioning
the idea of extended &quot;switch&quot;. Currently the C and C++ switch
statement can only use constant integers for the case values. I
have known people familiar with other languages, where this is not
the case, express bewilderment at why this should be so. This
reaction is commonest with newcomers who want to switch on a
string, and can't understand why they can't put a complete string
value at each case. Francis proposed relaxing this rule and
allowing more flexibility. Just how much is yet to be decided -
should we allow variables as well as constants? In that case why
not allow any expression at all. Then the switch would be
transformed into simply &quot;syntactic sugar&quot; for a multi-level if-else
statement.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e168" id="d0e168"></a>Allan Kelly:
Software Development As Learning</h2>
</div>
<p>Allan presented a highly-interactive session in which he
presented his idea of how software development and learning are
related.</p>
<p>He started by noting that the solution domain (eg. of C++), the
application domain, and the process domain (&quot;how we build
software&quot;) overlap and interact.</p>
<p>Next Allan spoke about learning. Software is the embodiment of
knowledge, and learning continues after development has finished.
Why is learning important? - because it can enable us to get better
software.</p>
<p>The next point led to an audience discussion. Allan stated that
learning creates change, and change creates learning.</p>
<p>There was much discussion of points covering information,
knowledge, action, problem-solving, and different types of learning
(single-loop, double-loop, with triple-loop introduced into the
arena by Jim Coplien in the audience).</p>
<p>Now, Allan introduced a phrase to describe bodies like the ACCU:
Communities of practice. This is a better term than something like
&quot;society&quot;, to describe a group which is not an official
professional body or guild or suchlike, but which develops standard
practice in the industry and encourages learning.</p>
<p>Finally there was more discussion, this time with a whiteboard,
in which Allan solicited ideas from the audience for how to improve
learning.</p>
<p>It was a very thought-provoking talk, and different in some ways
from the majority of conference sessions. Many people left the room
saying what a success it had been.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e187" id="d0e187"></a>Friday
Keynote: Jim Coplien - Beyond the Curse of Symmetry</h2>
</div>
<p>In another packed keynote, Cope (as he tends to be known) warmed
up the audience with a display of amusing slides, including some
pictures of Bjarne Stroustrup and Kevlin Henny looking very bizarre
indeed. The reason for the bizarreness was that the pictures had
been altered so they were completely symmetrical, that is the left
side was a mirror of the right side. This neatly and amusingly
illustrated that although we tend to think that we are, humans are
not really symmetrical.</p>
<p>Cope continued by talking some more (actually rather a lot)
about symmetry. He demonstrated that a starfish displays another
type of symmetry (it's symmetrical when you rotate it by 72
degrees).</p>
<p>That example was used to point out that there are quite a few
different kinds of symmetry. In computing we tend to think of
structures of &quot;blocks&quot;, rather than the UML diagrams we are
encouraged to use. These blocks are symmetrical and regular. In
computing symmetry is the holy grail, but he also pointed out that
broken symmetry leads to beauty. This was backed up with some
quotes from Christopher Alexander, the originator of the patterns
movement in architecture, which has been taken up to
enthusiastically by some of the computer science community.</p>
<p>Returning to the idea of symmetry, via a rather funny joke he
had been told about Iraq and the United States Constitution,
Coplien described the physical process of k-meson decay, which
broke an underlying symmetry and was apparently responsible for the
overal balance of matter against antimatter in the universe.
Consequently, he suggested, God is left-handed. A wag in the
audience asked whether He drove on the left too!</p>
<p>Finally returning to computing, there are many design methods
that break symmetry. C++ reflects reality by allowing us to express
broken symmetry. In this respect reality is messy - or, since the
symmetry is broken, is it beautiful?</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e200" id="d0e200"></a>Frank
Buschmann: Model-Driven Software Development</h2>
</div>
<p>According to Frank Buschmann, Model-Driven (software)
Development, or MD(S)D, is motivated by &quot;the software crisis&quot;.
Software development is expensive, and despite multi-structured and
component services design, complexity hasn't gone away.</p>
<p>MDD uses a domain-specific language to specify a model of the
system to be implemented, then uses a model compiler (that is, a
compiler of models, rather than a model of a compiler) to generate
code that implements the system.</p>
<p>Models can be built using common modelling tools such as Visio,
XML, or others.</p>
<p>Frank described a two-step process of building the concrete
design: step one takes the previously-mentioned model, and various
performance, scalability and architecture requirements (and so on).
This generates the architecture. Then step two generates a concrete
design, code and configuration.</p>
<p>Naturally, what you get out of it depends on what you want and
on the domain. As you might expect, and Frank emphasised, the model
must be extremely precise. It takes a lot of up-front effort.
Although it apparently removes the need for coding, MDSD should not
be seen as a silver bullet, but as just another software
development method.</p>
<p>Frank described some apparent disadvantages of the method, such
as:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Off-the-shelf software tools are usually not appropriate, and
custom ones must be developed</p>
</li>
<li>
<p>Skilled software developers are required to implement the
model</p>
</li>
<li>
<p>The domain must be well-understood and have well-defined
boundaries (it seems to me that this applies to any software
development method!)</p>
</li>
</ul>
</div>
<p>Following Frank's description was some discussion with the
audience who were, perhaps understandably, rather sceptical.
Contributions were made by the usual suspects - Henny, Jossutis,
Stroustrup, one of the Allan Kellys.</p>
<p>After this, Frank conceded the audience's point that MDSD was
probably not worth it for single unique software projects. Where it
stands up is when the architecture and model can be re-used for
different applications within the domain.</p>
<p>Finally Frank noted that there were several implementations
including the OMGs MDA, OpenArchitectureware, and Microsoft
Software Factories.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e231" id="d0e231"></a>Hubert
Matthews: Concurrency Requirements</h2>
</div>
<p>Concurrency was one of the topics that cropped up several times
in this conference. Herb Sutter named it as the next big thing in
computer software development, and so this talk was rather
popular.</p>
<p>Hubert started by noting that not much progress has been made in
concurrency development. We still use the same old Critical
Sections, Mutexes and Semaphores to implement the locking and
checking that's required for safe concurrent programming. And it's
still hard.</p>
<p>Next he asked the question, &quot;What do users want?&quot; There are
often unexpressed requirements such as &quot;it must not do Y&quot; rather
than &quot;it must do X&quot;.</p>
<p>The next question is, &quot;What do clients want?&quot; Using the example
of a price lookup for a shopping or catalogue system, what is
needed is a guarantee over time that the price won't change
unexpectedly (i.e. in the middle of a transaction). Note that the
concurrency being described here is that of a client and server
both accessing the same data.</p>
<p>Four types of locking were described:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Exclusive lock</p>
</li>
<li>
<p>Time-based</p>
</li>
<li>
<p>Optimistic</p>
</li>
<li>
<p>None</p>
</li>
</ul>
</div>
<p>Questions are raised - in the case of two clients making changes
to a database record, which one &quot;wins&quot;? The one that read the
record first? The one that makes the write first? The one that read
the record last? Or the one who writes the record last? Arguments
can be made for each. Again, concurrency is hard.</p>
<p>Finally (at least according to my notes) described the so-called
Heisenberg Triple. This is a familiar type of statement that gives
three criteria and tells you, you can have two out of the three,
but not all of them. In this case the three options are Client
consistent with server; Client has data available; and Client is
independent of the server.</p>
<p>To finish with a quote, to achieve a compromise between all of
these, there is usually some &quot;acceptable window of
unsynchronisation&quot;.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e263" id="d0e263"></a>Saturday
Keynote: Kevlin Henny - Five Considerations</h2>
</div>
<p>As it was for the other keynotes, the hall was packed on
Saturday morning, despite following the Speakers Dinner the night
before. Somewhat appropriately, Kevlin began by describing how this
talk was the result of a pub conversation, the details of which are
available in Kevlin's blog at <a href=
"http://www.artima.com/weblogs/viewpost.jst?thread=5432" target=
"_top">http://www.artima.com/weblogs/viewpost.jst?thread=5432</a></p>
<p>The five considerations of the title are five points that Kevlin
came up with in the aforementioned pub conversation, when asked for
advice for beginners in software design.</p>
<p>The first of them is a restatement of the &quot;Less is more&quot;
sentiment familiar to readers of Kevlin's articles - &quot;Less Code,
More Software&quot;. Those readers will be aware that Kevlin sometimes
likes to speak in sound bites, at least in his talks and articles,
and for this point he excelled with &quot;remove to improve&quot;, but,
&quot;Don't encode your code&quot;. In other words concise code is good so
long as it's readable.</p>
<p>The second of the five considerations is undoubtedly the
recurring theme of the conference, &quot;Symmetry&quot;. Kevlin pointed out
that normally, symmetry is seen as good. However this is not always
the case and sometimes it must be broken, a point made by Jim
Coplien in his keynote.</p>
<p>The next subject for our consideration is &quot;Spacing&quot;. In other
words, separation of concerns, frequently touted as A Good Thing in
object-oriented software design. This time it came with a warning
to avoid too much separation, resulting in Fragmentation (A Bad
Thing!) It's also concerned with making your code easy to read
through the sensible use of white space and suchlike.</p>
<p>&quot;Visibility&quot; is the next consideration. Software is aphysical.
As Kevlin pointed out, we can't use our physical intuition about
it.</p>
<p>Lastly, we must consider &quot;Emergence&quot;. This refers to so-called
emergent behaviour in which a few simple rules produce apparently
complex results. One of the classic examples, and the one described
by Kevlin, is birds flocking. A few simple rules like &quot;follow your
neighbour&quot; results in the ability of huge flocks to sweep
gracefully across the sky all apparently knowing where they are
going. In software terms we are being told to use simple rules and
mechanisms such as polymorphism rather than complex sequences of
&quot;if&quot; statements.</p>
<p>Finally, it is important to remember that these considerations
are not rules or recommendations, but just as the word suggests,
things to consider.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e284" id="d0e284"></a>Lois
Goldthwaite: XSLT</h2>
</div>
<p>In this presentation, Lois used her experience of being thrown
&quot;in at the deep end&quot; when having to implement an XSLT (XML
stylesheet language and templates) project, to communicate the
absolute minimum you have to know to get up and running, and
productive, with XSLT.</p>
<p>A sampling of the points Lois made:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>It might be tempting to avoid XML namespaces, but it is
absolutely essential to understand them (and use them) when using
XSLT</p>
</li>
<li>
<p>The minimal template just outputs the XML element content</p>
</li>
<li>
<p>Tools can be useful, such as XML Cooktop and Altova XSLT</p>
</li>
<li>
<p>Test-Driven-Development is recommended when developing XSLT
applications</p>
</li>
<li>
<p>xsl:comment is a useful aid to development, it outputs an XML
comment</p>
</li>
</ul>
</div>
<p>Lois spent a very useful couple of hours showing how XSLT works,
with several sample stylesheets. All in all it was a useful talk
that I believe everyone who attended found useful.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
