First Principles: Parallelism & Concurrency