Its unarguable that programmers think in binary, but I really want to know how a programmer's brain function, the ability to relate the unrelated, the capability to think about code even while sleeping and the ability to read and understand documentation at a very incredible rate. This argument comes up during launch while non-programmer staff mentions pointers and a programmer be like do you even know what you are talking about ? The argument starts.. I am looking forward to expert engineers answering this question from different angle.
What really is the difference ?
I recently shared this awesome article by Eric Elliott - Are Programmer Brains Different? which gives you core answers and provides links to some researches you are looking for.
Nevertheless, not engineer is capable to answer your question how you formed it but a neuroscience. However, in terms of abilities, I am still able to confirm the Conclusion in Eric's article:
Are programmer brains different? There seems to be good evidence to support the idea that programmers may have enhanced working memory capacity, heightened language processing skills, stronger analytical skills, and possibly enhanced hippocampus capacity (we need lots more research in this area to test those educated guesses).
Please note, that Eric marked a word "may" and that there is a need of more research.
In other words: Brain is like a body and only if you train it, it may "look" stronger, and as an engineer you get a better memory, can think in smallest details applying logic and analysis, etc.
I am a proggrammer and have been for some time. For me, it is difficult to compare then and now, but here is some situation I run into from time to time:
Currently I am working on getting my pilot's license. So I have to go sit inside a plane and fly. As a programmer, I want to do everything exactly as my flight instructor tells me. So when he says "increase the height at a constant speed of 70mph", I look at the dashboard and make sure to keep that speed. The problem is that, especially when landing, you have to keep so many factors in mind, that observation becomes very stressfull and the landing unstable. So my instructor told me this: "stop looking at the measurement equipment. Start looking outside! Feel the plain!". That was a good hint for me. But then my brain started thinking: "So, how will I know the speed?", because for landing, speed is very crucial. My brain came up with a number of ideas, then evaluated them and now I use my ears to deduce the speed from the sound of the engine, which takes a lot of stress away... though I am very sure that's not what my instructor meant. It's still not a feel for the speed, but it's easier and my landings became a lot more stable in just minutes!
As a result I think, a programmer is a lot more problem->solution oriented than your average person, so while an average person will try to get the feel (and take another few hours, but have a better long-term solution), a programmer goes about a logical course, like using unused capabilites.
.... ask a neuroscientist to make a study ? .... because everything else is kinda guessing and the people who tell you the fact that's closest to your opinion will probably win without any hard evidence supporting it.
programmers are humans which means we are bias, maybe programmers have certain brain patterns but even if we have it's only relevant if we compare them to all other fields because maybe a gardener has the same structural thinking patterns ....
the idea and question is interesting but asking a developer how his brain works is not really about facts ... :D anyhow I love to read opinions so I am not against the "self help group" where we argue why we are different and how we are different without opening any meaningful dialog with all the other actors :D ... but I want to point out that most of us are not qualified to have more than an opinion :) ..... ask quora such questions maybe with neuroscientist :) and maybe you're lucky and you will get an qualified answer from an expert of the field :)
Below are the examples I can think of about how a programmer and a non programmer brain differentiates;
First of all, a programmer brain should always think the worst cases and possibilities that other brains wouldn't think about. Ask a group of people about how to make a peanut butter and jelly sandwich and you'll point the programmer brain right away. It is about exceptions. You both have to see the whole picture and also think every little detail that can be go wrong.
Secondly, if you have a passion for programming, you could easily get obsessed with your code. For instance, if I had a bug that day or a design problem I couldn't find a final solution yet, the last thing I will think before sleeping will be that. I just can't take it off from my head; 'How can I make it better?', 'How could I prevent that happening again?' etc. (Of course my wife hates that because this is not a good topic for a pillow talk.) Many times I've experienced an enlightenment that the solution just formed in my head. I am not sure if I did sleep or awake. But I'd know what to do about the problem when I wake up in the morning. This is something comes with the obsession I believe.
Lastly, I remember when I was a child it was more important 'how stuff works' other than 'what it does'. That's why I've disassembled every electronic or mechanic toy I had during my childhood. When I find out computer games, I've thought about how do those things work after playing a few hours. I am just curious about it. Many millions of people don't even think how a cell phone works. Voice transferred over air? It is just like a miracle. But a programmer brain is curious, he/she thinks about internals. He/She even have empathy with the other engineers built those things. For example, I can easily find out how a setting is changed on any consumer electronics without checking the user guide because I can see the device from eyes of the engineers designed it; 'that setting should be there'.
There are many other differences, mostly originated because of programmer brain is more inclined to analytical thinking. And I believe most of them aren't related with talent but comes with experience and passion.
Mario Giambanco
Director of User Experience Development
Further to the question, I think there is a difference between self taught programmers and programmers that learned via school.
Programmers that learned via school are similar to any other career that requires formal education. For a time, they tend to be laser focused on what they learned; may be resistive to opinions outside what they learned (I've experienced this) and insist on doing things the way they learned it.
Programmers that are self taught tend to be more open to trying new things; can easier relate problems to non-programmers and tend to make analogies to explain problems or concepts.
This isn't to say a formally educated programmer can't adopt self taught programmer skills. Once formal education has ended and the programmer has to continue to learn on their own, these ways of thinking may or may not develop over time, but IMO, theres a big difference between someone that needs to be taught and someone that can teach themselves.
This is why I constantly preach that it doesn't matter what language or framework you use. A good programmer can relatively quickly jump into a problem and figure things out, regardless of their education. What matters most is using the right tool for the job. As a builder needs to decide to use screws or nails; a programmer needs to make similar decisions, usually relatively quickly.
The best kind of person to ask this question to is someone that wasn't a programmer, then learned (be it formal or self taught) and see their point of view - but then you could say, maybe they always had a programmers mind and the job they had prior was similar enough that they could make the transition.
I've never done paired programming but I have had non-programmers sit with me as we develop an idea for a feature. In these cases, I'll actually write code with the non-programmer watching me, discussing what it should and shouldn't do, colors, layout, etc... and after a few minutes, they begin to go code blind and say "how the hell do you do this".
I once was also helping someone hang a tv on their wall. I cast the instructions aside, layout all the tv mount parts and screws on the table and begin to put it together, this person asks, how the hell did you do that.
So the difference IMO is non programmers tend to have very specific start and stop points. A salesman needs to sell a house or a car. They follow a very specific path; they have a list of things outlined for them to do, in a pretty certain order, but they don't really diverge from the path. Same for a doctor or a mechanic or etc... IFTTT - if I need to do this, then do that.
Where a programmer, it isn't so cut and dry - I need to build a blog (for example) - there is no clear start and stop. Any number of problems might come up at any number of times and the plan may change at any given time. As some say, a programmer must first load the problem into their mind before they can begin work; the programmer is re-loading (if you will) all the prior work, figuring out where to pick up and continue on. Where a non-programmer, if they stopped in the middle, would be able to jump back in at a given point and continue to follow the path.
Regarding the life style point, a programmer never stops working. You may go for a bike ride, or bing watch tv or sleep, but the mind of a career programmer never stops working. Ever have an idea pop into your mind on how to fix something while you weren't programming? That's the minds background process running. A salesman wouldn't do that normally. When their done with work, their done. When Monday comes around, they go back to their list and pick up where they left off.
There are exceptions to all of this of course. The doctor thats poring over medical research trying to figure out a problem with a patient. A salesman working on a multi million dollar deal, figure out how to make both parties happy. Lawyers in general, haha - these might be programmers in disguise that just chose a different path. But I think most people need a clear start, middle, end path of what to do and that separates them from us.