Programming is such a strange thing which could be learnt (comparatively easily), but almost could not be effectively taught :)
It is good to have an idea about "what I want to write", however, it is important to become acquainted with many simpler tasks - one of them demonstrate usage of some data structures, others will give idea of most influential algorithms, third may provide understanding of working with devices, files, APIs, documents of special formats etc.
It is good to be able to invent tons of tasks for solving or find a place where they could be taken from. I'm now creating web-site with collection of tasks for beginners and some means of checking solutions:
As for tools... I am not sure about VB. Basic itself was designed as language for non-programmers, but it was long ago. It definitely lacks many important features of contemporary languages. Many people prefer using Python in education. By the way python has very good official tutorial:
C/C++ is not as bad, but for higher-level programming it perhaps is not the best choice since it forces beginner to dive into the sea of important but not necessary details of memory management etc.
As a matter of fact learning programming is not the same as learning programming languages. You see, if one wants to learn building houses, it is out of question that one should know how to use hammer, saw, and other tools. No manual of house building will start from explanation about "which side of the screwdriver to hold".
So, summarizing, I would say - if one wants to master programming - one should move in two different directions almost simultaneously - learning some programming language (it is not of big importance which - however ones are easier to start than others) - and practicing building of programming logic, expressing thoughts in programming statements etc - i.e. solving a lot of tasks.