I feel like there's a gap between "Here's looping, conditionals, IO, OO basics, functions, etc..." and being able to write something useful. Everywhere I look seems to fill the gap by saying "Go read code" or "Hack on things you use". I'm trying to answer the first part here, and the latter leads me to very large programs that I can't really digest yet.
I've worked on a couple simple programs for myself, but typically end up thinking about how trivially I could implement it on an RDBMS (I work in BI consulting - I write SQL for half of my work), but understanding that that would be overkill. E.g. I'm working on a simple task tracking program that captures basic metadata that would be useful in capturing billable hours. I could write up a basic schema and some stored procedures in a few hours, but then I'd just be punting all the hard stuff to the DB and not improving.