by "book smarts" i assume that means you can explain keywords/syntax (eg: static vs nonstatic) but you're not really sure when to use em?
i recommend working on your own independent projects, and keep it under source control. first create your design and save it. when you think the coding is done, create a new branch and add more features. repeat. when you have your final product, compare it to your original design and see how it changed.
eg: suppose you wanna make an app to help track calories you take in. first write your design. use diagrams. then start coding. dunno what your experience is, so maybe it's just all done in memory. then maybe later you change it to save on disk via text files. then later move to a database. then later move to a web app. each time, see how difficult it was to make changes and how your design changed.