This document discusses convex programming problems and optimization problems. It defines convex sets and convex functions, and explains how to determine if a function is convex using its epigraph or differentiability properties. It then discusses various types of convex optimization problems including quadratic programming problems. It provides optimality conditions for constrained and unconstrained optimization using KKT conditions and discusses Wolfe's method for solving quadratic programming problems.