Depending on what you want to learn, sure. Googling for "[someLanguage] practice problems" appears to turn up good results for most languages.
For data structures, write some unit tests and then make them pass.
I personally wouldn't recommend you bother learning the implementation details of algorithms: just learn the names and use-cases. Make some Quizlet flash cards and you're good. If you're having trouble finding some to learn, try Googling "sorting algorithms" or "sorting algorithm for [someDataStructure]". Go from there. I'd recommend a similar approach for design patterns.
If you want to get better at building applications, practice by reimplementing apps you use every day in your favorite language (or just come up with your own). "Building applications" encompasses a wide variety of things not mentioned above that you'll only be exposed to by building stuff, so do that.
which is a collection of exercises that slowly introduce you to a programming language.
I can read stuff out of a book, but I won't have that 'muscle memory' until I've spent that time in Vim and the compiler/REPL. So that when something new gets thrown my way, I'm not having to think back to the basics.
For data structures, write some unit tests and then make them pass.
I personally wouldn't recommend you bother learning the implementation details of algorithms: just learn the names and use-cases. Make some Quizlet flash cards and you're good. If you're having trouble finding some to learn, try Googling "sorting algorithms" or "sorting algorithm for [someDataStructure]". Go from there. I'd recommend a similar approach for design patterns.
If you want to get better at building applications, practice by reimplementing apps you use every day in your favorite language (or just come up with your own). "Building applications" encompasses a wide variety of things not mentioned above that you'll only be exposed to by building stuff, so do that.