Below is a reading list of software engineering books that I put together for a friend a few month ago - hope you enjoy the list...
C
C Programming Language (2nd Edition) by Brian W. Kernighan and Dennis M. Ritchie
Java
Java Programming Language, The (4th Edition) by Ken Arnold, James Gosling and David Holmes
Thinking in Java (4th Edition) by Bruce Eckel
Advanced Effective Java (2nd Edition) by Joshua Bloch
Advanced Java Concurrency in Practice by Brian Goetz, Tim Peierls, Joshua Bloch and Joseph Bowbeer
Ruby
Learn to Program, Second Edition (The Facets of Ruby Series) by Chris Pine
Programming Ruby 1.9: The Pragmatic Programmers’ Guide (Facets of Ruby) by Dave Thomas, Chad Fowler and Andy Hunt
Algorithms
Algorithms in Java, Parts 1-4 (3rd Edition) (Pts.1-4) by Robert Sedgewick
Testing
Test Driven Development: By Example by Kent Beck
Software Design Advanced
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant and William Opdyke
Refactoring to Patterns by Joshua Kerievsky
The Enterprise Advanced
Patterns of Enterprise Application Architecture by Martin Fowler
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions by Gregor Hohpe and Bobby Woolf
Web
Agile Web Development with Rails (Pragmatic Programmers) by Sam Ruby, Dave Thomas and David Heinemeier Hansson
Advanced Restful Web Services by Leonard Richardson, Sam Ruby and David Heinemeier Hansson
Methodology
Extreme Programming Explained: Embrace Change (2nd Edition) by Kent Beck and Cynthia Andres
Agile Software Development with Scrum (Series in Agile Software Development) by Ken
Schwaber and Mike Beedle
SQL
Joe Celko’s SQL for Smarties, Fourth Edition: Advanced SQL Programming (The Morgan Kaufmann Series in Data Management Systems) by Joe Celko
37 Signals
Rework by Jason Fried and David Heinemeier Hansson
Getting Real: The smarter, faster, easier way to build a successful web application by Jason Fried, Heinemeier David Hansson and Matthew Linderman
Collections
Pragmatic Unit Testing in Java with JUnit by Andy Hunt and Dave Thomas
Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Apps by Mike Clark
Pragmatic Version Control Using Git (Pragmatic Starter Kit) by Travis Swicegood
Pragmatism
The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas