This course introduces students to key programming language families and concepts, and key system programming concepts. Topics include procedural, object-oriented, and functional programming language principles, the role of type systems and type safety, multi-threaded programming and associated design techniques including parallelization, deadlock and deadlock avoidance, and basic scheduling algorithms. Examples will be drawn from contemporary systems and languages. Credits: 4