>>>
Before coding you should take pen and paper and pay attention to the design of your program and think about the algorithms you are going to use.
<<<

Boring to the amateurs here, but so true! . I bet half the time you have coded something up and then found you needed to re do it would have been prevented if you had seriously thought about the design of your program.

I have said this over and over, but I'll say it again. Design your program then code it, not the other way round. It is alll so easy to think, "yeah,I'll need a routine that does this, and one that does that", code it up - great, then try to thread all these dispparate chunks into a whole - oh dear, "the output of this is not what I need for the input to that", and so on.

If you're happy being an amateur, great, if you have designs on being a professional, give the job, as a whole some thought.