Пока учишься в школе, изучай:
- Н. Вирт. Алгоритмы и структуры данных.
- Школьную математику, информатику. Налегай на пределы, множества, логические операции.
- Можно попробовать раздобыть учебник дискретной математики и его почитать.
- Если это всё сделал, и ещё осталось время, тогда реляционное исчисление (базы данных на этом построены) и лямбда-исчисление (поможет проектировать софт).
- Для практики можно порешать алгоритмические задачи на leetcode.com или аналогичном ресурсе.
Дальше - профильный ВУЗ, математический факультет, направление, связанное с программированием. Идеально - дневное обучение, если нет возможности, то вечернее или заочка, но диплом нужен обязательно. Мода на неквалифицированный труд в ИТ стремительно уходит в прошлое. Тут некоторые любят оспаривать этот тезис, хвастаясь тем, что они выучили один язык и пару фреймворков, и теперь они где-то там "мидлы", бодро шлёпающие типовые формы за 150 тысяч в месяц, но нюанс в том, что без образования они навсегда на этом уровне и останутся, либо им придётся идти в надсмотрщики-менеджеры.
Языки программирования вторичны, их по ходу дела можно изучить. Если знаешь основу, т.е. алгоритмы и дискретку, то новый язык изучается быстро. Начать лучше с языков со строгой типизацией, а к мейнстриму можно перейти позже, ничего от этого не потеряешь. Если будешь начинать с Питона, получишь кучу дурных привычек кодирования, от которых трудно будет избавляться. В сторону Питона лучше смотреть в последнюю очередь, тем более в нём всё, кроме библиотек, украдено из функциональщины и довольно бездарно, это своего рода "Хаскель для непрограммистов". Я изучал языки в таком порядке: Бейсик (обязаловка в школе), Паскаль, машинный код x86, а после поступления в ВУЗ (за первые два года) - C, C++ и Unix Shell. Остальное - уже в процессе работы. Вообще в наше время считалось, что незнание языка не является препятствием для выполнения проекта. Не знаешь язык - изучи, полгода на проект есть, вполне достаточно.