The goal of this course is to introduce classic tools used in the design of approximation algorithms like linear programming and positive semi-definite programming. We will emphasis on rigorous analysis of the performance of approximation algorithms. Moreover, we plan to introduce some modern topics including spectral algorithms and the Markov chain Monte Carlo method.