How to Design Programs with Racket was life changing.
https://htdp.org
That helped me to think about recursion, functional programming, and type driven development. After going through HTDP I was able to breeze through complex problems that were unsolvable before.