System design contains ton of interesting links to documents and designs.

Practice algorithms and coding:

Hakerrank - very well done website with ton of problems and regular competitions.

Codeforces - interface could be better. But this website has very good regular competitions with complicated problems and good editorial solutions.

Codechef - realy needs good developers to fix interface… But has regular competitions.

Taking part in competitions is very important, and allows practicing fast code writing. This skill is crucial during interview and highly valued. To keep yourself advancing - consider solving all the task after competition. You might need to read and understand editorial for this. But even if you think that task is insurmountable at your level - still try to reproduce editorial solution on your own. This kind of tasks will ensure that you progress as a developer. Keep in mind that you need to excercise two skills:

  • algorithms knowledge - your ability to find suitable algorithm to given task,
  • coding - even knowing algorithm, you still have to be able to implement it fast, efficient, and without mistakes.


Introduction to Algorithms - classic book on algorithms with examples, tasks and analysis.


Algorithms Part I and Part II by Robert Sedgewick is an excelent resource to study on line. Course is split into weeks, and puts time limitations on student, which is a good stimulator.