First of all programming is a lifetime learning and exercise. There is are always some concepts which are new to even Bjarne Stroustrup. Second, it will take time.
I am also a self-taught programmer and I try to guide you step by step.
Section One: The Learning
- Learning basics– The best language for competitive coding is C++ or C. There are several lectures on YouTube but they are quite mediocre. I followed the book Computer Science with C++ by Sumita Arora. It is the best beginner book out there. Read both the edition cover to cover. Do all the exercise questions and examples. Once you are done, you are now ready for next level. Do not try even the beginner problems of competitive coding in this level as it will demoralize you.
- Learning “The Library” – Learn the STL library of C++. The best place is the TopCoder tutorials. Although, they are not exhaustive but you will understand them eventually. Practice them.
- Enter Competitive Programming – Now you can start competitive coding, beginner level only. I prefer Hacker Rank and avoid SPOJ. Try to solve at least 3 problems a day. In this level, you will get familiar with the rules of the world of competitive programming. Solve as many problems as you can and advance progressively. Without knowing, you will learn some concepts of Data Structure and Algorithm. But your growth will become stagnant at some point of time. Its time to advance to the next and final level.
- Data Structure and Algorithm – These are nothing but some acclaimed solutions of some common programming problems. By now you are smart enough to judge your own place to learn. I would just suggest that learn the concepts, practice them and then try them on the problems. So, this is an iterative step: LEARN; PRACTICE; APPLY; REPEAT; In this process, you can also develop some of your own solution hacks.
- Contribute– This is an optional step but the most important step. Contribute in the open source community.
Section Two: Motivation
Learning is simply incomplete without the motivation. I self taught myself because I had the desire to learn, to make the computer follow my command. The motivation can be from anywhere. Let it be for a job or passion or interest. But without motivation you will not be able to learn competitive programming. Find this. Explore whats in it for you.
Section Three: Timing
If you dedicate fully, it will take around 6 months. Otherwise, giving 3–4 hours a day,
Level 1- 40 days
Level 2- 10 days
Level 3- 60 days
Level 4- Goes on and on and on…
Level 5- God mode ON.
Happy Learning…