Как и когда обучаться программированию школьнику?
Дальше учиться на практике. Берете проект, который хотите сделать, например игру. Начните с чего-нибудь простого, тот же классический арканоид или тетрис. Сразу же возникнет уйма вопросов: а как это? А как тут? А как тогда здесь? И через решение этих проблем будете поднимать свой скилл. Для подобных игр не нужно каких-то сложных библиотек (единственная библиотека, которая необходима - это та, которая позволяет рисовать на экране линии, квадратики и кружки). А потенциал для развития - на полгода минимум. Добавление уровней, режимов, бонусов, таблицы рекордов и т.д. Затем, например, изучение на примере этой игры более серьезной графической библиотеки (тот же OpenGL): псевдотрехмерность, текстурирование, освещение и т.д. В конечном итоге может получиться вполне симпатично выглядящая игра и большое количество опыта в разработке реального проекта.

Разумеется, вместо игры можно взять любой другой проект, который вам интересен. Хоть программу для расчета рейтинга шахматистов по итогам турнира (это другая тема, тут придется изучать другие вещи) и совершенствовать эту тему, пока чувствуешь что есть еще что-то что можно сделать, но не знаешь как именно. Вот это постижение "как именно" и называется совершенствованием навыков.
В таком случае, может быть полезно в учебных целях реально сделать какой-то небольшой проект (вместо решения задачек с олимпиад - этому уже можно и бота обучить). 

Разработка собственного проекта как раз внесет конкретику в выбор рабочего инструментария и укажет на пробелы в знаниях.