I totally agree with the 'thinking in abstract terms' thing but I would never reduce programming to that. It's not always so abstract.
I tend to think that it'soften good rhetoric skills. A great ability with the three different types of rhetorical proof: ethos, logos, pathos.