For people with mathematical maturity there are options like SICP and other. But for those who are not so much mathematically apt, what are the options for bookish learning?<p>Are there books suitable for SELF STUDY that don't water things down but actually teach programming in any language? By not watering things down, I mean that the student doesn't just learn a bunch of libraries or frameworks and after finishing the book doesn't know how to solve problems on own.
The Pragmatic Programmer[1] is a classic that reasonably fits your description.<p>> For twenty years, the lessons from The Pragmatic Programmer have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology.<p>I’m not sure whether it’s “beginner” enough for you, but it is certainly general and foundational.<p>[1]: <a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/" rel="nofollow noreferrer">https://pragprog.com/titles/tpp20/the-pragmatic-programmer-2...</a>
Language programming and problem-solving are two entirely different things.<p>Almost all books on those two subjects are suitable for self-study.<p>The only ones which aren't, are those deeply into the <i>theory</i> 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 <i>require</i> 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.<p>* 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.