The  course is taught by Nicola Galesi and introduces students to basic and advanced results in Computational Complexity. Starting from basic topics as NP-completeness and the Hierarchy Theorems it arrives to handle the hardest recent results on the limits of feasible computations, like  Hastad Lemma and Razborov-Smolensky Theorem for boolean circuits, as well as advanced topics like Proof COmpelxity or Communication COmplexity towards proving that P different from NP