Your contrast between "software engineer" in one sentence and "programmer" in the next is interesting. Did you mean to imply that there really is only one set of characteristics that define a great programmer, or were you assuming that software engineers and programmers are the same thing? (I disagree in either case, but I'm not sure how to parse your post to debate the point you intended to make.)
In that case, let me suggest as an alternative that a common problem with these posts is that they only consider characteristics of programmers. The difference between being a mere programmer and a software engineer (at the risk of offending real engineers who earned that title) is the way the engineer runs his or her project, from capturing and interpreting the customer/client's actual requirements at the start, through to QA, deployment and beyond. Writing a program is hard, but writing the right program and being sure that it actually works is even harder, and herein lies the difference IMHO. That all said, this particular article doesn't fall into that trap, so I'll leave it there.