This document describes an approach to automatically grade programming assignments using machine learning. It discusses existing solutions like manual evaluation and test-case based evaluation that do not scale well. The proposed approach uses control and data dependency features extracted from programs to train a machine learning model on a small set of human-graded programs. Experimental results on sorting problems show the machine learning scores match human scores better than test-case based evaluation. Insights from features also help understand human grading criteria.