Ted Neward, 畅销书 Effective Enterprise Java 作者, 在他自己的新blog中给出了一份Recommended Reading List。Ted 说这是一个非常“旧”的读书清单了，但是还是可以参考一下的。 不知道Ted什么时候会给出一个更新过的读书清单来。
Java Recommended Reading list:
- Effective Java by Bloch.
- Effective Enterprise Java by Neward.
- Concurrent Programming in Java (2nd Ed) by Lea.
- Either Inside Java2 Platform Security by Gong or Java Security (2nd Ed) by Oaks.
- Component Development for the Java Platform by Halloway.
- Inside the Java2 Virtual Machine by Venners.
- Java Development with Ant by Hatcher and Loughran.
- Either Java RMI by Grosso or java.rmi by McNiff and Pitt.
- Servlets and Java Server Pages by Jones and Falkner, possibly Java Servlet Programming (2nd Ed) by Hunter, if you aren't planning to use JSP. (Jason's legendary bias against JSP, right or wrong, puts him somewhat out of tune with what a majority of Java web-client shops are doing. That said, it's a great servlets resource.)
.NET Recommended Reading list:
- C# In a Nutshell (2nd Ed) by Drayton, Albahari, and Neward.
- Advanced .NET Remoting by Rammer.
- Essential ADO.NET by Beauchemin.
- Inside Microsoft .NET IL Assembler by Lidin.
- SSCLI Essentials by Stutz, Neward and Shilling.
- Debugging Applications by Robbins.
- Inside Windows 2000 by Russinovich and Solomon.
- Essential COM by Box. (Yes, I mean Essential COM and not his more recent Essential .NET book. The first chapter of Essential COM is probably the best well-written technical prose I've ever read in my life, and everybody who ever wanted to write reusable components in C++ needs to read it to understand why C++ failed so miserably at that goal. Once you've seen that, you're ready to understand why components are so powerful and so necessary.)
- The Common Language Infrastructure Annotated Standard by Miller
- Programming in the .NET Environment by Watkins et al.
C++ Recommended Reading list:
- The C++ Programming Language (3rd Ed) by Stroustrup.
- Effective C++ (1st, 2nd or 3rd Ed) by Meyers.
- More Effective C++ by Meyers.
- Effective STL by Meyers.
Security-related Recommended Reading list:
- Secrets and Lies by Schneier.
- Either Cryptography Decrypted by (can't remember the name offhand), Practical Cryptography by Schneier and Ferguson, or Applied Cryptography (2nd Ed) by Schneier. The first is a lightweight introduction to the subject, the second is a more detailed introspection, the third required reading for anybody who wants to be a security wonk.
- The Code Book by Singh.
Platform-agnostic Recommended Reading list:
- Design and Evolution of C++ by Stroustrup. It's fascinating hearing how a language develops over time, and what was behind some of the decisions in the features of the language. For example, why did multiple inheritance come before templates or RTTI? Not because it was more important, but because Stroustrup wanted to tackle MI first because he wasn't sure if or how he could do it. He describes that as a great regret, that he didn't do templates first.
- Component Software (2nd Ed) by Szyperski.
- Rapid Development by McConnell. Read this before you read any of the Extreme Programming books, because this book describes a whole taxonomy of what I think a lot of people are reaching for in agile and other methodologies.
- The Inmates Are Running the Asylum by Cooper.
- The Invisible Computer by Norman.
- Principles of Transaction Processing by Bernstein and Newcomer.
- Transaction Processing: Concepts and Techniques by Gray and Reuter. What to read when you're done with the Bernstein and Newcomer book and still want to know more about the Zen of Transactional Processing.
- Refactoring by Fowler.
- Design Patterns by Gamma, Helm, Johnson and Vlissides.
- Pattern Oriented Software Architecture, Vol 1 by Stal et al.
- Pattern Oriented Software Architecture, Vol 2 by Schmidt et al.
- Patterns of Enterprise Application Architecture by Fowler.
- Enterprise Integration Patterns by Hohpe and Woolf. Excellent discussion of message-based architecture. I personally think the title is something of a misnomer, but it's understandable since message-oriented communication is the easiest means by which to integrate heterogeneous systems.