Differentiable Programming for Earth System Modeling