Separable Programming