This document provides an introduction to NP-completeness, including: definitions of key concepts like decision problems, classes P and NP, and polynomial time reductions; examples of NP-complete problems like satisfiability and the traveling salesman problem; and approaches to dealing with NP-complete problems like heuristic algorithms, approximation algorithms, and potential help from quantum computing in the future. The document establishes NP-completeness as a central concept in computational complexity theory.