A first programming course should focus on learning to program well rather than on learning a specific programming language; the programming language should get out of the way and support this goal.
The powerful, straightforward Racket language (related to Scheme) enables us to focus on the core ideas and methods of computer programming without being sidetracked by convoluted syntax. Because of this, this book can be used in high school (and possibly middle school), but it also contains enough advanced ideas that aren't typically covered in introductory courses to be difficult for college students. Programmers who have experience with Java, Python, or C++ will be better able to understand the fundamentals, undo some bad habits, and alter their perspectives on programming.