
Programmers think differently than non-programmers - jacquesm
http://jacquesmattheij.com/Programmers+think+differently+than+non-programmers+
======
apl
He's absolutely correct on this issue. People in the programming professions
surprisingly often go overboard with the whole coder myth -- it's a fairly
interesting form of self-aggrandizement.

1) 80% of all programmers are Java people hacking away in auto-completing
IDEs, constrained by rigid corporate guidelines. I doubt that their thinking
has a fundamentally unique dimension when compared to other lower-tier
knowledge workers.

2) Plenty of professions (engineers, lawyers, academics in various fields, law
enforcement agents, and so on) require analytic skills, symbolic thought etc.

Sure, programmers at the top of their game have abilities that separate them
from regular people. But that's a trivial truth that applies to 99% of all
fields of human endeavor.

~~~
DanI-S
Of course, anyone who uses an auto-completing IDE must be an intellectually
stunted amateur.

~~~
apl
Childish. Also, proving my point that not all programmers are logicians.

~~~
bigfudge
He's joking, and hence the upvotes...

~~~
Confusion
HN does better without such jokes. Obvious jokes are noise.

~~~
jacquesm
The fact that it needs to be pointed out somewhat belies that it is an obvious
joke.

~~~
Confusion
Well, that's because it might just be sarcastic criticism. As a joke, it is
obvious. That does not mean that it is obvious that this was a joke. Which is
exactly why we should do without them. It removes exactly the pointless
discussion it has led to.

------
rue
I don't think it's useful to conflate "programmers and non-programmers think
differently" with "non-programmers are _unable_ to think like programmers".

I'd say there are people better-disposed to learning to be a programmer[1] but
practice also plays a big part. The end-result is that for a given individual,
actually occurring situation, it is a reasonable generalization to say that
the programmer and non- do think differently about it at this moment in time.

[1] That is to say, a special type of problem-solver. The individual skills or
dispositions aren't unique to programmers but the combination thereof probably
is.

~~~
shantanubala
It'd be interesting to compare actual neural activity of people in different
professions who have been doing what they've been doing for a couple decades.
I think that once a person approaches problems a certain way for an extremely
long time, that becomes their default -- it'd be interesting to compare a
theoretical physicist, a musician, a programmer, a writer, and a doctor (or
something along those lines) when they solve different simple problems.

~~~
jacquesm
<http://www.musicianbrain.com/papers/Schlaug_NYAS_2001.pdf>

------
msg
An important point appearing elsewhere in the comments: who is a programmer
anyway? If you can write Hello World in C, are you a programmer? If you can't
write your own compiler are you a non-programmer? This is an unanswerable
question.

Maybe we could focus on kinds of thinking that help you program well. There is
nothing you can't learn eventually. However, we might find some common ground
by looking at how good programmers have trained their minds.

We can list some desirable skills for a programmer that reach across languages
and tools. There is an old saw by Joel on Software that some people just can't
understand pointers and recursion. Or on the next level, that some people
can't understand multithreaded/parallel programming. I think I'd say that an
instinct for simplicity or mathematical beauty and symmetry also plays a role
in making good designs. In other words, making not just consistent mental
models that you can simulate in your head (as another comment says), but
making beautiful ones.

I was sitting with my manager yesterday. He was giving me requirements for a
system I'll have to build over the next two weeks. Along the way we came
across a problem where we need to take a bunch of multidimensional values and
combine them together.

Instead of leaving it to me, he wanted to design it on the spot. He thought of
this like voting where each value makes some contribution, but then the
requirements dictated that we needed to add things like "some values have more
votes than others", and "some votes have veto power".

As he was describing this pseudo-consensus algorithm with weights and vetos, I
was surprised he didn't know how ugly this design sounded. It is hard to set
up the contribution of each value, hard to predict the behavior, and hard to
make intuitive.

It's not that this is a bad, uncreative idea. Voting is an interesting analogy
for the problem, and intuition is a good way to take a stab at a problem. It's
that when he started working it out he didn't see the multiplying problems, or
the counterexamples that would cause trouble for his system. And I do think
this is something that good programmers and system designers do well, even
without much conscious thinking. They find the attack surface, figure out
where their abstraction leaks, jump immediately to edge cases.

I'm going to have to pull him back early next week. :oD

You don't have to say that the programmer has a magic switch in their brain
that enabled them to be a genius while everyone else is left out. Anyone Can
Cook!

edit: wwhere => where

------
araneae
Well, if you buy Meyer's Briggs types, programmers do think differently than
others, because programmers are not uniformly distributed among the different
types.

HN survey: <http://news.ycombinator.com/item?id=943722> And there have been
better, more "scientific" studies about this that does find that there is a
correlation between career and personality. I agree that the story telling is
a bit us vs. them, but it doesn't mean there isn't a difference.

~~~
j_baker
Two things:

1\. Jung (whose typology the MBTI was based upon) was very clear that his
methods went into the areas that research couldn't go (often referred to as
"depth" psychology). Thus, research based on the MBTI and other tests based on
Jung's typology is a bit difficult to agree with. Bear in mind that I'm saying
this as someone who finds Jungian typology very useful.

2\. The point of Jungian typology can be summed up with the old cliche "You're
a beautiful and unique snowflake, just like everyone else." Thus, although you
do more than likely see certain types attracted to programming, those types
are far from being exclusively programmers as there are many fields that
attract them (including other engineering and scientific fields). Conversely,
these types aren't the only programmers out there. I've met plenty of good
programmers who were of types that weren't traditionally associated with
programming.

------
duairc
This is obvious.

I mean isn't it basically a fluke that we all ended up as programmers? I don't
I'd think be half as interested in computers as I am if my dad didn't bring us
home a computer when I was 3 or 4, or if my grandmother didn't randomly get me
a book about "How to make your own website" for my tenth birthday. She didn't
get me this because I'd shown a particular interest in computers, it was just
one book among a bunch of books "for boys", most of the rest of which were
about football. So the relationship between the society in which I grew up and
the gender it assigned me at birth also contributed to my becoming a
programmer, and definitely in more ways than just being the reason I got that
book. I also happened to be lucky enough to participate in a programme for
"talented" kids, and one of the courses they offered was in programming (they
taught me Java when I was 13), and I was able to use the skills I learnt from
that to pick up Javascript and PHP (for my website). Then one of my older
cousins introduced me to Linux, and that kind of paved the way for me
becomming a "real" programmer, when I started writing little programs to make
my life easier in Linux.

And it was basically luck that all of those things happened, and happened at
the right times in my life so that they all had the effect that they did. I
might have ended up doing something completely different if, for example, my
parents weren't able to afford to send me on that course at which I learnt how
to program properly. I became a programmer because certain things happened at
certain times in my life to make me interested in programming and to give me
to means to pursue that interest. Luck was the reason that those things
happened to me, not the way I think or because I somehow have a magical
programmer brain that made me destined to program. That's obviously absurd.
Those things could have happened to anybody. Everybody can be a programmer.
We're not better than everybody else.

------
davisp
In contrast with the author's point of view, there is research that suggests
that the ability to program is dependent on an ability/desire to form
consistent mental models. The actual paper is at [1] while Jeff Atwood's write
up that's been linked to from HN before is at [2].

    
    
      [1] http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf
      [2] http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html
    

[edit: formatting]

~~~
jacquesm
I've seen that trotted out before and my offer still stands: bring me the
person that I can't teach programming at a level high enough to hold a job
down provided they're willing to put the time in and willing to learn.

I pretty much guarantee you that I can do it, I have not found someone that I
could not teach how to write code.

Desire is the key here, ability is very much overrated, but hey, it makes 'us'
feel special right?

What about lawyers, do they get to feel special? Engineers? Mathematicians?
Bookkeepers?

Really, it's just a matter of degree, and just like everybody (except for the
rare case of tone deafness) can learn to sing to their ability everybody can
program to their ability limited by how much time they put in and how
motivated they are.

Nobody here was 'born a programmer' we became programmers by applying
ourselves to a series of problems of increasing complexity, if you compare you
'the programmer' with 'you the 4 year old' then for sure there are differences
there but they are very much about learning and not about innate ability.

~~~
hammerdr
My freshman year of college, I was working with a person in the introductory
programming course. We worked together for hours at a time. I'm, by nature, a
very patient person and was willing to let this person work through the
problems and figure them out. However, at the end of the course the person was
none the wiser about how to program (even basic things).

This person changed majors to another engineering discipline and is doing
great in that field. It still requires the same engineering-esque reasoning
skills.

By no means am I the perfect teacher nor does one anecdote make a data set.
However, because of that experience, I am very much inclined to believe that
there are very smart people that just do not have the inclinations needed to
become a programmer.

~~~
jacquesm
Interesting story, thank you!

Were they interested in the work? Was their ambition to get in to programming
(was that the major they wanted to go for)? And if so what was their
motivation to do so? I've found that fascination with technology helps a great
deal here, if you are not typically intrigued by how stuff works and like to
puzzle then programming will probably not be the kind of challenge that you
take to.

I remember when I first learned (or tried to learn) to program. For weeks I
was just looking at the book without any progress whatsoever, finally it
clicked and when it did it was like 'oh, that's how it works'... After that it
came easy (most of the time, at least). But if I had quite in those first few
weeks I would have literally gotten nothing out of it but a bunch of
frustration. So I would presume that it is possible for people to get stuck in
that particular phase for a long time.

Maybe it's the programmer equivalent of being 'tone deaf'?

------
raintrees
I have to agree. I think that it may be more of a "mode" I get into. My wife
is able to quickly identify whether I have been coding because I have not
entirely switched off that mode, as is evidenced by my unwillingness to let a
problem go, my continued debate until all facts are accurate, etc.

Since this behavior is not conducive to maintaining a relationship, we have
developed a flag system to let me know when I need to take some time out to
talk normal to her.

Oops. There it goes again (flag system). At least I didn't say boolean.

------
alextp
I agree with the part about every sufficiently smart person being able to
program if they're willing to learn and put the time.

In my experience most people (even students in intro to programming classes)
are really unwilling to drop some mental habits and build the other ones that
are necessary for programming. Some other people are just profoundly bored by
controlling every little thing that happens in a computer, and would just
rather have someone else do it for them. Even these people, I've found out,
can be turned on to programming if exposed to it in the appropriate setting
and with a bit of help to get them unstuck from the hard parts.

~~~
Someone
_I agree with the part about every sufficiently smart person being able to
program if they're willing to learn and put the time._

With that, everybody should be willing to agree, as long as you do not give a
definition for 'sufficiently smart' and 'programming'.

I know that may sound mean, but without attempting to define these, any
counterargument to that claim can be rebutted with either "but he's not
sufficiently smart" or "but x is also a form of programming"

~~~
alextp
I agree, and I should have formulated my answer better. What I mean by
sufficiently smart is a person that will be recognized as smart enough to be
functional in any other field that requires thinking, from the arts to the
humanities.

------
edw519
Programmer's Aptitude Test (Don't scroll down until you're done.)

    
    
      1. You push your cart through the supermarket
         a. In a pre-defined manner
         b. Randomly
         
      2. When watching football on TV, you focus on
         a. the quarterback
         b. the defensive linemen
         
      3. You drive to work
         a. the same route every day
         b. with a different route every once in a while
         
      4. Which card game do you prefer?
         a. bridge
         b. poker
         
      5. To plan for tomorrow's weather
         a. You check the TV or internet.
         b. You go outside, looking for signals.
         
      6. Who do you prefer?
         a. Andrew Carnegie
         b. Marie Curie
         
      7. You prefer
         a. your keyboard
         b. your mouse
      
      8. Which subject do you prefer?
         a. history
         b. literature
         
      9. Which would you rather do?
         a. take a walk in the woods
         b. a crossword puzzle
         
      10. Which is more important to you?
          a. time
          b. space
      
      
          

Answer: If you tried to figure out (game) the test as you took it, you have a
programmer's aptitude. If not, you don't, and probably don't even understand
this answer.

~~~
Natsu
I was starting to lean towards 'A' being the more programmer-ish set of
answers, based on the hypothesis that the scoring of the test would be
something like the number of 'A's one answered, but some of the questions
really confused me until I got to the end....

~~~
aeosynth
It's also possible to have completely random answers, with a key at the
bottom....

~~~
Natsu
I considered that possibility, but felt that it was less likely than an all-A
or all-B type of scoring system. But you're right, I started questioning that
assumption after several questions.

------
iuguy
I think it's a bit of a generalisation, but one often made by others to
suggest that programmers think differently.

To a computer user, their approach to solving a problem may be different than
a programmer's (want to be able to do this, write program to do it) but the
same traits that commonly exist in competent programmers also exist in other
professions. Am I a programmer? I program, I write software that I earn money
from, but it's not the main part of my profession, so perhaps I'm not
qualified to talk about this.

Many lawyers see the world in a different way to the rest of us. Marketers
often see the world differently. I can't really speak for them though as I'm
definitely not a lawyer or marketer.

What I can tell you about are penetration testers. When you look at a
building, you probably look at the shape, admire the architecture, maybe look
around to see if it fits in with it's surroundings. A penetration tester (a
seasoned one anyway) doesn't do that. They're looking at entrances, exits,
security guards, windows. It's automatic. The other stuff comes too, but
experienced pentesters who enjoy their job see the world in a completely
different way to a lot of people. When you see a shiny new piece of tech, a
pentester's already thinking about how to jailbreak it and what they want to
do with it afterwards. There's a specific mindset for a good pentester. Not
all penetration testers have it, but you can spot the ones that do a mile off.

I dare say that this mindset exists amongst programmers too, particularly
those that have done a lot of debugging or TDD. I'm just more familiar with
the penetration tester mindset given my experiences.

------
reader5000
I think programmers think differently in the same way long distance runners
run differently or basketball players play basketball differently than
non-*ers. Programming exercises a certain subset of human cognition -
abstraction, symbolic expression, modeling. I do think programmers are more
adept at these faculties, because they use them all the time. How much this
bleeds over into "thinking" generally, who knows.

------
chegra
A couple days ago, I submitted this article to HN
[http://www.newscientist.com/article/dn19940-chess-
grandmaste...](http://www.newscientist.com/article/dn19940-chess-grandmasters-
use-twice-the-brain.html) . Basically, it says grandmasters use both
hemispheres of their brain while playing chess while novice only use the left
side.

I agree with his point that almost anyone could learn to program, but what I
don't agree with is that a programmer(expert) and a non-programmer thinks the
same.

I think your brain re-wires itself to be more efficient for the task and
recruits the right hemisphere of your brain to make intuitive jumps to solve
problems. I don't have solid proof, but I think a similar transformation
happens in a programmers(expert) brain as what happens in a grandmaster brain.

------
astrofinch
I think this sort of in-group superiority effect is likely to occur for pretty
much any male-dominated obsession with a large body of associated arcane
knowledge. For example, gamers have in-jokes like "the cake is a lie".

At the same time, I have worked as a programming tutor and there are some
people who suck really hard at programming. They're probably just stupid
though. For example, I tutored a kid who absolutely couldn't program for beans
but did well in a physics class we took together. But I think it's likely that
he did well through pattern recognition, aping example problems and so on. In
programming, you really have to understand what's going on.

------
iam
I'm not sure how I feel about the "killed or injured" bit under obsession.

Every couple of weeks, I get into the zone while driving my car. For this the
situation needs to be just right, i.e. the road can't be empty, but it can't
be full of cars either. Basically the ideal situation is that there's just
enough cars that you can't stay in the same line while maintaining your
preferred speed, but there's enough switching lanes is viable.

On those days I might get 'in the zone' and have intensely heightened
situational awareness. I 'feel' the cars around me and can easily navigate the
road like I was flowing through a river (aside: 'flow' is a synonym for
'zone').

Situational awareness is also a key trait in becoming proficient in an FPS. In
fact, almost anytime a video gamer goes on a kill streak it's because they
were able to tap into heightened situational awareness (e.g. you 'feel' your
enemies, know where they're going to come from, so you take them out before
they take you out). The only difference is that since it's front of a computer
screen it's easy to be misled that you are ignoring everything.

You are just ignoring everything irrelevant.

------
RockyMcNuts
I feel pretty confident that learning to program rewires the brain in some
ways. I think if you take a random set of 18-year-olds with at least some math
aptitude and give them some analytical tasks, then give some of them a year or
so of good programming instruction and practice, you will see different areas
light up on MRI on the same tasks.

If he is saying programmers are born no different from other
math/science/engineering types then I mostly agree. Of course if you compare
those to the general population there are a lot of poet types who can't really
learn math or symbolic systems so programmers are born somewhat different from
the population as a whole.

~~~
jacquesm
I would put poets amongst the manipulators of symbols par excellence. They
manipulate the language we humans use, programmers manipulate symbols defined
to interact with a machine.

------
p_nathan
When considering programmer to be "anyone who writes some code", I agree.

But when considering programmer to be someone who is comfortable:

\- operating on multiple planes of abstraction

\- using recursion/pointers

\- 'seeing' the concepts embodied under computer languages

\- 'seeing' the code flow

Then, yes, the programmer does think differently. Because it's his job to
think this way to communicate correctly to the computer. Not that it's
unattainable by someone outside of the field, but by the act of becoming
competent, it changes the one coming in.

~~~
jacquesm
Only the first one is a skill that 'non programmers' would readily exhibit,
the rest of them are things that you learn as you go while you learn to
program.

Outside of math I think you'll have a hard time explaining what recursion is
to someone that does not already know how to code at a basic level (a
subroutine that calls itself! wow!), seeing the concepts 'under' computer
languages may be something you could discuss with linguists and/or
mathematicians again but not with others and 'seeing the code flow' you might
be able to talk over with a laywer or someone in to electronics (who can 'see'
the currents flow when looking at a schematic).

~~~
p_nathan
I'm not saying _anything_ about innate ability. Just as a lawyer gains 'legal
lenses' as they work through law school, so do programmers gain 'software
lenses'.

------
treelovinhippie
This may just be my circle of reach, but I am yet to discover a programmer
with decent vision or initiative. Most have really poor business ideas and
tend to focus too heavily on the technical problems and pitfalls of an idea
rather than thinking of how to solve them and extrapolate the idea further.
Programmers are horrible people to attempt to brainstorm with (even when you
yourself have a passable grasp on coding).

------
jcfrei
I think the ability to abstract problems is fundamental for any good
programmer. However I don't think this is a unique requirement for programmers
- physicists, chemists and mathematicians alike need high skills in
abstraction. In all of those sciences you need to break down an arbitrarily
complex problem down into simpler ones and this requires a way of thinking
that might be quite different from other people.

