Kuliah ini mengajarkan bagaimana merancang dan menganalisa sebuah algoritma dalam menyelesaikan persoalan-persoalan yang membutuhkan pemrograman. Dua isu utama yang ditekankan dalam merancang dan menganalisa algoritma tersebut adalah aspek kebenaran (correctness) dan kompleksitas (complexity). Berbagai teknik dan pendekatan akan dibahas, antara lain konsep rekursif, divide-conquer, algoritma greedy, graph algorithms, dynamic programming, dan lain-lain. Perkuliahan ini menggunakan studi kasus berupa pembuatan program komputer terkait dengan permasalahan sains data