Здесь описано про проектирование программ и сопутствующую математику. Вполне фундаментальные вещи.
Так же рекомендую разобраться в: логике первого порядка, теории множеств, машине Тьюринга, лямбда-исчислении. Затем рекомендую освоить какой-нибудь функциональный ЯП (чем больше похож на Haskell, тем лучше). Хорошая инвестиция времени.
Про более приземленные вещи советую читать у Таннебаума: