Сначала определитесь с направлением, что вам интересно (системное программирование, разработка игр аль еще что), дальше определяйтесь с языком программирования (частично зависит от 1 пункта, но мое ИМХО Начинайте с С, при необходимости ASM, ну а после этого любой объектно-ориентированный язык будет не проблемой), после чего, как Вам уже верно посоветовали, алгоритмы, теорию ОС, параллельно с выбранным языком (языками).
После чего прокачиваемся по легендарным книгам, типа
- Совершенный код
- Рефакторинг
- Паттерны проектирвоания (например от банды 4)
- Шаблоны корпоративных приложений (а вообще всего М.Фаулера ))) )
- прочее ( на хабре миллион раз писали, поиск Вам в руки)
Успехов!