Confused semi-newbie programmer needs some advice.
Aegean: What they teach you as C/C++ is the final point that these languages have come. It is the final outcome of their evolution. It is absolutely normal that you don't get it when they teach you encapsulation, classes, functions, return values, arguments.How did they get created or conceptualized in the first place? Why do we need them?Do it the right way: Start with C, and start from the smallest and most fundamental constructs that C has: The structures and functions. Know that there was only assembler in the first place. Then look into how function calls are made. Disassemble the simplest function you have and understand its logic. Now you know why there is a function. Then go into the structure. Disassemble one. Put different types in it, see how they get laid out in memory.Start as above, and learn how things work down to the last byte. Then eventually you will cover all constructs created and you will know where they come from. Do the above for 3-5 years, each time you encounter a new language idiom or concept.Finally you will see that in all strongly typed languages most constructs are worthless and they get in your way. You will get back to using C ;-)You might also go for the much higher level languages or different areas of computing, but since you showed interest in understanding programming deeper, this is the way to go.