Like a few that have commented, I strongly recommend you try and learn by having a problem to solve...but in case you can't think of one, there are a few sites that poses programming challenges. Here are the two that I know of off the top of my head: - Codewars - Project Euler Have fun :)
Those are still theory problems though. They're problems with a defined, theoretical solution. Good for a math major if they're sticking to math problems, but if outside of that, doesn't cover good practices for a number of other areas.
You're right. They're more supplementary problems than anything, but I considered it as an opportunity to improve on one's understanding of the fundamental concepts of programming. It's really a step behind solving real world problems. Also, I thought providing something up the poster's alley might help the learning process as well. It's definitely by no means the end-all be-all of their learning process, though. Having gained (and still gaining) better understanding of programming through solving problems at work, I still strongly recommend the real world problem solving approach.