I think that what your next programming language should be is very personal and depends a lot on what you want and what your plans are. Most importantly: do you primarily want to become a better programmer, or do you primarily want to learn a language that will make you employable ASAP in the field of your choice? They are not mutually exclusive, but I think they call for somewhat different paths.
If you want the latter, then C++ is probably the best choice for reasons people have already explained. If becoming very good at programming (problem solving), then I think the best way is to experience as much different programming styles and paradigms as possible. You see, a lot of languages share a lot of the same basic concepts. If you know the basics of C#, you basically also know the basics of Java, and a lot of basics from C++, Ruby, Python, etc. They all feature mainly imperative and object-oriented programming. These are the paradigms that are by far the most in use nowadays.
However, I have heard many people who learned functional programming say that it blew their minds, and taught them to be better programmers in any language (even the ones that were not functional). Therefore, you might also want to try your luck with Haskell (very hardcore), Scheme or Clojure. Python and Ruby, and a lot of other languages, have incorporated a lot of functional concepts as well, but I have no idea if they are the best languages to learn about them, since they are avoidable.
For more programming paradigm mind blowing, you could look into languages like Erlang, Prolog, Forth, Assembly. While it is not likely that you will be using most of these languages in your career, knowing them allegedly makes you a better programmer even in the languages that you do get to use.
For you, if you want to learn, one way might to be to try to port your VB.NET programs to C# and F#, which I think Microsoft made relatively easy. That way you have an easy way of acquainting yourself with those languages, because you already know your own program. From there, you should also make some new programs though, and imagine how you would have done the first program if it wasn't a port. The different languages will likely have different paths of least resistance, and hopefully this will show you different ways of approaching a problem.
If you do want to go in the direction of C++ and you have the time, maybe you could learn C first. I think one of the main differences between these languages and most others is that you have to/get to manage all memory yourself. This can be fairly tricky, and I think that learning C will probably teach you to deal with this better, because it has less abstractions on this concept and less features than C++ overall. From C, it should be fairly easy to switch to learning C++ because any C program is also a C++ program (but not vice versa). I also think Keava's advice is really good.
I know you asked someone else, but I'm going to answer these questions anyway, as I'm sure you could use more than one perspective on the questions you have. I will point out though that I know very little about graphics and don't really see myself programming entire graphics engines anytime soon, like Hiikuro. I am programming for a living now though (mostly in C#).
Personally I started making websites when I was about 15. They were really simple to begin with, but got more complex as I got older and learned more. After about three years of occasional, recreational programming, I got some small assignments to make simple websites for people/companies I knew.
Then I went to college where I learned even more, and got a side job developing web apps. After college I was more than ready for a job in software development.
My point here is that at almost any point in your learning curve, there is probably something useful that you can do. Well, after the very first beginning of course.
Before you actually try to become a professional game programmer, I would advice you to look into what that job actually looks like. I'm not saying that it's not a fun job, but I do think it is almost certainly not as much fun as some people might think. You're not playing the game you're developing all day. A lot of it will consist of making small adjustments in a huge code base and trying to figure out other people's incomprehensible code. I can imagine it still being a lot of fun if you like programming, and it must be a joy to see your game develop in front of your eyes until it is released to the public for them to enjoy, but you have to realize it can also be a lot of hard work.
If you want the latter, then C++ is probably the best choice for reasons people have already explained. If becoming very good at programming (problem solving), then I think the best way is to experience as much different programming styles and paradigms as possible. You see, a lot of languages share a lot of the same basic concepts. If you know the basics of C#, you basically also know the basics of Java, and a lot of basics from C++, Ruby, Python, etc. They all feature mainly imperative and object-oriented programming. These are the paradigms that are by far the most in use nowadays.
However, I have heard many people who learned functional programming say that it blew their minds, and taught them to be better programmers in any language (even the ones that were not functional). Therefore, you might also want to try your luck with Haskell (very hardcore), Scheme or Clojure. Python and Ruby, and a lot of other languages, have incorporated a lot of functional concepts as well, but I have no idea if they are the best languages to learn about them, since they are avoidable.
For more programming paradigm mind blowing, you could look into languages like Erlang, Prolog, Forth, Assembly. While it is not likely that you will be using most of these languages in your career, knowing them allegedly makes you a better programmer even in the languages that you do get to use.
For you, if you want to learn, one way might to be to try to port your VB.NET programs to C# and F#, which I think Microsoft made relatively easy. That way you have an easy way of acquainting yourself with those languages, because you already know your own program. From there, you should also make some new programs though, and imagine how you would have done the first program if it wasn't a port. The different languages will likely have different paths of least resistance, and hopefully this will show you different ways of approaching a problem.
If you do want to go in the direction of C++ and you have the time, maybe you could learn C first. I think one of the main differences between these languages and most others is that you have to/get to manage all memory yourself. This can be fairly tricky, and I think that learning C will probably teach you to deal with this better, because it has less abstractions on this concept and less features than C++ overall. From C, it should be fairly easy to switch to learning C++ because any C program is also a C++ program (but not vice versa). I also think Keava's advice is really good.
I know you asked someone else, but I'm going to answer these questions anyway, as I'm sure you could use more than one perspective on the questions you have. I will point out though that I know very little about graphics and don't really see myself programming entire graphics engines anytime soon, like Hiikuro. I am programming for a living now though (mostly in C#).
Conventional wisdom says you have to put in 10000 hours to become an expert at anything. If you work 40 hours a week for 50 weeks a year, it will take you 5 years. Of course, that is to become an expert. You will likely be able to have acceptable skill much sooner.Master Steeds said:1. how many hours a day did you put in to get as advanced as you are now?
Personally I started making websites when I was about 15. They were really simple to begin with, but got more complex as I got older and learned more. After about three years of occasional, recreational programming, I got some small assignments to make simple websites for people/companies I knew.
Then I went to college where I learned even more, and got a side job developing web apps. After college I was more than ready for a job in software development.
My point here is that at almost any point in your learning curve, there is probably something useful that you can do. Well, after the very first beginning of course.
For me: a little bit of both. I started pretty much self taught (well, I had a friend I could ask some questions and the internet for tutorials), and then I went to college. I'd say it's about 50/50 for me. But I think programming is a profession that can be self-taught pretty well, if you don't want to get an education (I would recommend doing both though).Master Steeds said:2. did you do a course, or are you self taught?
No way are you too late. It is true that some people have began programming when they were very young, but I also know many people that didn't start until college. If you have talent and motivation, you should be more than alright.Master Steeds said:3. how young did you start to programme? im curious as you say you have been doing it for 10 years, but im already 17, so is it too late to become good and get a decent job?
The internet is filled with programmers who still like it after many, many more years. For me, I have to say that I don't always like it anymore. It can still be fun, but there are definitely aspects that can be boring. And like anything, it can start feeling like a job rather than a hobby. I think this is very personal though, and it also really depends on your employer, since there are some pretty boring tasks that you sometimes have to do.Master Steeds said:4. is it still fun after 10 years?
Before you actually try to become a professional game programmer, I would advice you to look into what that job actually looks like. I'm not saying that it's not a fun job, but I do think it is almost certainly not as much fun as some people might think. You're not playing the game you're developing all day. A lot of it will consist of making small adjustments in a huge code base and trying to figure out other people's incomprehensible code. I can imagine it still being a lot of fun if you like programming, and it must be a joy to see your game develop in front of your eyes until it is released to the public for them to enjoy, but you have to realize it can also be a lot of hard work.