Language programming and problem-solving are two entirely different things.
Almost all books on those two subjects are suitable for self-study.
The only ones which aren't, are those deeply into the theory rather than the practice of the subjects. Those can usually be ascertained because they have quite a bit of mathematical formulae sprinkled throughout the text. Those books require a background in mathematics*, and so may not be as useful to you as others which look at the practice of being a programmer and problem-solver.
* An example of this may be (say) the mathematics of comparing various sorting methods. As a programmer, you probably merely need to know that a Bubble Sort is not as efficient as a Merge Sort.