Learning and practicing algorithms and data structures to solve interesting problems