
There are 10 types of good programmers - MIT_Hacker
http://delian.io/there-are-10-types-of-good-programmers
======
alexvr
I think this is just a poor, exclusive, and incomplete way of saying, "I like
passionate coders." Or maybe not, since you seem to imply that the second type
just takes up coding because that's what successful people do in the tech
world. Am I worthless and not passionate because I started teaching myself to
code when I was 15? You probably have a case for people who have been coding
nonstop since their early adolescence. But frankly, this article is vapid
nonsense. Stop generalizing; sometimes you have to accept that the world is
complex and not black and white. Try thinking outside of binary.

~~~
MIT_Hacker
I think coding at 15 still falls into the first category.

The 5th grade thing was just a label. You don't have to agree with my broad
generalization.

------
thenerdfiles
There are probably 16 different types of programmer.

ISTJ - The Duty Fulfillers (Data Analysts/Code Monkeys)

ESTJ - The Guardians (Sysadmins)

ISFJ - The Nurturers (Devops/Builders)

ESFJ - The Caregivers (Devops)

ISTP - The Mechanics (Code Monkeys)

ESTP - The Doers (Builders)

ESFP - The Performers (Builders)

ISFP - The Artists (Hackers)

ENTJ - The Executives (Sysadmins)

INTJ - The Scientists (Hackers)

ENTP - The Visionaries (Architects)

INTP - The Thinkers (Architects/Builders)

ENFJ - The Givers (Data Analysts)

INFJ - The Protectors (Sysadmins/Devops)

ENFP - The Inspirers (Hackers/Builders)

INFP - The Idealists (Architects)

~~~
willeh
Jungian personality types are not a good way to look at personality. Just
having a number of categories fails to capture something so complex as
personality. The Five-factor model of personality is much better in this sense
as it places people on a continuum rather than attaching pseudo-scientific
labels to people.

[http://en.wikipedia.org/wiki/Revised_NEO_Personality_Invento...](http://en.wikipedia.org/wiki/Revised_NEO_Personality_Inventory)

~~~
thenerdfiles
You can say that about any model. Reality is complex, and sure, it doesn't
have to be complicated. Every scientist from Chomksy to Bohm knows this.

You do get the point. It is the function of making communicable and increasing
integration-potential the data to higher cognitive modes of thought (Folk
Thought). The simpler your model, the greater the difficulty of exposing its
rules to the audience. Generally, it's about "constructivistic myth-building".
I'm not claiming Jung is the Law, and systems always stand in need of refactor
(Quine's talk on the Ship of Theseus).

High Extraversion Programmer versus Low Openness Programmer. High Extraversion
Hacker versus Low Agreeableness Architect, etc. Reductionism abounds.

~~~
willeh
You have a valid point regarding complexity as such. However, I don't think
the model itself is useful at all. It is hardly more than a deck of tarot
cards. People take the test, which of course has poor test-retest reliability,
then they start applying the predictions to themselves getting caught up in a
wave of confirmation bias.

I don't think it is useful to teach people that personality is a set of
labels. We all have a intuitive understanding of personality, which is much
deeper and gives a more nuanced picture.

~~~
thenerdfiles
I generally agree with your criticisms and understandings on these matters.

------
Swizec
> The first category is the one that I’d like to think I fall under. They’re
> what I call the “5th grade coders”. These programmers were given a computer
> at a young age and have been playing around with it ever since. I can
> connect with them easily around getting our first computer, doing FIRST
> robotics, or working part-time during high school making websites. These are
> the types of people who breeze through their undergraduate CS education and
> have been working at tech companies since they were ~18. They don’t have to
> put a ton of effort into learning new languages, picking up different
> theories, because it is second-nature. In some ways, this group of people
> just got really lucky early on in their life in that they were given a
> computer and enjoyed building things.

I definitely fall under this type of programmer. Started learning Logo at 9
years old, Pascal from 10 onward. Worked part-time in high school as a web
developer, worked a lot as a CS undergrad.

But I most certainly didn't breeze through my CS education. In fact I flunked
out[1]. Hell, I almost flunked out of high school as well because I spent so
much time coding.

[1] I have two exams and a thesis to go, but at this point it's doubtful I'll
ever bother.

~~~
MIT_Hacker
Hahahaha... Well I ended up dropping out of my CS undergraduate education too.

I think it's more that we don't like taking the Intro to CS class, and either
suffer through it or flunk out.

------
0X1A
I would more than likely fall under the second type. Growing up relatively
poor my family didn't have a computer, and neither did the majority of other
family members. It wasn't until my mid teens that I finally had access to a
computer and at that time MySpace was popular amongst friends so only thing I
got into at the time was HTML and CSS. It wasn't until years later that I
picked up a lower level language. At times I feel jealous of those that had
access to a computer at a young age and were exposed to learning a language,
but in the long run that doesn't really matter as long as both types can do
the same thing. I didn't grow up writing programs but that doesn't mean I'm
slow to pick anything up.

------
charlesism
With so many otherwise smart people in the tech community, it's unfortunate to
see how ready people are to advertise their own half-baked prejudices, based
on anecdotal evidence.

There are great coders out there who took longer than a year to code, but
haven't coded since birth. I wouldn't expect someone trying to code while
working a full-time job, or raising a new-born child, to get up to speed as
quickly as a single computer science college student. That doesn't mean the
former has less aptitude, or grit.

The article is a fun read, but doesn't make that sound a case for the
existence of this "uncanny valley" class of programmers.

------
adamzerner
Why is this titled "There are 10 types of good programers" instead of "Two
Types of Good Programers"?

~~~
_random_
Based on an old unfunny joke.

------
nazywam
I would love to consider myself as the "5th grade coder", I did start coding
in about 5th grade however I just cannot come with anything that could be
called successful. I just doubt that with my lack of professionality I've got
any chances of making something bigger than a useless game.

------
hhorsley
what's an example of a type of programmer not considered good?

~~~
Swizec
A bad programmer.

~~~
MIT_Hacker
Classic HN

------
_random_
Did not program much until my uni. Somehow turned out to be a decent dev. Do
despise those who are trying to fit people into arbitrary narrow buckets.

------
tmikaeld
I've had a real hell finding good programmers - where do you look?

~~~
_random_
Have you tried the ol' "market rate +50%" approach?

------
icu
Thanks MIT_Hacker for the article.

I'd like to extend your ideas a little and make the point that:

1) When you combine the two extremes of programmers you can get more than just
harmony, you can gain synergy, and

2) As "new-found learner" I believe that the idea of 'good programming' can be
abstracted to be 'good creative problem solving and communication.'

About the first point:

As I said I fall in the "new-found learner" category, for my start-up I've
been fortunate enough to have a 'veteran' developer on my team who is
astounding. Every time I watch him code or he explains the architecture I
learn something new and useful. Best of all, we have a high synchronization
ratio.

However even though he's been working for nearly 10 years as a developer for
some of the best financial institutions in the world it's clear that he
doesn't have the entrepreneurial thought patterns necessary to gestate and
birth a start-up. The other day we were talking about this very thing and he's
said that he's tried, and with others just like him, to dream up the next big
"Facebook" opportunity, yet inspiration keeps eluding him. He told me a
'cautionary tale' about a colleague who quit his job to start-up a Golf
Scorecard mobile app which got funding and then later tanked. From what he
said to me it seemed that this newbie entrepreneur had no intimate knowledge
of the the customer's needs, too much customer inertia and not enough market
pull. I would be so bold as to say it over engineered the problem. These
issues seemed obvious to me, but only through the lens of my own
entrepreneurial experience... gained the hard way.

The point is that the "new-found learner" probably comes from a place where
their life experiences add a 'je ne sais quoi' to the mix when combined with
the technical experience of your "5th grade coders". This makes for synergy.

About the second point:

I'm absolutely certain that the time I spent as a finance and economics
consultant has been applicable to my approach to programming. Why? Well I was
lucky enough to be taught how to logically 'think' my way to an optimal client
solution and how to communicate the solution in the clearest possible way. I
would roughly call it the "McKinsey's Approach To Problem-Solving." When I say
that I mean approaches like 'understanding the question', 'hypothesis driven
solutions', 'issue trees', 'mutually exclusive and collectively exhaustive
(MECE)', and the '80/20 solution search.' Looking back I'm certain that what
set the consultancy I worked for and the others was the ability to communicate
the solutions. Often economic or financial questions have complex answers.
Even if the answer is simple it is often put forward in a complex way. By
taking complex ideas and putting them forward in an simple way, and keeping
simple ideas simple, the consultancy was extremely effective and profitable.
The secret to this effective communication was our Plain English approach to
writing. The CEO of the consultancy was fanatical about it, even to the point
of reviewing as many client reports before they were delivered.

I find that by adapting these problem solving 'thinking patterns' to my
programming, while keeping in mind that I need to communicate clearly I'm at
least productive enough to keep up with the "5th grade coder" in my team.

