Doing your own research, <i>visiting libraries</i>, reading reviews, etc. These are the best way to find books that you never would have found otherwise.<p>Otherwise you're going to end up with the same old stuff (SICP, Release It!, GEB, Code Complete, blah blah blah). Those books are actually good but they are on every single list and even worse, some "modern classics" are actually complete dreck. You might impress your developer friends but you won't advance yourself.<p>For example when I was studying for my PhD in signal processing and machine learning (before machine learning became popular again) I had to learn a lot about functional analysis. I also needed to learn a small amount of measure theory; and to go appreciably deeper in to time-frequency analysis, probability, and statistics, than I had before.<p>I discovered many masterpieces of my own accord. I never would have seen them because one lesson I learned during my literature review and actually doing research is that very few people actually read the books and articles they cite. They merely copy bibliographies from one ancestor article to another without knowing why.