... an example when you guys started talking about the reference and variable parameters you totally lost me, so somewhere along the line ...
I seriously wouldn't worry about it: I just used it as an example that there are fundamental differences in the approach from different technologies.
And here I'm going to disagree with Tomx3 a bit: I don't think it's a bad idea to start with GUI development, just be warned that you can enter a very deep learning curve that you can quickly get lost it: When trying to decide between different frameworks like Windows Forms, MFC, VCL, Swing, etc, etc: You will quickly get lost.
So again: Don't worry about it.
The trick about programming is that you need to be the type of person that want to tinker. That wants to know more of what's going on underneath the surface. As long as you have this curiosity and you apply a bit of discipline: you will get there. As you get stuck with different problems you will learn different technologies and different solutions.
As an example: If you want to quickly put together some application that you can browse a few pictures with, it's probably the quickest to bang something together in Visual Studio / C#. You drag and drop a few components, you click a few properties and you have a new application. Now the fun starts: I want to rotate the image. How is the image stored? Oh, in a Canvas object. What's a canvas object? Oh, it's an abstraction storing drawing information. What's drawing information, or for that matter, what's an abstraction ? ... etc, etc and sooner than later something like a reference parameter really isn't a big thing anymore.
If you actually like the backend more than the gui, then I would agree with TomTomTom x1000: Your best basis is C with a possible future line into HTML/XHTML/JavaScript or possibly you'll skip all of those and go directly to Haskel. All modern computer languages are based on C in some way or the other, so if you do understand C you have such a huge advantage. I, on the other hand, hate C. I explain this to laymen in the sense of I can read C fluently but I speak C with a very bad stutter. I love C++, and again, this is a debate better suited after you have a bit of experience of the 2. It's no use me telling you how easy it is C++ to treat an object as a native data type until you understand what an object and a native data type is. Or when this would be a benefit. This is not meant discouraging in any way, exactly the opposite. Programming is the one art I know about that teaches itself. All you need to do is allow it.