In order of importance, if its possible to do so and it may not be, what are the most important foundations of knowing how to program. Algorithms, iteration, recursion, etc?

Note that where I put etc. is where my question lies. I recently read an Internet post that said 9 out 10 programmers can't *gasp* program! 

<http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html>

I want to have a deep knowledge of what it is I am actually trying to accomplish when programming and an exhaustive comprehension of the basic tools at my disposal. Basically I want to be able to paint with all the colors of the wind.