CS50x
Exercism.org
MIT algorithms lectures on YouTube
Introduction to logic and sets for computer programmers book
I also got lucky enough to be involved in an OSS project early that really made me learn by doing.
I found books and online tutorials to be a double-edged sword. They’re great for showing the basics, but always have a plan to deviate and force yourself to encounter and fix errors you cause. Not doing so (“you” hereafter is past me) causes you to be reliant on the next chapter or comparing to the finished code online, which doesn’t exist when doing something yourself.
Lastly, be hungry, humble, and have thick skin. Ask a lot of questions. Read a lot. Program a lot. Program some more. Stack overflow is great, but try to make it your last stop.
Wasted time? Try feeling like your prime years were wasted on repeat trips to Afghanistan and Iraq. Maybe I helped at least one person. Maybe they’re long dead. At least I got to come back.
However, now I have a wife and kids who adore me. I get things done that other people find useful. I’m active and close with extended family. Things are pretty good, no regrets. Thinking about it, I’d do it all again.
Point is, worrying about what you could have done is wasted energy. Accept where you are and make a plan for where you want to be. Realize that after you’re gone, the likelihood of people remembering you outside of those you touched is small.
Maybe that's the reason for the wait on citizenship.