Spróbuj poczytać książkę (i porobić z niej zadania - to ważne, bo one są na myślenie) "Perełki oprogramowania" Bentley'a (naprawdę dobra i ciekawa).
Popróbuj trochę algorytmiki - zadania oprócz SPOJ-a również main.edu.pl - zadania z różnych konkursów.
Staraj się myśleć nad problemami, programowanie tym właśnie jest.
Język to tylko narzędzie ... do tego aby rozwiązać problem, zawsze przemyśl podziel problem na mniejsze, pomyśl jakie są drogi do tego żeby dany efekt osiągnąć... potem dopiero jak już masz ten pomysł po napisaniu jeśli zadziała, analizuj czy można to "poprawić, zoptymalizować ", nie zaczynaj od optymalizacji- ja ten błąd popełniałem bardzo długo tzn. szukałem MOŻLIWIE NAJLEPSZEGO ROZWIĄZANIA a nie po prostu rozwiązania.
Polecam artykuł także:
https://bulldogjob.pl/news/239-czego-nie-robic-aby-stac-sie-najlepszym-programista