I begun learning programming a few years ago, and it feels like I barely progressed. I know the basics and a bit of advanced python(I have learnt to use a few libraries), html and css plus a tiny bit of c++, but not much outside of those. I enjoy programming and solving problems using code, and it’s an enjoyable hobby of mine. But I feel like all I do is extremely basic and I want to advance but it feels overwhelming seeing the countless of things I could learn.
I wanna know what are ways I can actually apply the things I have learnt/will learn on somewhat worthwhile things, because the main problem right now is that I don’t really have anything to do with the things I’ve learnt other than silly projects that don’t really last more than a day and aren’t that complex. I also want to advance my knowledge as previously stated since I feel like I know too little for the amount of time I’ve been learning to program.
For context I’m still in school but not too far off from higher ed, and I have a decent amount of free time on most days(~2-4 hrs).
Leetcode is a great way to polish your skills. When I was your age, I read programming books and made projects I cared about, it's turned out very well.
I've helped a few others learn programming, practice and working on any project at all always help more than anything.
My friends Leetcoded and Codeforced quite a lot. Advent of Code is up there too, with the interesting caveat that Advent of Code also teaches you refactoring (due to the two-part nature of every problem).
However, when I was younger I had contempt for the whiteboard-problem-esque appearances of these, but everyone is different.
If you look hard enough there is always a project at medium difficulty -- not way too hard, like a huge project you feel won't give you returns -- not way too easy, like some cowsay clone. Ever tried making a blog? You can host for free on most Git pages implementations (codeberg, github, gitlab...).
As for programming books, consider trying security books like Art of Exploitation -- in the same strain, CTFs can use a decent amount of code, and they're fun in terms of raw problem-solving. I started with the Bandit wargame, which does Linux problem solving from any machine that has SSH.
I'm not by any means a l33t hax3r but I found them pretty fun in my learning journey.