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.