Don’t know if I started a topic in correct sub-forum, if not — I hope moderator will move it to the right place.
As a partially self-taught programmer, I noticed that there is an excess of blogs, infos, books and articles about concrete implementations, algorithms, solutions of whatever you need.
And this is fine, but very few books are about the bread-and-butter of every programmer - using abstractions. What is the difference between indirection and abstraction? What kind of abstractions there are? What are the tradeoffs of adding abstraction, what are the situations when one should abstract something away? Should I move some functionality to a separate function? Why? Etc.
It’s supposed that one can internalize these decisions by experience and develop some sort of intuition to these questions. But I’m looking for more thoughtful, clear and direct approach. Less of “this is my experience and how I do things”, more of a focused research and direct thinkings on this subject.
One of the books I’m aware of is Zach Tellman’s Elements Of Clojure. I haven’t got myself a copy yet, but I read his short excerpt about abstractions and namings, it is quite profound in my opinion.
I’m looking exactly for this kind of books/articles: high-level, abstract book about abstractions (sorry), functions, namings and all the general stuff that is not linked to any programming language or algorithm in particular. Are those books even on a programming/engineering level, or should I go to the bottom of something like systems theory etc?
It’s my belief that the more fundamental, general knowledge and awareness of what are you doing give you more than any particular method, pattern or framework can ever give you.
Answers, recommendations and links are highly appreciated, thanks!