My personal experience is that the only way to learn is by doing it. "Scratch your own itch", build programs to do the things you want.
The funny thing is that while few of my formal university classes had anything to do with programming, it was still a great environment in which to learn - mostly because of the people I met there rather than anything else.