Explores parallelism in programming, emphasizing trade-offs between programmability and performance, and introduces shared memory parallel programming using OpenMP.
Explores bug-finding, verification, and the use of learning-aided approaches in program reasoning, showcasing examples like the Heartbleed bug and differential Bayesian reasoning.