Холиварный вопрос, вызывающий порой ожесточённые споры, кто-то ратует за знание теории computer science, кто-то стронник практического подхода, я же где-то по середине. Итак, на мой взгляд каждый уважающий себя программист должен:
Уметь находить и анализировать нужную информацию в сети
Иметь представление об основных структурах данных и алгоритмах
какой вопрос, такой и ответ