Для того чтобы быть программистом:
- ООП и паттерны очень желательно, но не обязательно. Ниже объясню почему.
- Абстрактные типы данных (АТД) и алгоритмы.
- Дискретная математика, хотя-бы кое-что оттуда: математическая логика точно нужна, с множествами в том или ином виде тоже работать придётся.
- Какой-нибудь язык программирования, с помощью которого можно применять знания из первых трёх пунктов.
За пределами этого списка будет математический анализ (он же матан), линейная алгебра, аналитическая геометрия и уравнения теоретической физики - это нужно далеко не всем программистам.
А вот как работает программа на уровне железа очень многие смутно догадываются, и даже если когда-то учили, то уже даже не помнят.
======================
Программисты бывают очень разного уровня! От младших (junior), которые скрипты пишут на LUA (и вообще мало что знаю и умеют), до людей с суперквалификацией.
Программисты разные нужны: работы много, и поручать несложную работу, с которой справится человек с минимальной квалификацией, человеку с суперквалификацией (senior-developer) очень расточительно. По моему опыту на одного senior'а на предприятиях приходится 2 средних разработчика (middle) и один junior.
Однако для разработки, кроме паттернов и ООП, необходимо хотя-бы что-то знать об АТД и алгоритмах. Уметь писать работающий код всё-же нужно: ООП и паттерны - это всё-таки методы структурирования кода. При собеседовании на работу очень много людей отсеивается, которые не могут даже обойти дерево.
Программист - это всё-таки инженерная специальность, и если в дипломе ничего не написано про программное обеспечение, или даже самого диплома нет, то программистом тебя могут назвать на работе. Для этого нужно как минимум собеседование пройти, а без АТД и алгоритмов это вряд-ли удастся. Притом иногда ООП даже не нужно: например, если идёшь писать на вышеупомянутом LUA, то там про ООП могут и не спросить, однако знание таких АТД как массив, строка, список, стэк и т.д. необходимо.
Иногда нужна математика: разработчикам встроенных систем часто приходится писать на C (без плюсов), и там иногда никаким ООП даже не пахнет, зато бывает физика с математикой.