- Design patterns: Elements of Reusable Object Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- Test Driven Development by Kent Beck
- Code Complete (2) by Steve McConnell
Modern Operating Systems by Tanenbaum
interesting. It's not about Software Engineering in general, but will bring you many insights how everything works together and not necessarily is a book where you need to practise things a lot.
Practical Object-Oriented Design, An Agile Primer Using Ruby (POODR)
To be clear, I've spent time reading Knuth because I enjoy reading and Knuth is a great book as a book. I only understand a small fraction, but that small fraction grows over the years.
I recommend having all of them because you won't get all the way through Volume One any time soon and there are interesting bits in each of them. Volume 2 is the driest but randomness and numerical methods are intellectually interesting for a few hours every now and then. The mathematics of sorting and searching hasn't changed so an older edition of Volume 3 is going to be fine. 4a covers exponential space and is different in that it doesn't contain code.
But that's me, not you. Good luck.