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.