Learning Computer Science Foundations