    <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  :: A Personal View</title>
        <link>https://members.accu.org/index.php/articles/764</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 11, #2 - Feb 1999</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/c133/">112</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;A Personal View</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 February 1999 13:15:29 +00:00 or Wed, 03 February 1999 13:15:29 +00:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="section" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>When I first started programming Francis used to insist that
programming was not something you did at a computer. In the days of
paper tape or punched cards this was easy to see because you had to
transfer your code to the input medium. If the program failed you
then had to work out why and correct the physical representation of
your source code. This allowed you to focus on the process of
writing code and also made you reluctant to 'try it and see.' The
advent of teletypes began to break this down. It began to become
possible to debug your code interactively. In my view this was not
a step forward.</p>
<p>Availability of desktop machines only aggravated the problem
(unless, like Francis, you were having to hand code in hex or octal
- his first machine was a cassette driven 380Z and he did not have
an assembler). As soon as reasonable compilers and programmers'
editors became common it became easy to patch your code and try
again. Francis used to insist that all modifications to code were
worked out on paper (a print out of the previous version was
acceptable). God help you if he found you amending code without a
written version beside you. I have always been grateful for this
early discipline as it helped focus on programming as an
intellectual exercise. Like most, I use a word processor for
writing these days but I keep a clear difference in my mind between
the process of generating source and the process of compiling and
testing it.</p>
<p>So what tools do you use for your coding. If you just use an IDE
then you are at about the level of the DIY expert who buys
flat-pack kitchen cabinets, assembles them and mounts them on the
wall. You can always spot this kind of DIY work because the
cabinets never quite line up. Professionals also use flat-pack kits
but they know that they should be using a few other tools and
skills as well.</p>
<p>Let me start with documentation. It is not enough to use the
assembly charts that come with the product, and relying on the help
files shipped with your IDE are also only part of what you need. A
good reference library is essential. Depending on the level at
which you are working you will need anything from a single good
language reference to a couple of shelves of books covering
everything from design, through platform specifics to books on
algorithms and language (probably more than one language). Not only
should you have these books but you should have a working knowledge
of them. Anything less and you are a hacker.</p>
<p>The woodwork teacher at the school I went to had a rack of
pencils on his desk marked 'Word Processors.' He was right. The
specific tool is less important than what you do with it. Before
you started a woodwork project you had to describe your objective
in both words and diagrams. The same should apply to a program
project. So you should have tools that will produce diagrams as
well as ones to capture words. With these you should produce the
project specific documentation. I know many hate doing that, but
would you attempt to build or modify a house without any plans? You
would? Then you must be a cowboy builder.</p>
<p>Now consider what other tools you should be using. If you were
an electrician I hope that you would include a test-meter in your
toolbox. Testing wiring should include detection of unconnected
earth wires as well as swapped live and neutral wiring. Putting a
switch in the neutral wire rather than the live one may appear to
work until the day your customer electrocutes themselves on an
apparently off socket. In other words an electrician's tools
include more than those required to install circuits in your house
(or they should). As a programmer, what tools are you using to
ensure the correct connections between parts of your program. Do
you use Lint or an equivalent? If not why not?</p>
<p>Do you check the parts of the code that are only used when
something goes wrong? You don't? When was the last time you checked
your smoke alarm or your burglar alarm? Do you think fire
extinguishers should just be left gathering dust? It is no good
having emergency equipment if you do not know it works. Every time
you change a program the relevant 'emergency' code should be
tested. Of course this takes time (though, with proper design, most
tests can be automated) but not near as much time as will be wasted
when an escape route fails.</p>
<p>All engineering involves a certain amount of pragmatism, and
given time and cheap resources the ancient Roman method of building
aqueducts demonstrably worked but I doubt that the slaves who were
killed during the failed attempts would agree that it was a good
design mechanism. Things like the Comet disaster (the first
commercial jet passenger plane that blew up several times before
the designers realised that the problem was metal fatigue not
sabotage) will happen but responsible engineers learn from their
disasters (the Tacoma Narrows suspension bridge is another
example).</p>
<p>Too many software developers are neither professional nor
engineers because they do not learn from their mistakes, and
usually do not even admit to making them.</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
