The problem now is that we live in an app world where people trying to learn to code set that as the base example and from the kick-off they have a large, daunting codebase when they're still trying to get to grips with it. It doesn't work, it's another digital soul on the abandoned heap of github....
To learn to code you need to write loads of crap code, mountains of it... also, frantically searching stack-exchange, 3 million blogs and a half dozen pages of a book per day just renders loads of useful nuggets that don't add-up to anything coherent, solid and memorable. It's like a mental, self-inflicted, DDoS. That overreaching is what's going to take your enthusiasm and turn it into a giant ear getting into the boxing ring with Mike Tyson while screaming "look at me, I'm an ear".
Write loads of garbage code, analyse your day... what did I do for breakfast, code it, yes it's ridiculous, but as you say it focuses on the 'problem' and makes the syntactical elegance an after thought. Do you take the bus? done so every day for ages, accidentally remembered all the streets the bus passes and doesnt go down, code it, learn the decision trees, map it out.... yes it's ridiculous but... at least you're not wasting time thinking if only I had an idea. Make the idea that you code one thing each day, small, tight, always growing, expanding.
Take a spoken language you don't know, French, Chinese, whatever... you don't learn this by going to a cheif planner and quibbling about the dubious specifics of a submitted architectural plan, you learn it by freaking out shop assistants by accidentally asking for a broken monkey instead of a lovely fresh salad baguette. Programming is no different..... Go code that rubbish. Be ridiculous, be fabulous....