How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Michael C. Feathers
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.
The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.
Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.
Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.
To add unit tests, you must change the code. To change the code, you need unit tests to show how safe your change was.
The core of the book is a cookbook of recipes to conduct various careful attacks. Each presents a particular problem, and a relatively safe way to migrate the code towards tests.
Code undergoing this migration will begin to experience the benefits of unit tests, and these benefits will incrementally make new tests easier to write. These efforts will make aspects of a legacy codebase easy to change.
It's an unfortunate commentary on the state of our programming industry how much we need this book.
.NET 3.5 is Microsoft’s largest development software launch since .NET 2.0 and (unlike .NET 3.0) completely replaces all previous .NET versions. A new version of Visual Studio – Visual Studio ‘Orcas’ is being created for the new Framework together with new versions of both the C# and Visual Basic languages. This book deals with this new C# language and provides developers with a complete treatise on the new technology – explaining the importance of all the new features (lambda expressions, LINQ, ASP.NET AJAX, WPF everywhere) and how they integrate into the framework of the previous .NET versions. It is a comprehensively revised and updated version of the author’s previous award-winning titles.
For years, developers have wished for a programming language with the power and flexibility of C++ that's also easy to write, read, and maintain like Microsoft "RM" Visual Basic "RM". Visual C# "TM", the hot new Web-enabled programming language from Microsoft, satisfies those wishes. Its object-oriented, programmer-friendly capabilities make it vastly easier to learn and use than older languages such as C++ -- especially for developing Web application. "Inside C#" provides the ideal in-depth look at the architecture and programming elements of Microsoft Visual C#. While other books may concentrate on C# development and runtime environments, this book is devoted to the language itself. It will have an exceptionally long shelf life, since the core C# language will change very little over time, while environments such as Microsoft Visual Studio "RM" may change yearly. This book is perfect for any Visual Basic developer who wants to move up to the next-generation language, and for any Visual C++ developer who wants an eaisier language to use for developing Web-enabled applications for the Internet. It includes tips throughout that highlight differences between Visual Basic, C++, and C# to help select the best language for the job, plus C# sample code both in the text and on an accompanying CD.
Ira R. Forman, Nate Forman
Explaining the Java Reflection API and providing techniques for using it effectively, this guide describes the capabilities that allow a program to examine and modify itself at runtime. The java.lang.reflect package and its uses are covered, including a detailed discussion of Java's dynamic proxy facility. Less obvious reflective capabilities, such as call stack introspection and the Java class loader, are addressed. In recognition of the limitations of Java Reflection, the various ways to use Reflection to generate code and surpass these limitations are detailed. A discussion of performance analysis techniques and a look ahead at what is new in JDK 1.5 is included.