This course will introduce you to algorithmic thinking. You will learn how to think about problems from the point of view of procedures to solve the problem. You will be given techniques to break a problem down, to notice its combinatorial difficulties, to reason about correctness, and to measure the efficiency of a solution. You will learn how to recognize the inherent complexity of a problem - the best possible efficiency that a problem can be solved.
The course does not require programing. The course is more about thinking about code, than writing code. However, in the practicum you will get your feet wet and implement algorithms presented in the course. The Practicum is self-study, and highly recommended.