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.
Ralph Johnson, Erich Gamma, John Vlissides, Richard Helm
Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently. Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk. 0201633612B07092001
Eric Evans
Describes ways to incorporate domain modeling into software development.
Martin Fowler
This volume is a handbook for enterprise system developers, guiding them through the intricacies and lessons learned in enterprise application development. It provides proven solutions to the everyday problems facing information systems developers.
Steve McConnell
Features the best practices in the art and science of constructing software--topics include design, applying good techniques to construction, eliminating errors, planning, managing construction activities, and relating personal character to superior software. Original. (Intermediate)
Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates
Provides design patterns to help with software development using the Java programming language.
Robert C. Martin
Written by a software developer for software developers, this book is a unique collection of the latest software development methods. The author incudes OOD, UML, Design Patterns, Agile and XP methods with a detailed description of a complete software design for reusable programs in C++ and Java. Using a practical, problem-solving approach, it shows how to develop an object-oriented application -- from the early stages of analysis, through the low-level design and into the implementation. Walks readers through the designer's thoughts — showing the errors, blind alleys, and creative insights that occur throughout the software design process. Covers: Statics and Dynamics; Principles of Class Design; Complexity Management; Principles of Package Design; Analysis and Design; Patterns and Paradigm Crossings. Explains the principles of OOD, one by one, and then demonstrates them with numerous examples, completely worked-through designs, and case studies. Covers traps, pitfalls, and work arounds in the application of C++ and OOD and then shows how Agile methods can be used. Discusses the methods for designing and developing big software in detail. Features a three-chapter, in-depth, single case study of a building security system. For Software Engineers, Programmers, and Analysts who want to understand how to design object oriented software with state of the art methods.
Dino Esposito, Andrea Saltarello
Provides information on designing and building effective enterprise solutions, covering such topics as UML, the business layer, the service layer, and the data access layer.
Jimmy Nilsson
A practical guide to applying patterns in building a customized architecture for the application you are developing.
Juval Lowy
Provides information on developing service-oriented applications for Windows.
Joseph Albahari, Ben Albahari, Peter Drayton
Offers a reference to key C# programming concepts covering language elements, syntax, datatypes, and tasks.
Fabrice Marguerie, Steve Eichert, Jim Wooley
Provides information on using LINQ to query XML, SQL databases, ADO.NET datasets, and other data sources and offers instructions on using LINQ to improve applications.
Julia Lerman
Describes how to model and interact with data in .NET using Entity Framework.
Jon Arking, Scott Millett
Comprehensive coverage to help experienced .NET developers create flexible, extensible enterprise application code If you're an experienced Microsoft .NET developer, you'll find in this book a road map to the latest enterprise development methodologies. It covers the tools you will use in addition to Visual Studio, including Spring.NET and nUnit, and applies to development with ASP.NET, C#, VB, Office (VBA), and database. You will find comprehensive coverage of the tools and practices that professional .NET developers need to master in order to build enterprise more flexible, testable, and extensible .NET applications with minimal upfront costs. Helps C#, VB.Net, and ASP.NET developers who wish to migrate both their applications and their own skillsets to newer, more flexible enterprise methodologies Describes each new pattern or feature along with its benefits, then outlines the pros and cons of its implementation Includes an introduction to enterprise development and a comprehensive overview of the differences between new enterprise patterns and older, traditional Microsoft programming Explains how to implement these patterns by upgrading an existing code base Covers benefits including flexibility, automated testing, extensibility, and separation; modular code; test-driven development, unit test, test automation, and refactoring; inversion of control; and object relational mapping Also covers enterprise design patterns: MVC including Ruby on Rails, Monorail, and ASP.NET MVC, MVP, observer, and more Contains a primer on object-oriented design Professional Enterprise .NET focuses on the often-inevitable compromise between forward-thinking design and the needs of business, helping you build applications that serve both.
Dino Esposito
Provides information on creating an effective mobile computing strategy that meets the needs of an enterprise.