Learn C the Hard Way: Practical Exercises on the Computational Subjects You Keep Avoiding