This course will give a broad overview of the field of quantum computing. We will start with a crash course in the fundamentals of quantum computing (qubits, quantum circuits, basic quantum algorithms such as Grover's search algorithm and Shor's factoring algorithm). Armed with the basics, we will then explore topics at the frontier of quantum computing: quantum complexity theory, device-independent quantum cryptography, quantum machine learning algorithms, and quantum supremacy. Students will make project presentations at the end of the course. This is a theoretical course that requires mathematical maturity and a strong background in linear algebra and probability theory. Familiarity with analysis of algorithms and complexity theory is a major plus but not required. No physics background will be assumed.