First-order methods in optimization