Firstly, you are in the wrong industry to make money; however being 29 and having made over 150% of your goal last year without living on the coasts I have a few tips that might help you.

Unfortunately, those that make money decisions see you as just a resource. You are a thing. You have a recurring cost, you produce products, and they don’t really care about the quality of your work unless it becomes a problem. What you are worth to them depends on the amount you are willing to take, your rarity, and what it would cost to replace you. To make more, you should learn to market yourself as a thing.

If you want to stay a front end guy, learn good design and develop your taste. Business people in general have a higher respect for designers than front end coders, as their work visibly and directly impacts the perceived quality of the end product. Being a designer also gets you more face-time with product managers, who’s opinions are generally taken seriously by the money people when deciding your value. Being able to come up with both designs and implementations for those designs will help you shorten the development cycle on projects that you are assigned to (as there are fewer required meetings, and you are not going to push-back on yourself).

In my experience the back-end plan is a better (but more difficult) one. It will open more doors for you in the long run, and is less vulnerable to shifts in the market. Your work will have more depth, and it’s an easier place to set yourself apart from your competition later in your career. It's very important that you focus on learning OO first, before taking a deep dive into the language itself.

You CAN get to “senior” level without having a real understanding with OO. Anyone that does know OO well (likely everyone in development management depending on the company) will be able to tell you are a hack when they look over your code, and will be less likely to promote (or trust) you.
From a development management perspective it is common to separate the developers who work for you into two separate camps: cattle (who build what they’re told), and problem solvers (who solve problems). At all cost, you want to be in the latter camp. If you find yourself in the cattle camp, it is easier to swap jobs than change that perception.

http://adriancheok.info/post/26835527269/secret-for-innovati...

If you choose c#, the framework is massive. This is daunting at first, but you will learn to love it. It is very discoverable (you can learn quickly by poking around).
Whichever language you choose, find some heroes in your company, and talk to them often. Offer your free time to help them with their projects. Ask them to mentor you. Read their code. Ask them to be rough on you in code reviews. Never talk back to them, and listen to what they say; however remember that they are just people like you, and your goal is to get better, not to become them. These relationships will be important later in your career, as these people will help you get jobs later if you are good to them.

The language choice depends on what sort of company you want to work for. C# is not often used in startups, and ruby (as far as I know) is rarely used in large corporations. There are exceptions to both, but the exceptions are not what you want to bank your career on.

Whatever path you choose, this industry is difficult if you plan to be a world class player (where the money is). You should move into something you enjoy instead of making a decision based on earnings potential.