Constraint Programming (CP) is a framework for modeling and solving optimization problems. This course presents the fundamental ideas at the heart of CP: local consistencies, global constraints, tree search, modeling... We apply CP to mainly (but not only) address scheduling problems which are a successful application domain for CP and key industrial problems.