One of the best resources I've found is Programming Languages: Application and Interpretation by Shriram Krishnamurthi[1]. It walks you through building a small interpreter and language in Racket. Not only does it teach Racket, but it helps understand how and why the language works.