My second piece of advice is to find a problem, ideally a bunch of problems, that you want to solve and that programming can help you solve. Solve them. Definition of problem: something to solve. ;P e.g. a program that prints the Bottles of Beer lyrics out, increase the start number until you can crash/slow down your computer or server, build a blog website, image gallery, video game with PyGame, or in text, native QT app calculator, project Euler math problems, robots, whatever. The key is you have to have a desire to work on whatever you're working on. When you lose that desire for your current project, procrastinate by switching to a different project.
My third piece of advice is to learn how to use the git source control manager and interfacing with GitHub. Then troll some Python repositories ( https://github.com/search?type=Repositories&language=... ), find some with an open issues list and an issue that isn't assigned to a particular person, fix the issue if you want/can, and submit a pull request. Now you can say you've contributed to open source software!
Edit: if you really have no ideas of your own, which I'd find hard to believe, you can do a small project I've been meaning to get around to for a while so I can blog about it. (I blog mostly to my past self.) Implement a clone of the game Pong three times in an imperative, Object-Oriented, and functional style of programming.
I'm not trying to be flippant; I don't think spending the huge amount of time learning how to hack code is for everyone, especially if you don't have professors, TAs or bosses breathing down your neck to get stuff done.
If you're really motivated, ship something (anything!) that is used by someone other than you.
Good luck! :)
Everything else will naturally progress from there, but you can't progress as a programmer, until you start thinking like one.