Computer Science Principles: The Foundational Concepts of Computer Science