Another great resource for learning constraint programming is CS294 "Programming Synthesis for Everyone" [1]. It focuses on using Racket and Rosette [2] to synthesize programs.
[1]: https://homes.cs.washington.edu/~bodik/ucb/cs294fa12.html
[1]: https://homes.cs.washington.edu/~bodik/ucb/cs294fa12.html