Differentiable Programming for Data-driven Modeling, Optimization, and Control