The project determines the language in just about every case. There is no one best language in the world for everything, and as such, you need to know what you want to do as to decide what language you should be looking at. To be honest, the language that will probably help you the most in terms of learning about learning useful programming in general would be Java. Yes, Java guys. I know many people hate it, and I know it is almost never the right choice language for just about every project out there, but it is a very good language to learn on, especially since most programming will be in an object oriented fashion (at least most companies do this if the language they are using supports it). There are also many good IDE tools for Java, Eclipse comes to mind, which will allow you to easily learn many best practices type of things such as setting up try blocks and exception handling as in many cases Eclipse will warn you that whatever function you are calling can potentially throw certain exceptions, which makes you write code which handles those issues without crashing when an exception occurs which you didn't have a way to tell the code what to do if/when that exception happens.
While C and C++ are probably the most used languages, they are also very hard to just jump into because there are many different ways to do the same thing where almost all of them are the wrong way due to security issues, memory issues, or performance issues. This makes it a bad language to learn on because being self taught, you will not know what is the right way verses the dozens of wrong ways, since you won't have an instructor who will tell you.
Now if you simply want to do a website with all kinds of interactive things, well, that really means HTML, PHP, and databases (MySQL, or similar)... Learn perl if you want to do some even more complex website programs/pages. But the thing about perl is that once you learn a language like C or C++, or even PHP, you will already know a LOT about perl, because perl basically was designed by people who already knew those languages, and they simply kept the same lexicon/grammar from those languages and put them into perl, and in many cases made redundant things so that people familiar already with another language could do things the same way. For instance, you can do:
if ( $i == 1 ) then {
print "Value equals 1\n";
}
Or:
if $1 eq "1" then print "Value equals 1\n";
Or :
if ($i == 1) then
print "Value equals 1\n";
All of the above will do the same thing but they all have different grammar, some with ()'s, some without, some with new line after the then, some without, some with {}'s blocks, some without... See my point as to why perl will be difficult to learn as a starting language. But it is very easy to learn once you know another language, because more than likely you can code it the exact same way in perl as you did in many of the other languages (save object oriented, which is a whole different animal in perl).
As for PHP being top to bottom when read, well it is and it isn't, you can make your own functions, and call them, so the code would jump from the main execution block down to your function, and then back to the block that called the function to begin with. You can even have recursive functions in PHP...
Now I could tell you to be hardcore and simply go learn LISP, since with LISP you can program anything that is theoretically able to be programmed (since LISP is Lamda Calculus, and Lamda Calculus is the mathematical language which allows programming to occur in the first place). MIT for instance makes all their Computer Science students learn this language. I have used LISP a lot, and I will say it is amazing what you can do with it, but PAINFUL AS HELL to code and debug!!!! Talk about ()'s hell...
One of the great things about LISP is that LISP can re-write its own code on the fly! So you can actually have it learn things while running, like fine tuning different algorithms, learn different behavior, and develop better AI simply by having it interact with things (and having coded the underlying code base in such a way that it has a way to measure what is "better", and keep track of what worked and didn't work, and have different things that it can change so that it knows what portions of code it is allowed to change and how to change it).