Hi!
Even though I have very little in finished products to show for it, I think I got a basic hang of programming, so I want to try to help you a little bit.
C++ is a good choice in my opinion, provided the libraries you use are properly installed (that is the reason why I prefer other languages/engines as some libraries drove me nuts). Stick to it, I suggest.
Programming itself is basically a loop of asking "How can I do this?". The first step in programming should be figuring out what program you want to create. You need to be precise about what you are looking for and need to put that vision in some kind of words or graphs, so you can easily continue investigating it.
So, you start with the question "What should happen?" and extend it to "What should happen if the user does this?" and also extend it to "What should happen next?".
One thing that can be useful in this context and for the next step is to consider the basic nature of computer programs:
Input => Processing => Output
Of course, modern computers and their programs mix these aspects a lot, but those three factors are what you are looking at nonetheless, and for every section of your project description, you want to check how each of these may be involved in that part.
For instance, let's say you want to create a classic 2D RPG. One of the elements you are looking at is moving around the place.
Quite obviously, the input by the player are direction keys and keys that trigger interaction.
Equally obviously, the output is the screen display and maybe sound effects.
The processing part, however, has several interesting subaspects:
1. The key pressed needs to be identified.
2. If it is a movement key, the program needs to check whether movement in that direction is possible (you don't want the player to walk through walls, for instance).
3. If it is a potentially possible movement, the program needs to check if trying to do so is supposed to trigger an event (for instance, a guard may move to block your way if you approach a door).
4. If it is a possible movement, the character needs to be actually moved to the new location.
5. If the character has been moved, the program has to check if that movement triggers any reaction (like the character moving onto a weak bridge that breaks under their weight, sending them to fall into a river)
This is just a simple, first list of thoughts, and it is probably not complete. The explanations in brackets are actually what you are likely to start out with (as in "Mmmhhh, if I have movement, I don't want the character to move through walls, so I need to check that.")
With this overview in hand, you can then start the programming process by asking repeatedly "How does the program do that?". Mind you, you are still on an abstract level, not thinking about code or anything, but rather about the logic behind it.
This actually does bring you to a technical aspect, though, and that is "data structure". For many tasks, figuring out how to store the necessary information best can save you a lot of pain and work once you develop the code. For instance, in the RPG example, you will need the information of what the map the character is currently on looks like. In a standard 2D RPG, such a map is made up of a combination of a limited number of rectangular tiles which fill a rectangular area. Since the number of tiles is limited, you can assume that you can give each tile (grass tile 1, grass tile 2, sand tile 1, table, ....) an ID number for later reference. Since you will also need to know where things are on the map (if nothing else, the character, at least), you need a way to identify a location on a map: a rectangular area of tiles - the obvious reference is clearing (x,y), a set of coordinates. So, for describing where something is located, we can use two numbers - how many tiles it is away from the left border and how many from the upper border of the map. This way, each possible location can be clearly identified.
With this in mind, you may want to think about what type of data structure is best suited for your purposes. While C++ allows you a lot of customization in that field, you should always start with the basic structures and see if they can comfortably fulfill your need.
If you look at most standard languages, you will find that there are ways to create x dimensional tables of basic data types. Given that you identify a specific location via two numbers (x and y) and that the data connected to it is a single number, a two-dimensional table seems to be the data structure of choice there.
While this is an easy and obvious example, there are many cases where you can actually make things easier by structuring the data in a certain way. Thus, it is always important to check what kind of information the computer needs to store and how you can optimize that information.
The programming process itself is then just a repetition of the question "How is this to be done?" until you get to a level so detailed that each bit of information corresponds to a single command in the programming language. For that purpose, you do not need to know all commands by heart, but instead look up the relevant sections in the manual each time you could imagine that there is already a command to do this. For instance, while it is unlikely that a general library will contain a command that allows you to put a part of a map based on tiles as described above, a graphic library is likely to include routines that will put a single static graphic onto the screen, thus allowing you to draw the graphic a single tile onto the screen. So, once you have reached the point where your logic states "draw the image defined as xx and yy by zzz at the location (x,y) of the screen" with all necessary information explained by the surrounding logic, you should check for the details of that routine.
Of course, since you are not aware of the quirks of the language yet, you may not be able to assess the availability of such commands, so instead of using the shortcut of guessing, you can also check at each step if a command already exists that does exactly what you are describing. If there is, you can use it, if not, you need to repeat the question "How can this be done?" on the logic level once more.
I think I have covered the bare basics there (I am a bit tired right now, so I may have missed something).
Deathworks