Все или никакие. Сложно выделить что-то одно. Ну м. б. комбинаторика - но это то, до чего дело обычно доходит только в выпускных классах, и даже не факт что в каждой школе.
Вообще, программирование - это инженерная работа. Порой - грязная инженерная работа. Требуется не просто знание математики, а определённый склад ума в целом, плюс не бояться работать руками. Представление о том, что программист - это ботан-математик, который придумывает абстрактные супер-мега-алгоритмы - не вполне соответствует реальности. 80-90% времени программиста уходит на копание в гигабайтах логов в попытках понять, какая именно из сотен, если не тысяч, настроек конфигурации системы из десятков серверов, раскиданных по нескольким кластерам, приводит к той или иной ошибке.
Так вот, вспоминая детство. В начальных классах ваш покорный слуга был классической особью вида «мальчик склеил в клубе модель». Когда подрос - родители стали приучать к инструментам, покупали игрушки типа детской железной дороги, конструкторы «юный часовщик» и т. п., книжки подсовывали всякие. Помню, была книжка, где рассказывалось, на понятном для детей языке, как устроен атомный реактор, и предлагалось вылепить его из пластилина, и воткнуть в него гвозди в качестве урановых и карандаши в качестве управляющих стержней... Я, в конце концов, смастерил дома из подручных средств целый атомный ледокол! В старших классах - ходил в радиокружок (где, собственно, и познакомился с компьютерами и ИТ). Нынче, в свободное от работы программистом время, когда оно есть - восстанавливаю старые ламповые усилилители и проектирую свои собственные, обеспечиваю полностью своими руками техобслуживание велосипедного парка для всей семьи (штук пять или шесть самых разнокалиберных агрегатов). Мне кажется, это всё идёт общим пакетом - а не только знание правила Лопиталя и умение его применять ;)