Do you think that there is any correlation between being a programmer for an extended amount of time and a permanent restructuring of the way we think in general?

I've noticed some generalizations:

  • Many non-programming people speak in a very ambiguous way. Almost to a frustrating degree.
  • Programmers tend to think in concrete terms. They give you actual answers, numbers and hard estimates to your questions.
  • Non-programmers often feel overwhelmed by complex problems or processes. You'll get the "eyes glaze over" effect.
  • Programmers tend to not feel overwhelmed by complex problems given to them in the real world. Our experience with breaking large systems into smaller ones definitely translates outside of the programming field.

Just from my personal experience I find myself using logic with a high frequency. I find I'm able to assess a situation and determine the likely outcomes without letting my emotions get in the way of my assessment. If Situation-A happens then Result-B or Result-C will occur with all likelihood. I don't stress over it, I simply accept the logical outcomes of any given situation and plan accordingly. I don't blind myself to reason, I guess is a good way to put it.

It often surprises me when I find not everyone thinks in those terms. When my girlfriend describes a problem she is having the solution or outcome is usually instantly recognizable to me. Even if the answer is contrary to what she would like to happen.

Did this come from me having to deal with programming logic for years? Or is this an inate property in people? Does being a programmer simply reinforce a persons logical reasoning?

+11  A: 

Yes, I always say programmers are unable to use fax machines or copy machines. We expect things to work logically and when they are designed for non-programmers, we tend to struggle.

However, we are more prone to walk through the menu hierarchy and find what we need, whereas non-programmers are afraid to touch any buttons that they aren't familiar with.

Jeff Handley
hate fax they still exist?.. simply hate the things..
Ric Tokyo
I still need to ask somebody if I have to place the document facing downward or upward to send the fax correctly.
Nahom Tijnam
Exactly. Yet you put a business administrator in front of ANY fax machine or copy machine, and they can work it with their eyes [email protected] -- just gotta look at the picture in the mold of the document tray to see if the lines are up or down on the folded piece of paper. :-)
Jeff Handley
I cannot work with any machine that has less as 102 buttons/keys
@Gvs LOL @Jeff: exactly! they can work magic on those fax machines, but they dont read their Inbox
Ric Tokyo
any machine that can't be accessed from your desktop using your keyboard is not useful
I've specialized into user interface design/usability, and usability problems of systems jump right at my face. Lately I've used a copy machine with a 10" color touch screen. I could design a wonderful UI given that hardware, but now it's one of the hardest to use copy machines I've ever met.
Esko Luontola
+15  A: 

Many non-programming people speak in a very ambiguous way

Well, if you also speak too logically, people will not understand you either (in normal world situations, people expect ambiguity) if in daily conversation you don't apply enough fuzzy logic they can become stuck and lose focus of what you are saying.

Programmers tend to think in concrete terms. They give you actual answers, numbers and hard estimates to your questions.

Except when you ask them when they think they will be "Done"

Non-programmers often feel overwhelmed by complex problems or processes. You'll get the "eyes glaze over" effect.

well .. you can have this at all levels.. my brother in law is a physicist.. not a programmer.. and he can have thought abstractions that may derail me at times..

Programmers tend to not feel overwhelmed by complex problems given to them in the real world.

I hate filling out forms.. just hate it.. (real world forms.. computer based forms are fine)

Our experience with breaking large systems into smaller ones definitely translates outside of the programming field.

totally agree :)

All in all I would say yes..programming changes the way you think.. but just in the same way doing anything else with your life changes the way you think..

sculptors, painters, musicians...after some time at their jobs will develop skills and thought processes related to their field..

Ric Tokyo
wow...cant make an edit that looks acceptable today..
Ric Tokyo
+2  A: 

I look at any repetitive writing task, and my mind always turns to how easy this would be to solve with a perl script.

Mike Douglas
+27  A: 

I was so happy the other day when my reputation hit the beautiful, round number 4096.

Brian Rasmussen
I feel sorry having up-voted this response. :)
being_a_programmer_changes_the_way_you_think = this.answer == accepted? "yes":"no";
Ric Tokyo
@Brian, you should have answered all in Wiki mode since then
Just downmod lots of posts and u can get that back :P
Pablo Cabrera
@Pablo: well, 8192 is nice too :)
Brian Rasmussen
And there's a certain guy on SO who has just passed 32768.
Simon Knights
@Simon - Yeah, I know and its amazing for a guy who is only 20.
Brian Rasmussen
+3  A: 

Programmers are by nature analytical. While typical people tend to operate on a case by case basis (see law, for example), programmers see the value of creating a framework against which to find, address, and solve problems.

That is not to say that the programmer ethic is ideal. "Normal people" are often more perceptive to the needs and wants of other people, or are better able to efficiently calculate a "darn good" solution when it is hard to craft a well-defined and efficient framework. (Edit: But... programmers are right 99% of the time... and that let's them be "appropriately lazy" compared to the person dealing case-by-case.)

I think law quite near to programming. It is one of the fields where a lot of logic is applied in a systematic way. The only magical thing those lawyers do is that they "take into account he human factor"
+4  A: 
  • I find it hard to explain my programming work and hobby to non-programmer friends. Even highly competent sysadmins tend to get the eyes glaze over effect at times.
  • I am continually looking at problems (and the Engineer in me comes into play too) and thinking "what a crappy solution, I could make it work better than that in 10 minutes".
  • It bothers me when people don't know how to use a computer, or use programs in ways they're not designed and then whinge about how crappy the software is. It doesn't matter that the next option in the menu would have been the better choice.
  • I look at everything I do in a programmatic way; "if this then that, steps blah otherwise more steps blah".
  • I scan lists and tables in books in a binary kind of way - it's actually more efficient for long lists.


  • I find I become more pedantic after a session of hard coding; expecting the computer to obey my smallest instructions literally and having to chase down minor things that it's doing wrong makes me expect that of everything and I focus on the minor things that are going wrong.
Adam Hawes
hahaha got me there.. "I hate when people don't know how to use a computer" I avoid being like that, but every time I "help" someone install something, my patience starts at zero and goes down from there!!!
Ric Tokyo
@Ric: I guess it's more that I can't stand it when someone won't stop to think about what they're doing and are trying to wrestle it with whatever program they've always used even if it's the wrong one and a better one is available on their machine as well.
Adam Hawes
the friendlier you are with the person, the worst it gets..a friend of mine wanted me to help her install real player over the phone. (to listen to BBC lessons) thank goodness we had the decency of giving up fairly quickly.
Ric Tokyo
It also bakes my noodle how many "IT professionals" don't know the very basics of IP networking. There's a lot of so-called "experts" who know S.F.A but managed to install XP once and spout off all the buzzwords, or write a program in some MS RAD tool and call themselves experts of computing.
Adam Hawes
+11  A: 

From my readings on learning and the mind, my understanding of the topic is as follows:

  • The brain has many different abilities. (See the Theory of Multiple Intelligences)
  • There is a genetic component to mental ability, so some people are born better at some things than others. (See Factors affecting intelligence)
  • One can develop practically any skill through hard work and practice. Those with less skill can match geniuses as long as they are willing to put in 10x more work. (See Being a Genius Is Due to Hard Work, Not High IQ)
  • One tends to think in the same ways one has thought before. Problems are approached and solved using familiar techniques because these are the first ones that come to mind, because they are instinctive. (See Habit (psychology)).

Applying these principles to the question, it is likely that most programmers were already born with above average concentration and patience, and innate propensities toward logical thinking and organizing knowledge. I know I've had such abilities since childhood, before I ever started programming. Programming appeals to such personalities, and practicing these same skills helps them to develop even stronger. Programmers who are weak in certain areas, such as mathematics, quickly develop the necessary skills as a prerequisite to graduating with a CS degree or doing well at the job, even if they have to work very hard to obtain them. If they lack the patience or motivation to strengthen their skills, or don't enjoy using their minds in this way, they tend to drop out of the profession or degree and thus are not counted as programmers anymore.

Programmers tend to approach life in general from a programmer's problem-solving perspective. When you approach problems day after day using the same techniques, you tend to use the same techniques the next time you encounter a similar problem.

In effect, a programmer programs their own mind to think in programming terms through innate ability and also through force of habit.

See also:

Good answer davogone. Well thought out.
I was going to say most of this, but looks like you have it well covered :-)
Phil Nash
+1  A: 

Being a programmer did not change the way You think, it trains Your way of thinking.

Lukas Šalkauskas
What's the difference? Please elaborate.
+1  A: 

Oh yes! in my experience. I've had changes that are temporary and permanent.

After coding continuously for long time, I tend to think that I can undo things in real life. Fortunately I get out of this "feeling in the back of my mind" after couple of days.

Nahom Tijnam
me too!!! because everytime I make a mistake I can redo it, which is given for granted, so my brain extends this expectation to real life!
hasen j
+3  A: 

"The experience of being proved completely wrong is salutary. No economist should be denied it, and none are." - J.K. Galbraith

Of course Dr. Galbraith never had the experience of mentally reviewing some buggy code time-after-time-after-time, repeating to yourself why it just HAS to work, until the mantra "What do I think I know which might not be so ?" finally cracks it.

Anyone who needs the experience of being proven wrong is advised to take up programming, even as a hobby I think it would be a great lesson on how your mind can think it's got a total picture when it really doesn't.

Joel Spolsky's classic essay, The Big Picture, discusses how you can watch yourself underestimate the transitive-closure of a few apparently simple requirements over-and-over again, you learn about this other way your mind has of fooling itself into thinking it knows so much more than it does !

I liked your post, it just need a little formatting. +1
Thanks I am not very good at that so far.
That should probably be "salutary".
@Jonik, I fixed it
+2  A: 


One example you touched on: Ambiguity is often detrimental in programming. Any ambiguity in specs or implementation (behavior) often leads to a great deal of trouble down the road, so as programmers we often seek to be as explicit as possible.

However the same could be said for fast food service or scientific research.

The big difference is that, in either of those cases, you have a human executing the "program" who can react in a non-deterministic way and use facilities often not included in complex computer systems - facilities that permit catching and recovering from mistakes in novel, new ways.

Programs, being naturally less complex and frequently much more deterministic, rest upon a lack of ambiguity to reduce any "mistakes" in behavior to a mistake in the design or algorithm. (Recovery is often not an option, or relatively crude in comparison.)

+51  A: 

Becoming a programmer did not change the way I think. It was the way I think that made me become a programmer.

That's what I was going to say. Guess I'll just have to go for something funny instead.
+3  A: 

I've found it makes me very precise.

Alex Baranosky
Well, 'very' is not a precise term!
Simon Knights

Is it the other way 'round: A differently-tuned way of thinking makes you a programmer? In any way, actual programming will sharpen that elusive skill.

As for logic vs. everydays people talk: What seems ambiguous is actually just strong context awareness and a probabilistic approach to providing the most effective reply. The "logic talk" is very efficient for data transfer between dumb automatons. I wouldn't be too uppity about that part.

As for
I find I'm able to assess a situation and determine the likely outcomes without letting my emotions get in the way of my assessment [...]
- everyone thinks that of himself. Everyone finds great logical reasons for the things he does. So unless there's a conclusive study I wouldn't assume we are better at this game.

But I agree that there is something different - I just don't know what it is. The camel has two humps shows that there is something to look for. Yes, we are better at logic, so it's easier for us to apply it to everydays situations. We are probably better at recognizing patterns and structures, as it is a big part of the things we do. We are likely better to treat all alternatives equally possible.

However, even if we are better, we are still trapped within being human. Take the study mentioned here: Rats 1, Yale Undergrads 0. Would programmers, given the same input, fare better? What is the maze that tricks us?

I think a good programmer - rather, someone with that elusive skill - should be able to determine an "always left" would have been better. But maybe now I am getting uppity...

@peterchen, I disagree about the ambiguous talk. When I talk to someone and I want to know when something needs to be done or what they want done, I don't want ambiguity. "Oh sometime in the near future" or a poor expression of what is required is common among non-programmers.
@peterchen, there is simply a lack of ability to describe oneself in concrete terms. There is a lot of hand waving that ultimately points to the person not really knowing what they want or are talking about.
@Simucal, I think you are attributing the skills of mathematicians to programmers.when we are using the philosophical principles of old school programming and mathematic thought, we become better at a way "programming is part of the group of occupations that use thinking to achieve goals"
Ric Tokyo
@Simucal: That is (in the good case) telling you: "I can't give you a date, but in the near future there might be shouting and stomping about it". Bad/Non-management, but reasonably good communication.
+1  A: 

I think just by using computers your mind will travel quite a bit:

Computer programmers are primarily computer users, every "We" I use here, actually means computer users, not just programmers.

These are some examples I find that change people who use computers:

  1. We don't want to wait for people to finish their sentences and always try to second guess slow speakers in how their sentence will end, "rudely helping them along" we are just trying to speed the conversation up, because we spend all day working with what should be fast response conditions.

  2. We cannot read a book "normally" just as if it was a multi tabbed browser I go around either reading two or three books at the same time, or watch TV while reading a book, etc.

  3. Above sometimes applies to conversations too.. I sometimes go backwards and forwards dissecting what someone is telling me, instead of passively absorbing what they are saying.

  4. We think of how everything could be improved with something electronic.

  5. We sometimes look at something and think: "wow, I wonder how this will look on my blog"

.. I am sure there are more..

But my meaning being: perhaps computers change our minds or computer use changes our minds, maybe even more than computer programming

Ric Tokyo
Odd, I do none of those things,(ok sometimes point 3). I love nature and can not stand having the T.V. on if I'm doing anything. Maybe I'm just an out of work philosopher stuck at coding. ;)
I love nature too.. but watch T.V. .. just not the passive way.. I am always playing something I have like a DVD..normal TV only news..
Ric Tokyo
+2  A: 

I think it is a little of both.

Programming sharpens your logical abilities to a fine point but at the same time, logical thinking people are naturally attracted to programming.

So there is a mix of inate reasoning ability and the long-term effects of dealing with logical machines day-in-day out for years.


About programmers being less ambiguous than non programmers...

..Some cases of programmer language gone bad:

doesn't sound very logical to the uninitiated, but some make sense to some of us

  1. it crashed? Good (any level, any field)
  2. cd and you will be home again (Junior~Mid Linux Admin)
  3. if its this broken? .. well yes and no.. (Junior Dev)
  4. you know, it will get there faster if you stop clicking..(Junior Admin)
  5. just restart the machine (Senior Windows Admin)
  6. Don't restart the machine (junior Linux Admin)
  7. I'm sure it will work, but I will recompile only after the presentation, please (Senior Dev)
  8. the reason why its giving you the right results, is because its not working properly (Code Ninja)
  9. its there, you just can't see it. (Senior Dev)
Ric Tokyo

After spending an intense day writing code that was plugging bits into hardware registers, it took me a small amount of mental gymnastics to start thinking in decimal instead of hexadecimal again...


I find it hard to try and solve sudoku puzzles because while I'm puzzling away, the back half of my brain is thinking about what would be involved in writing a program that could solve the puzzle for me instead.

I suspect I will have to actually write the program and get it out of my system before I will ever be any good at doing them myself!

I actually once wrote a solver for sudokus. It was an interesting algorithmic exercise. ;)
Esko Luontola
+1  A: 

The real test of any theory is "Does it work", and then "Does it work well enough".

A programmer (like all real engineers) is constantly challenged in a very direct way: either it compiles or it doesn't. Either the bridge can support the weight of the trucks or it doesn't.

And if it doesn't, no amount of fancy talk is going to mask the fact that the theory just didn't work. As programmers, even if our examples are usually not as dramatic as a crashing bridge, we face this test (Does it work) many times a day whereas other branches of human endeavors seldom enjoy the benefits of a compiler.

"I find I'm able to assess a situation and determine the likely outcomes without letting my emotions get in the way of my assessment."

That might actually be a downside to it. Discounting the importance of emotions because they "are not rational".

Emotion is how we convert our ideas into actions. You can punch through a wall in anger, run faster than you ever did when in fear, get a loan with a conservative approach and get a date with some cheerful pretty skirt with an abundance of enthusiasm.

Taking emotions out of the equation might work in theory, but in real life, it doesn't compile, does it?

I'm not suggesting we be emotionless. I think you misinterpreted that part of my post. I'm saying that when faced with a predicament or crisis I don't let my emotions cloud the issue at hand. I see distinct cause and effect and I see the possible logical outcomes. I don't blind myself to those
(cont) outcomes and feel sorry for myself or hope for the best. When I look at those crisis situations I realize that no amount of fretting will change my situation. I simply assess what is the most probable outcome and plan accordingly and make the forward steps available to me. +1 for first 1/2
I'm perfectly enthusiastic around the ladies. ;) Just don't expect me to be irrationally upset over situations out of my control or whose outcomes are largely already determined. That is the point I was trying to make. See the situations, assess, decide possible outcomes, act.
Thanks for clearing that up. I get what you mean.

I never feel alone being a programmer. The feel like the whole world is on my lap.

I'm not sure what point you are addressing in the question, but I'm glad for you none-the-less.
As a programmer and that too into web technologies, I feel very close to the world and never alone.
@Techmaddy, because you are working with technology that a lot of people use or because the community of developers is large or what?

If you are a programmer it meens you have a minimum of logic (I said a minimum :p) And in real life even if your are note understud all the time or worst you appered weird to some people , logic is the key to everything.

It get me crazy when I see my girlfriend open the main lock befor the second (because the main lock opens the dor so she has to put back the key in the first one ^^) and she's not stupid she just did litterature studis!!


Yes. In "real life" I tend to do stuff sequentially, so I have bought a book on multi-threading :-)

Peter Morris
+1  A: 

My debugger has essentially proven to me that like it or not, it's usually my fault.

Christian Nunciato
+1  A: 
#include "davogones.comment"


...with that out of the way I'd like to pick up on one of your points:

  • "When my girlfriend describes a problem she is having the solution or outcome is usually instantly recognizable to me. Even if the answer is contrary to what she would like to happen."

This is probably as much about the differences in the way men and women think about problems than programmer/non-programmer - although the two factors together probably multiply. Check out Men Are From Mars Women Are From Venus if you've not already done so.

Finally, and others have touched on this already - don't discount the value of acting on emotions and gut instinct - and applying context-focused fuzzy logic to problems. The big step comes when you can integrate all these things with rational oversight (check out Emotional Intelligence)

That's what makes humans great.

Phil Nash
@Phil Nash, very good point about the differences between men and women.
+3  A: 

In some ways it is a curse. You start seeing so many things that could be optimized or done a better way. I constantly want to improve processes/systems.

It drives me absolutely crazy going through most airports and watching how badly the processes are.

Chris Ballance
+1  A: 

Programmers are Homo Logicus

Ric Tokyo

I was in love with philosophy and poetry before I started programming, two fields structured closely to programming. I have not noticed that I think any different now than before, I was always analyzing and theorizing. What I have noticed is that now I tend to do more planning than before and that I have less patience with inconsistencies.

If you tell me that pink elephants can fly on Friday, but only on Friday then I had better not see any on Thursday flying.

+2  A: 

I have major clashes with non-programmers because of how I dissect problems.

Just ask my girlfriend how frustrated she is when I try to dice her argument up and backtrack to fully understand things.

Sometimes I detect logic flaws, and it can take a while for a non-programmer to understand what I'm trying to point out. Some take offense, and may think i'm being a smart-aleck.

Price I pay for thinking a little too methodically, I guess.

This is so familiar...
Adrian Grigore
+2  A: 

Yes, I have solved real project bugs in my dreams.

But for the most part I think we, the programmers, tend to overanalyse everything in real life. When everyone else is just "going for it" we tend to analyse every outcome, every scenario and every input/output to the situation at hand. We look for flaws, ways to optimise and make things effectively.

When I renovated my apartment I went for the most maintainable and most effective design. For example a dish drainer/plate shelf above the sink, smart, elegant and user-friendly hah!.

Daniel T. Magnusson

I'd say being a programmer changes what I think of, as does any other profession. I did roofing for a summer a while back and man if I didn't start seeing more roofs.