Just a sidenote, i want to be able to progress to more powerful hardware with time so looking for best programing language to achive that.
First of all: I think there is no correct place to ask this question. As this is a arduino forum which is C++ oriented the answer here is C++ is a good start.
Go to a Bascom place and they will tell you bascom is a great start; go to a java place ....
As I have a pretty wide background I'll do an effort anyway:
As you are talking about "more powerful hardware" development and micro controller development at the same time I would say C++ (as a language and not as 'my first language') is the only qualifying language.
As far as I know C++ is the only language that has great support on PC/unix/linux -so not application servers;mainframes- and micro controller code development. You willing have to go with proprietary software for the PC part though (read pay license or use trial version of some kind).
Note that -even though you can use the same language- "more powerful hardware" development is majorly different from micro controller development.
This because languages are moving away from the underlying hardware to a higher level of programming closer to "business needs". Whereas on a micro controller you need full understanding of the hardware.
i want to be able to write a program that has a user interface wich controls arduino depending on the user input.
You need a way to communicate between the system that runs you user interface and your arduino. There is only a limited number of integrations.
The once I know are: serial; ethernet; bluetooth; xbee
Only serial is a protocol where C++ can be high on the list of advised languages. IMHO serial is mostly used but (because arduino IDE and serial monitor use it) but is IMHO hardly a preferred choice to put a GUI on top of Arduino.
For what you want to do you can go with C++ only but it will be far more beneficial and productive to learn more than one language.
The languages to learn will be dependent on the project and tool chain you have in mind.