There are two very different aspects.
1. Learning to program.
This covers basic things like how to use
- sequence (add flour, add egg),
- selection (chocolate chips or raisins),
- iteration (stir 50 times)
What algorithms are and how to choose which one to use, say
- bubble sort vs. quicksort
What the primary data structures are and how to use them
- arrays, lists, trees, hashes
How to generate a requirement (what do you want)
How to generate a design (how will you do it)
How to organise your code/data in a modular fashion so that it is
- testable
- maintainable
- reusable
This is more or less independent of the programming language
you use. If you learn and practice with an actual language,
it need not be the one you end up using for real work.
I learnt to program with Pascal, but I've never used it since.
This is your truly portable skill set which you can re-use
across a wide variety of programming languages.
If you're just doing a quick hack as it were, you may just
imagine the requirement and design in your head for a couple
of seconds. For a really big project it may take you and
your colleagues several months to complete.
2. Learning a programming language.
This is how you actually use your programming knowledge to
solve your real world problems. Ideally, you will learn
several different programming languages (not just close
cousins like C and C++). Then you will be able to choose
the most appropriate language(s) for the problem at hand.
If you just learn a programming language, you'll be stuck being
a "hello world" programmer in the language of your choice. That
is, you'll only ever be able to tackle relatively small programming
tasks before the size of the problem overwelms your ability to
cope with it.
--