Last week there was a BubbleCup contest, where I was invited as a guest and gave a presentation. AFAIK the presentation was recorded, but I have no idea if it's going to be released (or when). The presentation itself, is probably the worst presentation I ever gave. I talked mostly about how confusing it's going to be, but I was the one confused there :)
Anyway, here's the link to the slides. I still think it might be useful for some people, since it touches something that is very rarely talked about. The presentation itself was made to counterbalance all of the simple answers to the old question of "How to get better in competitive programming?".
My main points (that I don't think were made clear enough):
It's better to train to be an all-rounder than to have a narrow specialization. Especially in the long-term. People very often change the area of interest. By focusing on being all-rounder, you don't have to start from beginning each time.
It's better to focus on skills that are harder to come by (writing bug-free code, problem solving), than focusing on some specific parts of knowledge (learning algorithms).
Since CP provides great feedback, it's an efficient way of developing general personal skills that have wide application (concentration, self-coaching, short & long-term memory, etc). Thus, it's usually better to not have a coach. You may feel lost without a coach, but that's how you'll learn to do your own research effectively.
Feel free to ask any questions or state how much you disagree with what I said :)