Лично я делаю так: нахожу какую-нибудь книгу (тут же, на тостере, можно найти десятки, если не сотни рекомендаций), и по мере того, как там описываются языковые конструкции, функции, библиотеки, примеры и т.п., тут же открываю блокнот/ИДЕ и пишу какой-нибудь код, синтетический пример с их использованием, иногда экспериментирую, компилирую и смотрю, что получилось.
А лучше всего написать что-нибудь своё, какую-нибудь простенькую программку (сначала консольную, потом можно и за ГУИ взяться), которая, например, парсит файлы или веб-страницы, или автоматизирует какую-нибудь рутину, или даже простенькую игру — короче говоря, пишите то, что интересно лично вам. Гарантирую, тогда будет и веселье, и грусть, и пасмур...
Если задумка окажется неподъёмной, попробуйте найти опенсорсные аналоги своей будущей программы и изучайте их исходный код, учитесь по образцу.
Никакие онлайн-курсы, задания и т.п. не заменят опыта настоящей разработки. Я не утверждаю, что они совсем не нужны, но необходимо параллельно заниматься и самостоятельной работой.