I’m covering the growth as a competitive programmer in phases. There are 4 phases of growth and each phase requires around 2-3 months of experience to move ahead. However, you can directly jump to a phase in case you’ve prior experience in programming. Up to you !

Phase 1: Learning the basics of programming

In this phase, the main aim is to cover the basic paradigms of a programming language. I highly recommend that you start competitive coding in C, C++ or Java. These languages act closely to the compiler and you control more parts of your program easily compared to languages like python which does most of the basic handlings of the code by itself. This is an important part of the learning that you know how to have full control of your code.


You can take any book that you like in your favorite language. I prefer the How to program series in your favorite language by dietel and dietel. This is the book to learn C programming.

Some random advice

You can try some practice on competitive programming websites but that’s not necessary at this stage. You should focus on finishing this stage as soon as possible because there isn’t much to work with algorithms.

Phase 2: Polish your basics

In this stage, you know all about using the fors and the ifs. That’s wonderful. Now you should start focusing on starting with algorithms and using your knowledge to do things the smarter way. I’ve some good resources for you to carry on in this phase.


  • The hackerearch code monk series is a boon to the beginners with all the lessons, practice and contests at one place. Follow the lessons and you’re good to go to the next phase.
  • For trying some extra problems on your topics, hackerrank is a good place to practice. They make the test cases available and you can see where your solutions go wrong. Tip of advice: To see the solutions to the problems without losing points on hackerrank, create accounts with two id’s and use one id to see the solution. However, you should only use this for learning and at least try working on the problem yourself for some time.

Phase 3: The best blog to follow to gain expertise (topic wise).

I’ve used this resource and I just loved it. The IIT Kanpur Blog

Skim through the started portions and start solving the problems linked in this page in serial order. Don’t skip. Each problem is important in this blog.

In case of help

  • I’ve a github repository for the solutions to most of the spoj problems listed on this blog. However if you cannot find any and you manage to solve it on your own, please do fork this repo and we can help build up solutions to this amazing blog problems.
  • You can use spoj toolkit to check that your spoj solution works fine to several test cases before submittig.

Start competing

Now you’re in a great position to compete. Don’t be upset if you feel like you don’t know anything initially, this happens with everybody. What’s important is to note is that you check the best solutions and editorials for every contest problem after the contest ends. Yes ! Every problem, irrespective of whether you solved it or not. This will help you improve by leaps and bounds.


  • This is a great plugin for your web-browser to know all the contests that’s happening or that are about to come. Check out Challenge Hunt.
  • Along with competing, you can also take a look at a more advanced course on Competitive programming at Stanford.

Phase 4: Practice and Compete

Well finally, you know it all and now you’re able to understand that its practice and practice and practice that can help you reach your goal. So keep competing and keep practicing and check out ACM ICPC. This is what you can aim for.

Anjul Tyagi

General life hacks and learnings.