
The Taxonomy of Terrible Programmers - allenbina
http://www.aaronstannard.com/post/2013/12/19/The-Taxonomy-of-Terrible-Programmers.aspx
======
was_hellbanned
It's like an all-inclusive guidebook for how to look down upon others and
discredit them internally without any of the messy business of actually
communicating with them about "their" issues. Why improve when you can label,
isolate, mock, and ostracize?

~~~
benbou09
I totally agree that this guide would be much more useful with each time a
paragraph 'how can you help these people improve themselves'. But I think that
as it stands now most people would understand that these are just clichés. In
fact, using this as a guide to look down on other people would be the behavior
of an 'Agitator'.

~~~
Aaronontheweb
Author here.

One piece of feedback I really liked from this comment thread was providing
some guidance on how to get better at reading someone else's code. I've made
an issue out of that (code illiteracy) in a few blog posts before and I think
that HN commenter is right.

I think I'd like to do a few posts on how to overcome some of these traits -
beginning with reading code.

------
gfodor
This is great. I can pretty much put a timestamp on each of these of "when I
started acting like this", "when I _realized_ I was acting like this", and
"when I made a conscious effort to stop acting like this."

~~~
gaius
I've been an Arcanist and know plenty of them. The reason is simple: a bonus
calculated on availability meeting or exceeding SLA.

It is a general rule of human nature, you will do what you are incentivized to
do.

------
twoodfin
I'd add the Doomsayer: The programmer who is constantly pointing out the ways
in which any design could fail, no matter how likely or relevant to the task
at hand such failure scenarios might be.

Healthy skepticism is beneficial, but I've seen teams paralyzed because one
member has perfected the technique of raising unanswerable or irrelevant
objections, often seemingly to present the appearance of being the smartest
guy in the room.

~~~
Aaronontheweb
"But what if a meteor shower hits both of our US datacenters simultaneously?!"

~~~
jd007
Technically meteors are small objects that do not impact the earth (the ones
that do are called meteorites), and meteor showers are completely harmless to
both people and datacenters.

~~~
Zancarius
What if the entire staff at both data centers are so captivated by the shower
that they ignore a real disaster? ;)

------
Aldo_MX
> When a Human Robot is confronted about an issue with his or her work on the
> product, they will respond with the following sentence every time: “your
> requirement was not found in the specification for this project. We require
> additional pylons.”

> Human Robots often tend to be conference organizers (see PyCon 2013) and
> moderators on StackExchange.

That literally made my day.

~~~
LeafStorm
The "moderators on StackExchange" shot was good, but I really take offense to
the "PyCon 2013" one. The reason stuff went wrong at that conference was
because of the actions of one attendee, who specifically did _not_ go through
the process the conference organizers set up for dealing with reports of
harassment.

~~~
Aloha
I think you err'ed in looking for something specific rather than general in
this post.

Having run conventions for a decade or so now, I'll buy it, we have many of
that type.

------
javajosh
The ability to read other people's code and understand the intent behind it is
one of the highest attainments for a professional programmer. It requires two
difficult, but important and related capabilities: first, that one be
dispassionate enough about one's own views to even accept that other views
exist, and second, that one be capable of understanding how code works from
reading it (and perhaps interacting with it with a debugger or logging
statements).

So, rather than lambast people for not being able to read code, perhaps we'd
do better to praise those who are particularly good at it, and encourage them
to share their insights, if they have them.

~~~
wwweston
This was the one that made me uncomfortable too -- I tend to think reading
code is just generally hard, but it occurs to me that if I am The Illiterate,
that's exactly what I'd think.

------
charlieflowers
My God that is brilliantly written. Parts of it sting, but I feel better if I
focus on the parts that don't apply to me.

~~~
michaelwww
I was laughing until I got the one that could apply to me.

~~~
charlieflowers
Lol, but if only 1 of them applied to you, you're doing pretty good. :)

~~~
jclos
Indeed, I could pinpoint at least 4 or 5 that apply to me (not at the same
time, more depending on mood). How I pity my colleagues. I wish there was a
"does this apply to you? Here is how to get out of it!" part to this taxonomy.

------
nasalgoat
I like how MongoDB has become the go-to joke for using the wrong tool.

~~~
cube00
Much like that other document-oriented database system; Lotus Notes.

------
shekmalhen
Reread yourself next time. There's many typos and places where you used the
wrong h̶o̶m̶o̶n̶y̶m̶s̶ homophones. It's hard to take you seriously when you
write "left in piece"...

~~~
Aaronontheweb
It's an attempt at humor - why would you take it seriously in the first place?

P.S. Fixed the typo.

~~~
sheetjs
> “Business-critical compliance system?” Mongo.

Some speculate that Coinbase's problems may stem from their use of MongoDB
(e.g.
[https://news.ycombinator.com/item?id=5428382](https://news.ycombinator.com/item?id=5428382)).
I wouldn't be surprised to hear that someone tried to implement an EMR system
in MongoDB either

~~~
saraid216
Hey now. Mongo is web scale.

------
vezzy-fnord
I've noticed a lot of Python coders to be pet technologists. They simply can't
let go of their beloved Python, no matter what. It's as if to mask their
incompetence.

I don't really see why the "Illiterate" is necessarily a _terrible_
programmer, though. Code is the very opposite of literature: hard to read,
easy to write.

~~~
olefoo
I downvoted you because that was a trollish comment that added nothing to the
discussion and seemed designed to encourage vitriol. The fact is you could
substitute pretty much any mainstream language in that statement and it would
still be true and still be a troll. People don't want to abandon skills they
worked hard to learn just because someone else learned something different.
This is true whether that person is a partisan of java, ruby, javascript,
python or StandardML.

~~~
garthdog
You sound like a Pet Technologist!

~~~
olefoo
/me looks at the parts of the cat cam on his workbench, glances at the machine
mining dogecoin in the rack next to it .

You may have a point.

------
joe_the_user
OK,

This is a fine discussion.

I would add that I think that, a favorite of this board, the mythical "(top)
10% or (top) 1% programmer" is not so much a real thing as just an average
programmer who happens to avoid each of these (and related) pitfalls in the
particular job he or she is working on - well, and stays reasonably education
in current tech and intermediate to advanced math and cs.

And the nice, the reasonable thing, about these description is that they make
it clear these people are the product of particular environments.

~~~
paulrademacher
> the mythical "(top) 10% or (top) 1% programmer" is not so much a real thing

And yet every place I've worked has had 1-3 programmers who wrote >90% of the
code...

------
cupcake-unicorn
Shoot, too bad non-gendered pronouns in English can be awkward. At about the
5th example, when imagining the roles, I was wishing for some women! Some
variety would be appreciated probably :)

------
pm
I think I've been almost all of these at some point in my career.

~~~
Aaronontheweb
Author here: as I state in the article, every programmer is at least one of
these at some point in their career, myself included.

I was definitely an Island as recently as a few years ago, and I've been an
Artist before too. It's part of the learning process.

~~~
pm
To clarify, I've been many of these simultaneously, and I'm not sure that it's
changed much; different circumstances bring out different aspects.

Apparently, I'm a melting pot of neuroses.

~~~
Zancarius
Don't forget impostor syndrome! It sounds as if you're hard on yourself,
possibly for that reason.

~~~
pm
Nah, I got a handle on that a while ago. I know my skills and I know myself,
it's just sobering to see so many of my motivations and behaviours described
accurately. If I was convinced these programmer aspects were entirely
negative, I would've succumbed to the debilitating effects of impostor
syndrome years ago.

------
Tloewald
Seems to me like none of these descriptions is an actual terrible programmer
(well maybe the "illiterate" or "stream of consciousness").

Actual terrible programmers write incredibly bad code. Their motivations are
generally not the problem. I'd probably come up with a taxonomy like this:

The approximationist -- writes code that kind of does what was intended, and
then writes more code to get closer to the intention, and then more code to
get closer to the intention, and then more...

The design patternist -- writes implementations of design patterns instead of
implementations of the specification.

The classicist -- related to the overnormalizing database designer, breaks
EVERYTHING down into classes.

Etc.

And that's just covering terrible CS graduates.

~~~
d23
Really? I'd love to have people that focus on design patterns and nice
classes. Sure, it'd suck to go overboard, but I've too frequently been stuck
with people who use single letter variable names and 10 level deep for loops.

~~~
Tloewald
I love code that does what it's supposed to and can be understood and
maintained. If design patterns contribute to that, great. But a lot of the
programming I see is makework that lets mediocre programmers feel productive
while at best not contributing to the project, and at worst (and more
commonly) burying needed but poorly implemented functionality in a writhing
mass of crap.

In general, I find people who use crappy variable names also write code that
doesn't actually work.

The classicist and patternist use insanely long variable names (index or
iterator or myForLoopIterator instead of i, say) that convey no information
and write code that doesn't actually work and, frequently, fails in convoluted
ways that separate cause from effect by splitting implementations of simple
features across multiple functions, classes, and/or source files.

------
derefr
I would note that being "the Island" in combination with "the Hoarder" is
probably symptomatic of Social Anxiety. (Speaking from experience.)

------
wellpast
Yet ironically, perhaps a great programmer is a hybrid of all of these
archetypes?

~~~
colechristensen
It's not ironic.

The middle way is the path to enlightenment. Few of these are bad because of
their spirit, they are bad because of their extremism.

~~~
vezzy-fnord
_The middle way is the path to enlightenment._

Argument to moderation. "The truth lies in the middle" is a false axiom.
Sometimes it's either in the black or the white.

~~~
Brakenshire
Moderation in all things, including moderation.

~~~
girvo
Basically my entire philosophy of life. The year I spent studying Buddhism in
my last year of school rub off on me, and I still try and practice that every
day, 8 years later.

------
brudgers
Reminded me of the classic flame warriors, but lacking the artwork.

[NSFHN]
[http://www.flamewarriorsguide.com/](http://www.flamewarriorsguide.com/)

~~~
angersock
My God, that hit a little close to home. :P

------
th3byrdm4n
This can be re-written almost as "the development of the young programmer"
where the external forces exert themselves and you get forced into some of the
roles... \- sometimes the pressure is speed of project completion \- sometimes
the pressure is production quality \- sometimes the pressure is code quality /
reusability \- sometimes the pressure is following specs \- sometimes the
pressure is "looking modern" \- sometimes the culture is whack and needs to be
changed \- sometimes the pressure is team communication \- sometimes your tech
stack only includes an AS400

Whatever the pressure you can seemingly get pidgeon-holed. I think this is
where experience comes in and can guide you to the happy medium where external
pressures are ignored and you balance the best you can.

------
banachtarski
"The Futurist cares not for quaint, passing concerns about stability,
maintainability, or teachability – it doesn’t matter to him if it’s impossible
to hire Erlang developers. New is everything."

Really? Lol. You chose a language that's stable, maintainable, and easily
taught. Not only that, it's not a new language either. At least go with
something that fits the description, like Rust or something (N.B. I like rust,
where it's going anyways).

~~~
thomasz
I don't understand your argument. You _will_ have problems finding Erlang
devs, especially if you are not located in the SV. You will find it difficult
and/or prohibitively expensive to even get Erlang training for your devs. And
yes, Erlang is pretty new in terms of having made the jump from total
obscurity to near total obscurity less than ten years ago.

If you are lucky to have a team with the skills by any means go for it. But
introducing Erlang to an average project with average requirements, staffed by
average developers is a recipe for disaster.

~~~
banachtarski
No I didn't. I implemented the core of the backed at my last job in Erlang.
Training newbies and hiring was not difficult. I interviewed the candidates
coming in when I needed to pass the baton too.

And no, Erlang is not new. It is _stable_. The interface changes once a
decade, and usually for the better. Stop making these wildly unsubstantiated
claims based on little to no evidence. Even if you had a direct experience,
it's certainly contrary to mine, and definitely not enough to warrant your
sweeping assumptions.

------
bobbles
I want to know what the category is for someone like me where the process
goes:

1) Code

2) Ask people why their methods are broken

3) Code some more

4) Realise what they had worked perfectly and I suck

5) Repeat

------
barce
This blog piece is not a taxonomy. A real taxonomy would provide sample taxa
living or stuffed in formaldehyde.

At most, this piece is just a literary exercise that provides no solutions for
the imaginary problems it suggests.

I would definitely change my opinion if facts were pointed to of actual
projects and persons.

~~~
benihana
An excellent example of the Hacker News subtype, _Too Good To Enjoy Anything_.

This specimen can usually be found three or four comments below top comment
expressing extreme negativity or pessimism at any kind of good announcement,
or as we see here, latching on to an irrelevant pedantic argument as reasoning
for why a particular submission cannot be enjoyed. A deeply cynical creature,
the TGTEA, or tigtea as it is sometimes called, generally shuns from new
stimuli for fear of the feeling of pure enjoyment. For instance, even though
this comment provides examples the OP asks for, it's unlikely this particular
specimen will enjoy this comment.

------
Edmond
I can almost hear the battle cry: extremism in the defense of ones work is no
vice! Good read :)

------
IgorPartola
The Arcanist is probably the closest to what I can see in myself. I tend to be
protective over the systems I design in order to preserve them. This comes
from years of geeking out about things like memory allocators and networking
stacks, so when I catch a whiff of someone talking about introducing a
terrible inefficiency or unreliability into the system I helped put together I
put up the defenses. This post is a good satirical look at this aspect of my
work, and probably a bit of a wake-up call.

------
robert-wallis
I was feeling pretty good that I wasn't a stereotype, until I got to the
Agitator.

I'm just really tired of people putting junior devs as team lead over me. I'd
really like a lead that has tried different tech stacks, project management
methods, and programming language paradigms. It's hard to respect someone
making a novice decision based on their limited experience.

I don't think I am curable. I don't see how telling my manager and team lead
why they are wrong, is something I should change.

~~~
WesternStar
You can't be a good leader if you can't follow. Thats the bottom line. I can't
give you a group of people and expect you to listen to them and not alienate
them when you don't seem capable of doing that when you have only one person
to focus on.

~~~
robert-wallis
I do what I'm told, and I get it done on time. But I also explain why I think
it's the wrong decision, and I usually provide links to articles backing me
up. I even try to include links to counter-examples. I have little patience
for people that don't listening to experts. If you don't listen to me, then
listen to these other engineers that are better than me. If you don't listen
to them, then it's going to be really hard for me to respect your decisions.

I'd rather have a manager with just 10 years experience, than be a manager
myself. I like working on products more than management.

------
nilkn
When I first read this, it stung a bit as I know I've fallen into these roles
at some point or another in the past. I came to the comments here expecting to
feel even worse about myself, but I was pleasantly surprised to see other
people noting that they too have fallen prey to these bad habits. In the end,
this has actually made me feel a bit more comfortable with my skillset as a
programmer, and I now have some goals to strive towards moving forward with my
career.

------
disputin
Context plays a part. The last company I worked at was so arcanist that the
majority of new developers were relative agitators or futurists. They wouldn't
have been elsewhere. They never stuck around beyond a year, and as the second
longest serving, 2.5 years was all I could stand. Interviewing after working
in an arcanist environment is depressing.

------
ttty
I wonder what other conclusions I can get from people that are more of a type?
For example a Arcanist is probable to also be faithful and a Futurist a
cheater. I'm just giving examples, I don't really know anything, that's why
I'm asking for someone that knows more than me. (:

------
sbilstein
This is great. As I develop as an engineer I feel more and more confident
about my abilities; great to read something like this blast away the Dunning-
Kruger effect and help me recognize I still have a lot to learn. And not just
about particular technologies. Very humbling.

------
mistermann
Into which group would the person who is genuinely very technically smart, but
thinks they're too smart comprehensively to even be bothered checking in with
the actual users to see if their vision meshes with the actual requirements
fall in this analysis?

------
priya_sri
I had penned my thoughts on this a while ago
[http://priyankasriraghavan.blogspot.in/2013/10/the-
evolution...](http://priyankasriraghavan.blogspot.in/2013/10/the-evolution-of-
software-programmer.html)

------
qwerta
> he can find (and patch himself!) the subtle race condition created by minor
> JVM differences on your particular version of the Linux kernel

He can do this, but is terrible programmer?

------
actsasbuffoon
"Guy", "dude", "him", "he"...

There are many kinds of programmer, but apparently they're all men.

Edit: upon re-reading the post I see a smattering of "he or she" references at
the beginning. They quickly give way to nothing but male nouns and pronouns. I
wrote my comment after finishing the article, at which point I'd forgotten
about the brief nod to the existence of female software developers at the
beginning of the post.

~~~
elohesra
You know what I find far, far more offensive than someone using gendered
pronouns? The kind of smug, pandering post that deliberately strives for
gender neutrality through tortuous 'he/she' verbosity.

I happen to think that most women are probably clever enough to work out that
just because a writer has used a particular gendered pronoun, it doesn't mean
that the writer's point applies specifically to that gender. Furthermore,
literally none of the women I've known have ever complained about gender
pronouns; such nitpicking seems to be the exclusive domain of gender-political
activists and HN commenters.

~~~
jeorgun
I agree--- if any author were to use `he/she' consistently, I'd probably find
their writing quite annoying. Still, that hardly means they'd have no other
ways of being gender-neutral ;)

~~~
cma
You mean like 50% of the time using "she/he"?

------
VladRussian2
he missed the "righteous thou", ie. ones who are able to ignore their own
shortcomings.

By the way, "Software is a team sport and does not suffer those who do not
play by its rules." I hope his team/company isn't an English speaking one.

~~~
magnusjonsson
Suffer can mean "tolerate" sometimes.

------
malkia
Wow - I'm each one of them - on different days, teams, jobs, etc.

------
ratsimihah
The Stream of Consciousness made me die. Been there too often.

~~~
solistice
//gotta get some coffee, wait...there's a bug in line 485, just a sec.

------
daraosn
Mongo.

~~~
mamcx
Mongo = 42

------
almosnow
>The past is the future in the Arcanists’ worldview [...]

Hahaha, loved that!

