This is a rather narrow viewpoint of what makes a great programmer in my opinion. One completely missed element here is the ability to track organizational complexity. For example, you have a site with 100,000 lines of code. Making one change somewhere affects 10 other things elsewhere, each of which might affect another 10 things. Keeping track of all that is what I'm talking about. Same skill you find in great chip (integrated circuit) designers. Personally I think it's far more important than some of the concepts here, which focus mainly on algorithm-level stuff.