I always thought software engineer’s main skill is problem solving. Skills mentioned in the article are of course of value as well: Attention to detail helps to produce solution faster, pattern recognition is actually a result of high intelligence, ability to invent new abstractions at multiple levels. But they are nothing without general problem solving skills, which are rooted in intuition.
There are different approaches to solve problems (also depends on the kind of problem), from methodically going through possible solutions to waiting for insights. In every day SW engineer practice hard problems are rare, that is why maybe be accuracy, pattern recognition, abstraction skills come to first place? And “problem solving” becomes problem decomposition.
As for how to improve all those skills — practice and theory, theory and practice.