When the future programmer passes the first two programming courses is in a similar situation as student who mastered alphabet and grammar of a language to the level, that (s)he can manage to write an essay without mistakes. Unfortunatelly, this is not sufficient to write a good essay and get a good mark. What is the problem? The main problem is the content and the form of the essay. To improve this one needs to read a lot. Now, since there are way too many beautiful books and essays around, one needs to prepare a selection of texts.
Similarly is when one wants to write not only beautiful, but also efficient programs. In the core of this course is exactly the same, learning great data structures and algorithms to understand the mastermind and principles behind them, which will make you better programmers. In this course a special emphasis is given to the challenge how to store and organize data that their manipulation will be more efficient. Hence we will learn about stacks, heaps, strangely coloured trees, cuckoo nests and other strange creatures. However, the emphasis will not be given on learning how the algorithms work, but rather why do they work and what are their limitations. Exactly, what differentiates an average computer scientist from a good and successful one.