vibhavpLearning LISP/Scheme (MIT used to use Scheme in their CS courses before switching to Python) is a great way to familiarize yourself with recursion and recursive data structures. You may want to read Structure and Interpretation of Computer Programs, which deals with some really important concepts like modular programming and recursion.
SICP is a very dense and technical book written 30 years ago for MIT students who went into the course with a strong engineering background. Many of the examples in the book use a lot of higher-level math that isn't really needed to learn programming, because it was expected that its target audience would know it already. And nobody except the stuffiest of academics still use Scheme to do anything. SICP is good for what it is but it's not a very helpful book for beginners.
"Learning to program" by reading through a textbook was honestly never something I found very engaging. The best way to learn is by working on tangible projects; you'll probably learn many of the concepts from any textbook just by googling to find out how to solve a problem you run into while coding. The language you start with really doesn't matter as much as people think it does. Python works fine, although I personally think getting used to a language with C-like syntax early on is helpful but that's just my dumb opinion. Once you're really fluent in one programming language, learning others comes very easily.
If you need ideas for programs to write that are beginner-friendly but still challenging, the DWITE problems are a good place to start.
Once you have a good understanding of the basics you should also take a class about data structures and algorithms, since they are very important things to understand for anything past the most basic programs. The Khan Academy course on algorithms looks well thought-out although I haven't personally used it.