just finished up a course using this book and I found it easy to understand! The only prerequisite is a bit of experience with proofs but there’s a review of the needed math in the first chapter. In particular the chapter on intractable problems was illuminating for me.
Always liked <em>Introduction to Automata Theory, Languages, and Computation</em> by Hopcroft and Ullman as an intro text. Undergraduate-level but good treatment of TCS.
If that's too basic, I recommend <em>Theory of Computation</em> by Kozen. It's roughly 1st-year graduate level, intended for those already with some background.
If that's too basic, for a research-level survey of TCS, take a look at Wigderson's <em>Mathematics and Computation</em>.
See below for my course books normally you do discrete math (set theory and computability theory), theory of computation (automata theory), and programming language (formal language theory).
introduction to automata theory languages and computation Link: https://www.amazon.com/Introduction-Automata-Theory-Languages-Computation/dp/0321455363
languages and machines an introduction to the theory of computer science Link: https://www.amazon.com/Languages-Machines-Introduction-Computer-Science/dp/0321322215
Introduction to the theory of computation Link: https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X
Programming Language Pragmatics Link: https://www.amazon.com/Programming-Language-Pragmatics-Fourth-Michael/dp/0124104096
Look for http://www.amazon.com/Introduction-Automata-Languages-Computation-Edition/dp/0321455363 i understood more here than the Sipser book (usually every course on the topic uses one of those two books)