Какие дисциплины изучать программисту чтобы меньше зависеть от языков и технологий?
1. Вопрос терминалогии - Вы все таки решили перейти на уровень выше. Чем выше - тем абстрактнее, чем ниже - тем ближе к железу.
2. Понимание общих алгоритмов всегда полезно. Литературы море - Кнут, Седжвик www.ozon.ru/context/detail/id/128304/, www.ozon.ru/context/detail/id/1317133 итд.
3. Самое главное: если вы хотите работать в IT - вам придется всю свою трудовую жизнь гнаться за технологиями и саморазвиваться. Это нормально. Постоянно будут выходить новые версии языков и надо будет уметь с ними работать. Язык это всего лишь инструмент для реализации задачи. Разные задачи оптимально реализовывать на разных языках. Знание общих алгоритмов (как кстати и паттернов ) полезно, разминает мозг - но без опыта реализации на конкретном языке нафиг не нужно.
Внезапно пришло осознание что за технологиями невозможно угнаться, постоянно появляются новые языки программирования, фреймворки, среды
Ошибаетесь, угнаться можно. В этом то, собственно, и состоит работа разработчика. Есть множество веяний, идей, технологий, систем --  а вам нужно быть на плаву, знать где чего и углубленно знать одно из направлений (стек).Пока смотрю в сторону изучения математики, алгоритмизации и архитектуры программ. 
А вы уже смотрели список вакансий? Сможете ли найти работу в вашей стране/городе? И если нет, готовы ли к переезду?
Это все важно и востребованно, но не везде. Знаете сколько хороший препод. математики (как правило, владеющий каким либо языком программирования) получает денег? Хотите столько получать?