This document discusses the challenges of multi-core programming. It outlines sequential programming models and how concurrency differs by allowing tasks to execute concurrently rather than sequentially. The main challenges discussed are software development challenges like task decomposition, communication between concurrent tasks, and accessing shared resources, as well as testing and debugging concurrent programs. It also discusses libraries for C++ developers to implement multi-threading and challenges around utilizing different processor architectures.