This course is about algorithms: efficient, procedural, deterministic (in this course at least) ways of solving computational problems. Broadly, we're developing your ability to efficiently solve real-world computational problems. We view this as a three-step process:
A recurring undercurrent of this course is pushback on the idea that this process has one "correct" outcome or algorithm. Steps 1 and 3 especially are particularly design-oriented processes, and thus will always require human choices. Take Step 1, for example. Note that a "model" is, by definition, a simplification of a real thing. As an algorithm designer, you'll have to make human choices about what aspects of the real world to simplify, what the simplified representation should be, and how that impacts the algorithm you design. Or, in Step 3, we'll learn to verify that the procedure we develop is correct and efficient, but we have to decide what counts as "correct," what counts as "efficient," and whether those are even the right goals to be aiming for.
For this reason, you should not view this course as answering "how do I quickly solve this problem?" After all, AI can already do that, and before AI, search engines could already do it too. Instead, the goal of this course is for you to develop comfort thinking about and communicating about algorithms. You'll learn how to design, analyze, verify, and communicate about algorithms. You'll learn what makes them tick, where their limitations are, and what the human design choices mean for the algorithm's effectiveness. The goal is that, when it comes time to work with other people (and potentially AI) to solve the real-world problems that you're interested in, you'll have a proper seat at the table.