Recently I interviewed many developer and most of them only concern how to setup, use framework. They know how to use Java collection framework but they can’t explain the algorithm like B-Tree, binary search, merge sort. I like to learn mathematics and algorithm, and appreciate their beauty inside. Here is the books I usually read again and again.

1. The Art of Computer Programming (TAOCP)

2. Introduction to Algorithm (CLRS)
MIT Open Course

3. Structure and Interpretation of Computer Programs (SICP)
Online book

4. Compilers: Principles, Techniques, and Tools

5. Dreaming in code

6. Beautiful Code

Babar K. Zafar: Classic Texts in Computer Science