What I think is cool about programming is that if you can understand a book, like the C Programming Language for example, then you can probably program. Although, being able to understand that book may take a little more work than just reading it (you might need some supplementary material). A lot of other pieces are soft skills for becoming a professional software engineer, such as time estimation, communication, version control, etc (soft skills in that they can likely be picked up on the job).
Yes, but the coding part is usually the easiest party about being a programmer. All the other skills and knowledge you mention are what makes me far more valuable than when I started 14 years ago.
I think there is a huge distinction between learning how to program, and becoming a valuable programmer. We need to decrease the barrier to entry, so that the more valuable skills (such as abstraction, optimization, security, etc.) are reachable for everyone and anyone.