In my daily life as a consultant, I work on solving problems for clients. That usually means one of two things: I develop new solutions from scratch (rare), or I wade through old code to try to fashion a durable, maintainable solution. Either way, I have to think about how I build software that not only I can maintain, but someone else after me can make sense of it and work with it. Along those lines, I have been currently reading the following interesting books (each highly recommended):
Agile Java: Crafting Code with Test-Driven Development by Jeff Langr. I know, I know, its a Java book. :) One of my projects has involved managing developers of some Java code.The last time I worked with Java was over 5 years ago and it was very brief. I have also been taking time lately with Java for research for my book I keep promising to write -- its for .NET, but most of the research, unfortunately, is only available in C++ and Java. For learning Java 1.5 (the latest), the Agile Java book does an excellent job of combining principles with writing tests, lots of tests. It's been a fun re-introduction, and I think it is the best way to really learn the basics of the language plus TDD skills at the same time. I have tried a few of the Java IDEs, but I think by far I like IntelliJ IDEA by JetBrains the best (so does the author of the book, and he includes a brief tutorial for the editor). I think I like it because I am so familiar now with their style after using their ReSharper tool with C#. IDEA seems to do things the way I intuitively want them done.
Working Effectively with Legacy Code by Michael Feathers. As I mentioned, as a consultant, I am usually working with someone else's code, and invariably that code has no tests and I am tasked to fix bugs and/or add new features. Where do you begin? This book takes the task head-on to get legacy code into a test harness, deal with code that isn't object-oriented, and figuring out where code changes need to be made. Examples are in C, C++, Java, and C#.
Expert .NET Delivery: Using NAnt and CruiseControl.NET by Marc Holmes. This has been a fun book to dive into as it relates to some build scripting for one of my projects. I have found the best thing you can do for build scripts (and deployment/installation scripts) is to write them in such a way as anyone can run them, or better yet, kick them off as a scheduled task. I just started this book, but I have already learned a great deal more than I thought I did about VS.NET 1.1 projects and how NAnt can be stretched to the limits.
This is a partial list of things I am interested in currently. Hopefully it will give someone some ideas for something good and interesting to read.