I used the book How to Design Programs to learn programming in a clean and functional way. I had to find the textbook that clicked for me.