Harvard's Introduction to Computer Science
The aim of the course is to teach students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Languages include C, Python, SQL, and JavaScript plus CSS and HTML. These problem sets are inspired by real-world domains of biology, cryptography, finance, forensics, and gaming.