Automated Data-Driven Hint Generation for Learning Programming