Advice to young programmers

Occasionally, I get asked how to become a better programmer or even how to become a programmer.  Everytime someone ask, I would tend to have a different answer.  Consequently, the consistency of my answer varies.  What follows is my list of things to do to become a better programmer.  Bare in mind that there are multiple paths to becoming a programmer, and this is just my way of being a programmer.

1.  Solve your own problems -  There is a difference between someone who receives the answer and the person who solved it for themselves.  When you solve a problem for yourself, you not only solve that problem but you automatically solve the millions of problems similar to it.  This approach has high upfront cost.  Sometimes, you will spend like two or three days on a problem, not a big deal; it will pay for itself. 

2. Practice small programs first -  When I say small programs, I mean something of the order of 100 lines.  By far, Deitel and Deitel[I'm not being paid to say this] were the best programming books out in my time.  Practice all the questions from chapter 1 to 10, by yourself.  By the time you are finished this should give you a good grasp of programming.

3. Re-implement software - See a site or game you like, go re-implement it.  Do this before you start working on your own ideas.  This will push you to learn cutting edge technologies and be more suitable for employment. Do about 3 - 5 of these copy projects, then feel free to implement anything of your fancy.

4. Learn something new each project - On every project try to fit something in new that you never did before but have heard about. Never used jquery, try fitting it in on the next project; never try Test Driven Development, use your next project as a guinea pig; you get my point, right?

5. Say yes - If someone ask you if you can knock something up for them, always say yes, provided that you aren't doing something for someone else.  I know you are thinking that you can make zillions on your own ideas, but from experience it is better to spend the majority of your time on projects that you know will pay, but still dedicate atleast sometime on shoot the moon projects.  Do this and you will have people referring you. 

6. Have developer friends - This is another way to gain referals.  Eventually, your developer friend's plate will get full, and they will need someone to pass extra jobs onto.  This is where you come in.  Likewise, your plate might become full, and you will need someone to pass jobs onto.

7. Become a domain expert - Know alot of things, but know one thing exceptionally well.  The programming world is a big place and no one can master everything, so become good at one particular  thing.  For instance, become an expert on location based applications or financial applications.