    <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  :: On Re-Inventing the Wheel</title>
        <link>https://members.accu.org/index.php/articles/1162</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 14, #2 - Apr 2002</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/c115/">142</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;On Re-Inventing the Wheel</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 April 2002 13:15:50 +01:00 or Wed, 03 April 2002 13:15:50 +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>I'm in one of the research groups at the Cambridge University
computer lab. One of the academics in our group has a background in
psychology, and he asked himself something like &quot;What makes some
people want to program, and others want to do things manually?'' He
developed a model that treats it as an investment/pay-off decision
- programming takes mental effort, which only pays off if the
program works. If you think programming is high-risk (i.e., you
think it's very likely that after all that effort you won't get
anywhere), then you'd rather do things manually. (He also thinks
that programmers may be more risk-seeking than others, but that's
probably too much of a generalisation; some of us know very well
that we can write a working program, so the risk is negligible.) I
want to generalise this line of thought for a while. For &quot;doing
things manually'', read &quot;using skills you already have'' (which
might include programming skills), and for &quot;programming'' read
&quot;learning something new''. For example, if you were faced with a
certain development task, do you just hack it out in C, or do you
use a library of some sort? What if using that library means that
you have to put in a lot of effort to learn it, you're not 100%
sure if it will do the job anyway, and it seems a lot easier to
just go ahead and re-invent the wheel? Or what if you don't know
and want to find out if there's a library &quot;out there'' that will
help you - how much time do you spend looking?</p>
<p>Of course, there's more to it than that. The library's code will
probably be more reliable than your first attempt, so if you want
something reliable then you have to weigh learning the library
against spending a lot of effort on getting your own code right
(and if the library is still maintained then its maintainers may
save you some work in the future as well, such as incorporating
better algorithms or adding support for new hardware). But
reliability does not always matter; you might just be playing with
prototypes that you're going to throw away, or use once and check
the result, or whatever, and you might not foresee spending much
effort on your own code. Still, you might feel that learning the
library gives you knowledge that you can re-use in the future for
other tasks, so in a sense the extra effort is 'amortised'.</p>
<p>Whether you think learning a library (or a technique, or
whatever) is going to be worth it for the future will depend on how
much you imagine yourself using it in future. If it relies on some
old operating system that nobody uses anymore (including you) then
you're less likely to bother, unless you think that you can later
adapt your knowledge to another, similar library with little
effort. You can apply similar reasoning to writing your own
libraries or other development tools, if it's only you that you're
writing them for; if you don't think you'll ever re-use a component
then you're less likely to make it re-usable.</p>
<p>In practice there are other issues to consider. Availability is
one; if you're a hobbyist programmer then you're not likely to buy
an extremely expensive toolkit, in which case the fact that the
toolkit exists won't make much difference to you. Some developers
don't use tools because they can't accept the terms and conditions,
which might limit the distribution of what they produce, or because
the tools limit distribution in a technical way (such as by
introducing an operating system requirement that the developers
don't want, or by requiring non-standard software to be present on
the system and making installation too complicated).</p>
<p>You might even find yourself spending effort on looking at
existing systems with a view to avoiding the ideas behind them,
especially where patents are involved (unless you want to just wait
and see if they threaten to sue you), or if you're doing academic
research - you're supposed to make &quot;an original contribution to
knowledge'', and woe betide you if your examiners think they know
of someone who's done it before (even if they described it using
words you never thought of searching for); this means that an awful
lot of your time is spent looking into what other people have done
and making sure that you can say what's so different and special
about your idea (ah yes but I used a different user
interface!).</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
