Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Programmers think differently than non-programmers (jacquesmattheij.com)
65 points by jacquesm on Jan 15, 2011 | hide | past | favorite | 75 comments


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.


I tried to figure out the test, (and suspected there might be no scoring mechanism at all) but still felt obligated to answer the questions honestly, despite thinking that some were clearly the "programmer" answer.

Maybe I should get the "golden patsy" award for knowing how to game the system but not doing it.


I read "don't scroll down until you're done", thought "ah, this is probably one of those tests that has an entertaining comment at the end unrelated to the questions", scrolled down without doing answering any of the questions, read the entertaining comment. I wonder if that's worth bonus points or negative points.


1. Mostly a, with a bit of b. 2. I don't watch football. 3. Not presently employed, but way back when, I guess b (VERY rarely diverted) 4. rummy, or whatever my folks are playing these days 5. I don't usually plan for weather, even though a Michigander should, but when I do, I'll try a 6. Martin Gardner 7. I don't know that I "prefer" it, but I guess I use the mouse more often. For serious work, the Wacom tablet. 8. Maths and sciences, actually, but between the choices, probably history. 9. Sudoku, actually. I guess that puts me closer to "b". 10. Having somewhat puzzled out relativity, I consider them about equally important.

Answer to the Answer: I wouldn't say I tried to "game" the test while taking it, but twenty years of coding in one form or another says you called me wrong. Then again, maybe I didn't bother trying to game it because I figured it was BS from the start?


Hmmm, I thought your goal was to generate an argument amongst us programmers over which was the right "programmer" response to each question, thus proving that there is no single programmer personality. By doing so I supported your point and undermined the point I wanted you to make. Crap.


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....


yeah, the keyboard/mouse question made me think "Which is more important, your body or your mind?"


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


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.


exactly my thought process


How many were thinking of replying with snarky comments like "You may want me to say crossword puzzle, but i like to talk a walk in the woods while doing the puzzle."?


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.


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


apl is asserting a correlation, not a cause or even a symptom.

For example (and at the risk of revealing my poor music tastes :P), the phrase "volvo driving soccer mom" doesn't imply that all volvo drivers are soccer moms, nor that driving a volvo will make you a soccer mom.


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


I actually read that post as sarcasm, not as seriousness, but I could be wrong.


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


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


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


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.


I think that in some ways programming is a lot easier than some areas in that it is often very easy to get feedback on whether our work has performed or not (especially in this day of TDD).

Contrast this with a lawyer writing a contract - you can't write unit tests, there is no source code debugger and most contracts never get "executed" in the fullest sense of being interpreted in court so you don't really know what they mean in practical terms. This would drive me crazy.


That's also what makes programming harder. As a lawyer you can write a contract that is literally factually incorrect with respect to the law, and may never get tested and actually works as intended (gets two parties to abide by the rules of the contract).

In programming, the first test is the computer. If my program doesn't compile or pass unit tests, I can't even get it to the client or customer.


(I know this was not your point, but...) Actually, many areas of law are very rigid (in the logical sense) and, imho, quite appealing to the analytical thinker discussed in this post. The practice of law may not be like that (although I don't know for sure (yet)), but the same can be said from the 'practice' of the corporate MS Access programmer or the cookie cutter CMS web programmer.


This is why I like the word "hacker" outside of it's more "modern" meaning. A programmer can be nearly anyone with some basic skills, but a hacker is a fundamentally different animal from the rest of the general population. The hacker doesn't even necessarily have to be better than the bulk of his non-hacker, regular programmer, peers (though I imagine you'll often find that to be the case) because it's not about skill, it's about mindset.

It's certainly not limited to programming either of course. I would likely consider a career electrician who moonlights as a coiler (of telsa coils) to be a hacker. If I had to put the meaning of it into words, I would say a hacker is anyone who has a passion for the art of something, as opposed to someone who merely participates.


> This is why I like the word "hacker" outside of it's more "modern" meaning. A programmer can be nearly anyone with some basic skills, but a hacker is a fundamentally different animal from the rest of the general population. The hacker doesn't even necessarily have to be better than the bulk of his non-hacker, regular programmer, peers (though I imagine you'll often find that to be the case) because it's not about skill, it's about mindset.

Not sure if you realize it, but this ties in perfectly with apl's original point about self-aggrandizement. What better way of congratulating yourself for being a different, superior kind of person than using a term which (by your definition) puts you into an exclusive club without even requiring you to be smarter?


The difference is the explicit mention that neither group is superior. Splitting people up by how "smart" they are (how can you even begin to measure that?) is entirely uninteresting. Think of it more like a division between "Type A" and "Type B" personalities.

It's not about smarts or superiority, it's just a way of classifying motivation.


When did you say that neither group is superior? You said that "hackers" don't have to be more skilled, but every other part of your post implies that you think they're superior as human beings.


I say that hackers don't have to be more skilled (superior - in my personal definition of the term).

I also state that I believe they more often than not are more skilled (which I recognize and appropriately tag as my own opinion, not a fundamental part of the concept)


Even more than that, there's the whole hustle element to good hacking. That hustler + hacker combination is how you get amazing things done. (Shall we call them... the haxlers?)


I agree, especially on the part about law. "Legalese" is like natural language programming. It's very well structured, but very hard to parse for people not in the know (like myself). I think writing solid contracts is very much like writing solid programs, if only in the type of thinking that goes into it.


I think the delusion may stem more from the fact that there have been far more software engineers than say, lawyers, law enforcement agents that have had a huge impact on society. This doesn't mean they are at the absolute top of the heap - I think there is an open recognition that there are a number of other sciences that are having the same type of impact right now.

Whether or not this has anything to do with a truly "different" way of thinking, that's up for argument.


> I think the delusion may stem more from the fact that there have been far more software engineers than say, lawyers, law enforcement agents that have had a huge impact on society.

Is that so?

Abraham Lincoln ring a bell? Didn't do too bad for a lawyer.

Law enforcement has a HUGE impact on society try to imagine the world without it for about an hour or so.

Really, the delusion that we have a huge impact on society is to the detriment of seeing how much other professions, both individually and collectively have on our society and that we are only able to function in our respective niche because others do their work.

Even garbage disposal is essential and has huge impact on society and it's one of the most menial jobs.


I had to reread your first sentence quite a few times. You're saying that software engineers in total have had more of an effect on society than lawyers or law enforcement officers? If this is really what you're saying, I think that you are taking the work of these two groups of people completely for granted. Software engineers have affected society, but universally more than lawyers and police? I highly doubt this. You recognize that the vast majority of politicians in the US (for example) and other makers of policy tend to be lawyers, right? That almost every major court proceeding that determined interpretation of legislation and the Constitution have primarily been lawyers? Law enforcement agents also have a huge impact on society...by preventing it from imploding.

I'm not saying that software engineers aren't reshaping the world, but let's not use this as a springboard to downplay the (very important) contributions of other members of society.


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.


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.



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.


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.


People aren't uniformly distributed among the different types either. I accept your point though; the distribution of programmers across Meyer's Briggs types isn't the same as the distribution of all people across Meyer's Briggs types.

Correlation is not causation either though (not that you said it is).


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]


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.


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.


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'?


I think your argument is flawed. Programmers do think differently. It is similar to the difference between a shy introverted person with few friends and an outgoing extroverted person with many friends. A great salesman could take the introvert and get them used to more social interaction. The introvert could learn about all kinds of social cues and ways to connect with people in any situation. So then you say that there is no difference between an introvert and an extrovert - look at how many friends the introvert has now!

There are many people in this world that don't use analysis and logic in the same way that programmers do. That doesn't mean they can't learn, but the fact remains that many non-programmers currently do not think the same way.

I do think most people are capable of programming, but I think it is misleading to say that "programmer thinking" is something everyone already does.


Just because you can teach anyone to program doesn't mean that certain personality types don't gravitate or acclimate to it more readily than others. I agree that conversations about the differences do contain an air of superiority, but it doesn't mean the generalization is false.


I agree that motivation can counteract for lack of talent, but I do not think that is as absolute as you make it here.

No amount of effort would have made me run the 100 meters within 11 seconds. Sure, there is a level I could have reached, and one could call that running, but I couldn't have made a living from it.

Qualitatively, I think programming is similar. Quantitatively, it is different; many more people can get a job as a 'programmer'. Nevertheless, I still think there are people who couldn't work hard enough to compensate their lack of talent to get one of those jobs.

And of course, the number of programmer jobs in the world depends on one's definition of programmer. At one extreme, HTML and Excel are programming languages. At the other end, there are maybe a couple of thousands of programmer jobs in the world.


Programmers do 'competitive sports', code golfing and what not. Sure there is a level that you can reach, but you can't make a living with code golf no matter how good you are.

Excavator jockeys hold egg peeling contests, and of course you need to be really good at that to be able to even begin to control a 30 ton excavator to peel an egg without squashing it.

The only reason you can earn money with running is because:

(a) everybody can do it (so we can all appreciate a good runner)

(b) we can judge your expertise by the clock (in 1/100th of a second, as if that matters)

But in the end that's very likely a large amount of innate ability and an even larger amount of training. Setting aside your life to be able to run a world record is in itself not worth anything to anybody - if you fail. But if you succeed we will place an inordinate amount of value on that because of media exposure and national prestige.

Running by itself has little to no value, even very fast running (unless you're trying to get away from that cheetah).

Programming is a useful thing, at almost every level of skill and the more you do it the better you become.


Anyone can hold down a programming job without being able to program. That's unfortunately one of the main issues in the industry. Most 'professionals' are complete rubbish.

You can "teach" anyone to play the piano. But only a small % of them will be able to play it well.

Difference is, anyone can tell if someone is a great pianist, but being a great programmer is much harder to measure.


"...at a level high enough to hold a job down..."

Don't you think you're setting the bar a bit low?


No, not really. Is that a 'no true Scotsman' argument in the making?


No. Being able to program is not really a requirement for holding down a programming job. I have honestly worked with "programmers" on dev teams who never actually got a line of code into the product -- because thier code was always gibberish that barely compiled, didn't actually do anything, and was easier to just rewrite. Somehow they made management happy so continued to get paid.


Sounds like you should move to better employers :)


I have -- thanks :)

However, the point still stands: unfortunately this is an industry where being able to adequately perform the tasks is not a job requirement, therefore holding down a job is not a good measure of skill.


I'm quite surprised by that because that would seem to be pretty counterproductive and is not going to help those companies one bit. Most companies have a profit motive and would not be able to achieve their goals if they went about hiring people like that. I also honestly do not know of a single place where the programmers are not able to actually produce working code, though I definitely have seen various levels of expertise on display.

The most interesting little group of people are three friends that I know, one started out doing electronics, I taught him how to code, he taught one of his friends and they together taught a third guy (who was a pizza courier at the time!) and together they now run a very profitable software company.

And they're all pretty good at what they do, and they would never hire someone that was not able to hold their own.

I've worked at a bank long ago, and definitely the number of people working there that were 'adequate' but not 'great' was larger than elsewhere but there were a couple of guys there that would definitely give you a run for your money.

Typically they'd gravitate to 'systems programming' and the others would be 'application programmers'.

In an symphony orchestra I guess there would have to be a first violinist and 'others', and in carpentry there are cabinet makers and 'general' carpenters. Not everybody will end up being equally good at their job.


Sure, this is true and logical, and actually observable in small/medium companies. In large companies, or companies where software is not the focus however, there is very much room for this sort of counter-productive behavior/effect.

In the middle management tiers, and in the "non-mission critical, support divisions" the company goal and money making are easy to lose sight of. There is a lot of politicking for personal gain, and the employees have a tendency to not care about the company and maximize ways they can personally benefit. This is the land of the programmer who can't code. He exists as a warrior in the landscape of barely competent people with nominal jobs, carving out little empires for themselves and doing things that actively hurt the overall bottom line.

I think maybe jacquesm, you have been a good, motivated programmer surrounded by other good, motivated programmers for long enough that you have forgotten the world isn't entrepreneurial, that most people do the bare minimum at "work, cuz thats why it's called work". This isn't a criticism so much as a reminder of the rest of reality :)


>they're willing to put the time in and willing to learn.

People who can't learn programming will quickly decide it's not worth putting their time in--this criteria will select out those people you are looking for...


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.


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.


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.


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"


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.


Exactly! Programming requires a slightly different type of thinking that is learnable but that most people find undesirable to even attempt.


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


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.


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.


A couple days ago, I submitted this article to HN http://www.newscientist.com/article/dn19940-chess-grandmaste... . 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.


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.


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.


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.


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.


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.


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).


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'.


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).


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: