Your First Step = Learn Your Craft
Experience is more important than book learning:
Pick a project and work out how to
achieve your goals.
This will undoubtedly lead you into book-learning etc. but will enable you to gauge your own progress and to choose what to read and when. A few pointers:
- Start with something small.
- Take things one at a time.
- Do things as well as you can.
- Don't add things to your code until you need them.
- Don't ever add code you don't understand.
- Don't repeat the same code twice in your project.
- Always imagine that someone else will be working on your code tomorrow - try to make it as clear to that person as you can.
As for your choice of books:
If you want to got the C# route, your book list is superb. If you get to know all that lot than you'll be worth your weight in gold! I've been a (fairly well) paid .Net programmer since the early days of .Net, but still haven't read the most advanced of these books (but they are on my reading list). The lesson I take from this is that the advanced stuff has its place, but mastery of the basics can still give you a great career. So, don't worry too much about the advanced books until you actually need them. There is one book I would add to your list - even before the advanced C# books: Code Complete 2. It is probably the most recommended book on this site. Deservedly so, IMO.
Your Next Step = Build Trust
You mentioned earning a little money. To state the obvious: to earn money from developing software, you need to find someone willing to pay you. Unfortunately for you, finding that someone is going to be a challenge for you.
- Because of your age.
I may be mistaken about this, as it is (of course) quite unreasonable. However, the sad reality is that people hold prejudices about age. In my experience, many potential employers are likely to turn you away because they consider young people unreliable and unable to deliver on their promises. What makes this particularly unfair is that you can't do anything about your age except wait.
However, there are things you can do to increase the likelihood of finding employment as a developer despite your age:
a) Keep at it. If you don't go looking for customers because you don't expect them to turn you away then you'll never find the ones who will look past your age and see your qualities as a developer. In other words, don't allow other people's prejudices about age become your prejudices about other people.
b) Get an advocate - someone who will vouch for your abilities who has more credibility in the eyes of prospects that you have in yourself. Perhaps you have an older friend or relative who can speak up for you? Of course, you'll need someone who can vouch for your personal qualities, so make sure you really are up to scratch technically.
- Because you don't have industry experience.
Despite the fact that you obviously have talent, knowledge and enthusiasm, you don't have 5 years experience on the job. This is a problem that faces everyone new to a profession no matter their age. Often, people don't want the bother of employing people who don't already have a proven track record at doing the job.
Fortunately, you can do a lot about this one:
a) Recognise that this is a reasonable concern
It is difficult for someone to justify paying for a service when they have no evidence that they will get what they pay for.
When you're talking to prospective clients, be honest about your lack of experience, but demonstrate why it won't a problem. If show the initiative in this then you can undermine their objections before they have thought them through properly. The benefit of this is not to manipulate, but to show that you understand their business needs.
b) Build a reputation
Do small, manageable packages of work for a small enough fee that you take the risk out of the transaction for the client. Often, this will mean that you do your first work for free. Choose these clients carefully - you need to do something that will give you satisfaction for someone who will sing your praises when you deliver. I'm told that many developers do charity work to get themselves started, but family and family friends might also be able to offer you something.
c) Build experience
To demonstrate experience you need... experience. If you can't find anyone else to work for, work for yourself. Start a hobby project. Pick something that people will find useful, and may (in time) be willing to pay for. Don't work on it for the money, however, but for the experience. Consider this a long-term investment - you can expect payback over the long haul, not necessarily in the short term.
d) Develop your non-technical skills
If the paid programming thing doesn't work out at the moment, don't worry. Employers don't really just pay for skill in a particular area, but for a complete package.
Non-technical skills are as important in the IT industry as technical skills: employers are looking for professionalism as well as programming ability. These professional qualities can include people skills, financial experience, business knowledge and personal qualities like honesty, reliability etc.
All these can be developed independently of your technical skills. For example, if you need the money you could take a non-programming job. Alternatively, you could get involved with a community group or charity or port or whatever where you can built upon your non-technical abilities. Ultimately, these activities may well lead to you landing your first proper programming contract, if not directly (you never know what contacts you'll make) then indirectly because you are more rounded and have more to offer than other people.