I decided to give this course a go after reading the eye-opening paper The Structure and Interpretation of the
Computer Science Curriculum , and then discovered the edx course in HN  .
Although having programmed for many years it totally changed the way I look at programming; I followed this with the sadly unfinished but still excellent How to Design Classes , which consistently extends this initially FP approach to OO. To check how this approach is language neutral, have a look at Design Recipes in C .
Another neglected but wonderful resource is MIT OCW Elements of Software Construction (the 2008 version) , which, like the above, is centered around design rather than coding.
What did I get out of all this? A systematic approach to programming.