_(Disclaimer: I'm not a computer scientist and have not read most of these books. I wish more people would address this interesting question.)_

There are various options 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 an easy solution but I did not put much effort into it).

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 complementary texts. So, other titles whose TOC (Table of Contents) caught my attention for various reasons, in no particular order, were:

* _Introduction to Computation and Programming Using Python_
* _Computer Science Illuminated_
* _Python Programming: An Introduction to Computer Science_
* _Explorations in Computer Science_

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).