(Disclaimer: I'm not a computer scientist and have not read most of these books. I wish more people would address this interesting question.)
CS courses usually provide an introduction to the field which may be supported by corresponding textbooks, for which various options exist out there. Many of them have titles in the lines of "Introduction to Computer Science", "Fundamentals of Computing", etc.
For example, I enjoyed reading CS for All: An Introduction to Computer Science Using Python last year, although I haven't worked through its introduction to objects because I had a bit of trouble with the Python graphics library of their choice, so I just glanced the contents since objects were already a familiar topic (the issue had possibly had an easy solution but I did not put much effort into it), so I just glanced its contents since objects were already a familiar topic.
I was satisfied with its treatment of Python, functions and recursion, as well as other subjects I wanted to delve into a bit deeper, so it was a generally enjoyable read.
I've found it relatively short and now I'm looking for complementarysupplementary texts. So, other titles whose TOC (Table of Contents) caught my attention for various reasons, in no particular order (but still rather Python-centric), were:
- Introduction to Computation and Programming Using Python - John V. Guttag
- Computer Science Illuminated - Nell Dale and John Lewis
- Python Programming: An Introduction to Computer Science - John Zelle
- Explorations in Computing: An Introduction to Computer Science and Python Programming - John S. Conery
And there are certainly many others available and more or less up-to-date.
BTW, regarding being up-to-date, this is probably bad advice (and possibly worth questioning separately), but I once misread the introduction from Simply Scheme (which is also an introductory CS book, and is known as a prequel to Structure and Interpretation of Computer Programs) as stating that CS books have a ten-year lifespan or so in terms of how well they address the ever-changing trends from the field (certainly a terrible misread, and people would throw SICP at me as a counterexample - BTW, there is a JavaScript edition of SICP now). But it stuck with me, and now I personally tend to favor more recent introductory CS books such as the ones I mentioned.
So that is just something to consider. You are probably okay reading any book or edition that is not terribly old or adopts an unfavorable language to teach its concepts. Python is a popular language choice today, Java had its heyday some time ago, languages such as Scheme are considered good for teaching CS concepts, and you certainly can find more or less up-to-date choices for C and other relatively popular languages you might be familiar with, or even language-agnostic options (such as the Computer Science Illuminated one that I mentioned earlier, with which you are free to adopt any language you prefer).