    <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  :: Professionalism in Programming #30</title>
        <link>https://members.accu.org/index.php/articles/789</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">Professionalism in Programming, from CVu journal + CVu Journal Vol 17, #1 - Feb 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/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c182/">Professionalism</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/c77/">CVu</a>

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

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

                    -                        <a href="https://members.accu.org/index.php/articles/c182+98/">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;Professionalism in Programming #30</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 February 2005 13:16:10 +00:00 or Thu, 03 February 2005 13:16:10 +00:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e22" id="d0e22"></a></h2>
<h3>Code Monkeys (Part One)</h3>
</div>
<div class="c3"><img src="/var/uploads/journals/resources/goodliffe-fig1.png" align=
"right"></div>
<div class="blockquote">
<blockquote class="blockquote">
<p>We are just an advanced breed of monkeys on a minor planet of a
very average star. But we can understand the Universe. That makes
us something very special. - Stephen Hawking</p>
</blockquote>
</div>
<p>As time marches relentlessly onwards we're drawing near to the
2005 ACCU conference (you have booked your place, haven't you?)
I've been preparing this year's presentation, and so I thought that
this would be a good opportunity to review what I presented last
year.</p>
<p>In a previous article I asked the frivolous question:
<span class="emphasis"><em>how many programmers does it take to
change a light bulb?</em></span> There could be any number of
answers, but it really depends on who is doing the work. Different
programmers work in different ways and will have their own
individual approach to solve the same problem. There is always
<span class="emphasis"><em>more than one way to do
it</em></span><sup>[<a name="d0e37" href="#ftn.d0e37" id=
"d0e37">1</a>]</sup>, and different programmers' attitudes will
lead them to make very different decisions.</p>
<p>In this series of articles we'll look at this; we'll investigate
programmer attitudes, good and bad, and identify the key ones for
successful programming. This includes how we approach the task of
coding, and also how we relate to other programmers. We'll come to
some surprising conclusions about what makes the best coders.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e43" id="d0e43"></a>Monkey
Business</h2>
</div>
<p>The software factory is inhabited by a strange collection of
freaks and social misfits. Any serious software system is built by
a bunch of these people, with their different skill levels and
attitudes, all working towards a common goal.</p>
<p>The way we work together and the kind of code we write will
inevitably be shaped by our attitude to the work. If everyone was a
diligent, hard working genius then our software would be a lot
better; delivered on time, to budget, with no bugs. We're not
perfect, and unfortunately it shows in the code we write.</p>
<p>To work out strategies to deal with this I'll lead us on a
guided tour through a gallery of programmer stereotypes. We'll see
the different types of code monkey. These are all directly based on
the types of people I have met in the software factory. Of course
it's a necessarily general list; you'll know programmers who fall
into categories other than those listed here, or even fit several
descriptions at once.</p>
<p>Even so, this shameless categorisation will highlight the
important facts and show us how we can improve. We'll see:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>what makes different types of code monkey tick,</p>
</li>
<li>
<p>how to work with each of them,</p>
</li>
<li>
<p>how each code monkey can improve, and</p>
</li>
<li>
<p>what we can learn from each of them.</p>
</li>
</ul>
</div>
<p>As you read each code monkey description, ask yourself:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Are you this type of programmer? How closely does the
description match your programming style? What lessons can you
learn to improve your approach to coding?</p>
</li>
<li>
<p>How many people do you know like this? Are they close
colleagues, and can you work with them better?</p>
</li>
</ul>
</div>
<p>Without further ado, meet The Code Monkeys...</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e78" id="d0e78"></a>1. The Eager
Coder</h2>
</div>
<div class="c3"><img src="/var/uploads/journals/resources/goodliffe-fig2.png" align=
"right"></div>
<p>We'll start with this guy, because he<sup>[<a name="d0e84" href=
"#ftn.d0e84" id="d0e84">2</a>]</sup> probably embodies the traits
of most programmers. The Eager Coder is fast and fleeting; he
thinks in code. An impulsive, natural born programmer, he tends to
write code as soon as an idea forms in his head. He's not good at
standing back and thinking first. So, although an Eager Coder does
have very good technical skills, the code he writes never shows his
true potential.</p>
<p>The Eager Coder often tries to use a new feature or idiom
because it's fashionable, the best thing since the last big new
idea. His desire to try out new tricks means that he applies
technology even when it's not appropriate.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Strengths:</span></dt>
<dd>
<p>Eager Coders are productive, in terms of code quantity. They
write a <span class="emphasis"><em>lot</em></span> of code. They
love learning new stuff, and are really enthusiastic - even
passionate - about programming. The Eager Coder loves his job, and
genuinely wants to write good code.</p>
</dd>
<dt><span class="term">Weaknesses:</span></dt>
<dd>
<p>Due to his unfettered enthusiasm, the Eager Coder is hasty and
doesn't think before rushing into the code editor. He does write a
lot of code, but because he writes it so fast, it's flawed - the
Eager Coder <span class="emphasis"><em>spends ages
debugging</em></span>. A little forethought would prevent many
silly errors, and many hours ironing out careless faults.</p>
<p>Unfortunately the Eager Coder is a really bad debugger. In the
same way he rushes into coding, he dives straight into debugging.
He's not methodical, so he spends ages chasing faults down blind
alleys.</p>
<p>He's a poor estimator of time. He'll make a reasonable estimate
for the case when it all goes well, but it never <span class=
"emphasis"><em>does</em></span> go according to plan; he always
takes longer than expected.</p>
</dd>
<dt><span class="term">What to do if you are one:</span></dt>
<dd>
<p>Don't lose that enthusiasm - it's one of the best
characteristics of a programmer. Because your joy lies in seeing
programs work, to stand back and admire the beauty of code, work
out practical ways to do this.</p>
<p>It mostly boils down to this simple piece of advice:
<span class="emphasis"><em>stop and think</em></span>. Don't be
hasty. Work out personal disciplines that will help you, even
something basic like writing <span class=
"emphasis"><em>THINK</em></span> on a post-it-note stuck to your
monitor!</p>
</dd>
<dt><span class="term">How to work with them:</span></dt>
<dd>
<p>When they work well, these are some of the best people to
program alongside. The trick is to channel their energy into
productive code rather than mindless flapping. They are great to
get pair programming.</p>
<p>Ask an Eager Coder about what he's doing each day, and what his
plans are. Show an interest in his design - it will encourage him
to really think about it! If you rely on an Eager Coder's work, ask
for early pre-releases, and ask to see their unit tests too.</p>
<p>An Eager Coder benefits from appropriate management, to help
with his discipline. Make sure his time is carefully placed on a
project plan (you don't have to plan his time yourself).</p>
</dd>
</dl>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e140" id="d0e140"></a>2. The Code
Monkey</h2>
</div>
<div class="c4"><img src="/var/uploads/journals/resources/goodliffe-fig3.png" align=
"left"></div>
<p>If you ever need an infinite number of monkeys, these guys would
be your first choice. (I wouldn't advise it though, you'll be
picking monkeys for a <span class=
"emphasis"><em>loooong</em></span> time!)</p>
<p>The Code Monkey writes solid but uninspired code. Given an
assignment, they'll faithfully plod through it, ready to be handed
the next one. Perhaps it's a little unfair, but because of their
menial work these guys are also known as grunt programmers.</p>
<p>Code Monkeys have quieter personalities. Afraid to push for good
jobs, they tend to get sidelined on unglamorous projects. They
carve out a niche as maintenance programmers, keeping the aged
codebase going whilst the pioneers are off writing exciting
replacements.</p>
<p>A junior Code Monkey will learn and progress given time and
mentoring, but is given 'low risk' assignments for now. An older
Code Monkey has probably stagnated, and will retire a Code Monkey.
He'll be quite happy to do so.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Strengths:</span></dt>
<dd>
<p>Give them a job and they'll do it, reasonably well, reasonably
on time. A Code Monkey is reliable, and can usually be counted on
to put in extra effort when it comes to crunch time.</p>
<p>Unlike an Eager Coder, a Code Monkey is a good estimator of
time. They are methodical and thorough.</p>
</dd>
<dt><span class="term">Weaknesses:</span></dt>
<dd>
<p>Although a Code Monkey is careful and methodical, they don't
think outside of the box. They lack design flair and intuition. A
Code Monkey will follow the existing code design conventions
unquestioningly, rather than address any potential problems. Since
they are not accountable for the design, they don't accept
responsibility for any problems that arise, and won't often take
the initiative to investigate and fix them.</p>
<p>It's hard to teach a Code Monkey new stuff; they're just not
interested.</p>
</dd>
<dt><span class="term">What to do if you are one:</span></dt>
<dd>
<p>Do you want to explore new areas and broaden your
responsibility? If so, start to strengthen your skills by
practicing on personal projects. Grab some books and study new
techniques.</p>
<p>Push for more responsibility, and offer to join in the design
work. Take the initiative in your current work - identify possible
failure points early, and work out plans to avoid them.</p>
</dd>
<dt><span class="term">How to work with them:</span></dt>
<dd>
<p>Don't look down on a Code Monkey, even if you have stronger
technical skills or greater responsibility. Encourage them -
compliment their code and teach them techniques to improve their
work.</p>
<p>Write your code thoughtfully to make the maintenance
programmer's job as easy as possible.</p>
</dd>
</dl>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e188" id="d0e188"></a>3. The
Guru</h2>
</div>
<div class="c3"><img src="/var/uploads/journals/resources/goodliffe-fig4.png" align=
"right"></div>
<p>This is the fabled mystic genius, a program wizard. The Guru
tends to be quiet and unassuming, perhaps even a little odd. He
writes excellent code, but can't communicate well with mere
mortals.</p>
<p>The Guru is left alone to work on the fundamental stuff:
frameworks, architectures, kernels, and so on. He holds the
deserved respect (and sometimes fear) of his colleagues.
Omniscient, the Guru knows all and sees all. He turns up sagely in
any technical discussion to dispense his expert opinion.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Strengths:</span></dt>
<dd>
<p>Gurus are the experienced magicians. They know all the new
magic, and understand why the old tricks are better. These are the
guys that created magic in the first place. They have a wealth of
experience, and write mature maintainable code.</p>
<p>A good Guru is a wonderful mentor - there's so much to learn
from him.</p>
</dd>
<dt><span class="term">Weaknesses:</span></dt>
<dd>
<p>Few Gurus can communicate well. They're not always tongue tied,
but their ideas fly so fast and at a level beyond mere mortals',
that it's hard to follow them. A conversation with a Guru either
makes you feel stupid, confused, or both.</p>
<p>A bad Guru makes a fantastically bad mentor. They find it hard
to understand why others don't know as much, or don't think as fast
as them.</p>
</dd>
<dt><span class="term">What to do if you are one:</span></dt>
<dd>
<p>Try to step off your cloud and live in the Real World. Don't
expect everyone to be as quick as you, or to think in the same way
as you. It takes a lot of skill to explain something simply and
clearly. Practice this.</p>
</dd>
<dt><span class="term">How to work with them:</span></dt>
<dd>
<p>If you cross paths with a Guru, learn from them. Absorb what you
can - and not just technical stuff. To become established as a Guru
takes a certain temperament and personality - knowledge but not
arrogance. Observe this.</p>
</dd>
</dl>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e225" id="d0e225"></a>4. The
Demiguru</h2>
</div>
<div class="c4"><img src="/var/uploads/journals/resources/goodliffe-fig5.png" align=
"left"></div>
<p>The Demiguru <span class="emphasis"><em>thinks</em></span> he's
a genius. He isn't. He talks knowledgeably, but talks a load of
rubbish.</p>
<p>This is probably the most dangerous type of code monkey; a
Demiguru is hard to spot until the damage is done. Managers believe
he's a genius, because he sounds so plausible and sure of
himself.</p>
<p>A Demiguru is generally less quiet than a Guru. He's more
boastful and full of himself.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Strengths:</span></dt>
<dd>
<p>It's easy to assume that a Demiguru has <span class=
"emphasis"><em>no</em></span> strengths, but his great asset is his
belief in himself. It's important to trust your own abilities, and
be secure that you write high quality code. However</p>
</dd>
<dt><span class="term">Weaknesses:</span></dt>
<dd>
<p>The Demiguru's great weakness is his <span class=
"emphasis"><em>belief in himself</em></span>. He overestimates his
abilities, and when left to make important decisions will
jeopardise your project's success. At worse, he's a serious
liability.</p>
<p>The Demiguru will haunt you, even after he's moved on to new
pastures. You'll be left with the consequences of his bad
decisions, and his overly clever code.</p>
</dd>
<dt><span class="term">What to do if you are one:</span></dt>
<dd>
<p>Right now, take an honest appraisal of your skills. Don't
oversell yourself. Ambition is a good thing; pretending to be
something you're not isn't.</p>
<p>You may not be doing this on purpose, so be objective about what
you can and cannot do. Be more concerned about the quality of your
software than how important or clever you look.</p>
</dd>
<dt><span class="term">How to work with them:</span></dt>
<dd>
<p>Be very, very careful.</p>
</dd>
</dl>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e273" id="d0e273"></a>5. The
Arrogant Genius</h2>
</div>
<div class="c3"><img src="/var/uploads/journals/resources/goodliffe-fig6.png" align=
"right"></div>
<p>This guy is a subtle, but significant, variation on the Guru
species. He annoys the pants off of you - he's the killer
programmer. Fast and efficient, he writes high quality code. Not
quite a Guru, but he's hot.</p>
<p><span class="emphasis"><em>But</em></span> because he's all too
aware of his own skills he's cocky, condescending and demeaning.
The Genius is often terminally argumentative, because he's so used
to being right and having to promote his correct view over other's
wrong opinions. He's become used to it now.</p>
<p>The most annoying thing is that most of the time he is right, so
you're bound to lose any argument with him. If you are correct,
he'll keep talking until the argument moves on to something he is
right about.</p>
<div class="variablelist">
<dl>
<dt><span class="term">Strengths:</span></dt>
<dd>
<p>The Genius has considerable technical skill. He can provide a
strong technical lead, and will catalyse a team when everyone
agrees with him.</p>
</dd>
<dt><span class="term">Weaknesses:</span></dt>
<dd>
<p>The Genius doesn't like to be proved wrong, and thinks that he
must always be right. He feels compelled to act as an authority;
the Genius 'knows' everything about everything. Even if he has no
experience at all, he still tries to look knowledgeable. He can
never say <span class="emphasis"><em>I don't know</em></span>,
suffering from a full humility bypass.</p>
</dd>
<dt><span class="term">What to do if you are one:</span></dt>
<dd>
<p>Not everyone achieves God-like status, but there are plenty of
good programmers worthy of respect. Recognise this. Practice
humility, and honour other people's opinions</p>
<p>Look for people who might have a more experienced viewpoint, and
learn from them. Don't pretend - be honest about what you do and
don't know.</p>
</dd>
<dt><span class="term">How to work with them:</span></dt>
<dd>
<p><span class="emphasis"><em>Do</em></span> show a Genius respect,
and show respect <span class="emphasis"><em>to other
programmers</em></span> around him. Don't come up against him, and
don't enter into unconstructive quarrels. But stand your ground -
assert your reasonable opinions and views. Don't be daunted by him.
Discussing technical issues with a Genius can make you a better
programmer; just learn to detach your emotions first. If you're
sure you're correct, gain allies to help fight the stance.</p>
<p>Take heed and avoid being cocky yourself.</p>
</dd>
</dl>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e322" id="d0e322"></a>Next
Time</h2>
</div>
<p>We'll look at some more programmer stereotypes, and work out
what the 'ideal programmer' looks like. Stay tuned.</p>
</div>
<div class="footnotes"><br>
<hr class="c5" width="100">
<div class="footnote">
<p><sup>[<a name="ftn.d0e37" href="#d0e37" id=
"ftn.d0e37">1</a>]</sup> The Perl programmers' mantra.</p>
</div>
<div class="footnote">
<p><sup>[<a name="ftn.d0e84" href="#d0e84" id=
"ftn.d0e84">2</a>]</sup> I'll describe all code monkeys as male,
for no other reason than clarity of prose.</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
