I highly doubt you could call yourself a programmer if you don't have the basic knowledge of induction proof, recursion, dynamic programming and greedy algorithms. If you write code for a program with a running time of O(2^n) do you know (after a 12-week course) how to leverage memoization to bring it down to polynomial time? Do you even know what polynomial time means?