Notes of CMU Course 17-214/514 Principles of Software Construction: Objects, Design, and Concurrency, including (1) concepts of design for complex systems, (2) object oriented programming, (3) techniques for robustness, including testing and static and dynamic analysis for programs, and (4) concurrent software.