Для начала программисту нужны базовые знания которые дает средняя школа, тогда можно быстро находить более подробную информацию по интересующим задачам (знаешь что искать и где искать).
Программисту без вариантов нужна математика. Компьютер это всего навсего крутой калькулятор, он может только складывать, вычитать, умножать и делить. Задача программист описать требуемую проблему в виде последовательности математических формул (математическая модель называется))
Нужно иметь представление об основных стандартных алгоритмах, книги Вирта и Кнута в этом помогут. Тем, кто не способен их осилить, в программировании делать нечего и не стоит слушать дилетантов , что эти книги якобы устарели, это все равно что утверждать, что устарела Евклидова геометрия или законы Ньютона. Эти книги основа, первоисточник все остальные это не более чем упрошенная интерпретация для чайников.