It depends on what your objective is. If your goal to get a really solid grasp of the fundamentals of programming, then I would suggest a language you don't hear much of these days, Pascal. It was explicitly designed to be a a good language to teach programming. It is much more structured and safer than the the C/C++ family of languages (it comes with built-in bounds checking of arrays for example). However it is still close enough to the machine that you can learn, use, and distinguish concepts like pointers, pass-by-reference vs pass-by-value, stack-vs-heap, data-types etc. Those basic things tend to become hidden beneath layers of abstraction in the more more modern language like Java and C#. It is amazing how often I have come across professional programmers who have learned to program in say Java, and don't really understand what a pointer is.
I would stay away from the object-oriented stuff for now. You can easily learn that later once you have got a good foundation in basic structured programming.
On the other hand. if your goal is to learn something that you can put on your CV 4 weeks from now, then Java, C# or whatever the current whizzbang is would be more appropriate.