How to Design Programs, Second Edition is an introductory CS text. The programming language it teaches is a variant of Scheme, but what makes it unique is its approach to solving problems via systematic program design.
Acquiring the mechanical skills of programming—learning to write expressions that the computer understands, getting to know what functions and libraries are available, and similar activities—aren’t helping you much with real programming. To make such claims is like saying that memorizing a thousand words from the dictionary and a few grammar rules teaches you a foreign language.
For further explanation the reasoning behind this approach, read the Preface. It's interesting to consider, for both teachers and students of CS, or for anyone in any field that requires critical thinking and creativity.
Some highlights from recent exercise solutions.
The DrRacket IDE, which is part of Racket, can be used to run most of the examples. Get it from the Racket download page, then open one of the exercise solution files and run it.