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.<p>[1] <a href="https://cs.brown.edu/~sk/Publications/Books/ProgLangs/" rel="nofollow">https://cs.brown.edu/~sk/Publications/Books/ProgLangs/</a>
<i>How to Design Programs, Second Edition</i>[1] is a good resource for learning how to model and program in a style that will translate well to full-blown Racket. See also <i>Realm of Racket</i>[2].<p>The <i>Racket Cheat Sheet</i>[3] is handy, and provides some useful links at the top (cf. "Sites", "Community").<p>[1] <a href="http://www.ccs.neu.edu/home/matthias/HtDP2e/" rel="nofollow">http://www.ccs.neu.edu/home/matthias/HtDP2e/</a><p>[2] <a href="http://realmofracket.com/" rel="nofollow">http://realmofracket.com/</a><p>[3] <a href="http://docs.racket-lang.org/racket-cheat/" rel="nofollow">http://docs.racket-lang.org/racket-cheat/</a>
I took this course the first time Kiczales taught it online. That was on Coursera's platform in 2013.<p>It would be my suggestion.<p><a href="https://www.edx.org/course/how-code-systematic-program-design-part-ubcx-spd1x" rel="nofollow">https://www.edx.org/course/how-code-systematic-program-desig...</a>