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.
Martin Fowler, Kent Beck
Users can dramatically improve the design, performance, and manageability of object-oriented code without altering its interfaces or behavior. "Refactoring" shows users exactly how to spot the best opportunities for refactoring and exactly how to do it, step by step.
In designing large-scale C++ applications, you are entering a dimension barely skimmed by most C++ books, particularly considering experience with small programming projects does not scale up to larger projects. This book unites high-level design concepts with specific C++ programming details to reveal practical methods for planning and implementing high-quality large C++ systems. You will learn the importance of physical design in large systems, how to structure your software as an acyclic hierarchy of components, and techniques for reducing link-time and compile-time dependencies. Then the book turns to logical design issues--architecting a component, designing a function, and implementing an object--all in the context of a large-project environment.
Jez Humble, David Farley
The step-by-step guide to going live with new software releases faster - reducing risk and delivering more value sooner! * *Fast, simple, repeatable techniques for deploying working code to production in hours or days, not months! *Crafting custom processes that get developers from idea to value faster than ever. *Best practices for everything from source code control to dependency management and in-production tracing. *Common obstacles to rapid release - and pragmatic solutions. In too many organizations, build, testing, and deployment processes can take six months or more. That's simply far too long for today's businesses. But it doesn't have to be that way. It's possible to deploy working code to production in hours or days after development work is complete - and Go Live presents comprehensive processes and techniques for doing so. Written by two of the world's most experienced software project leaders, this book demonstrates how to dramatically increase speed while reducing risk and improving code quality at the same time. The authors cover all facets of build, testing, and deployment, including: configuration management, source code control, release planning, auditing, compliance, integration, build automation, and more. They introduce a wide range of advanced techniques, including inproduction monitoring and tracing, dependency management, and the effective use of virtualization. For each area, they explain the issues, show how to mitigate the risks, and present best practices. Throughout, Go Live focuses on powerful opportunities for individual improvement, clearly and simply explaining skills and techniques so they can be used every day on real projects. With this book's help, any development organization can move from idea to release faster -- and deliver far more value, far more rapidly.
Norman L. Kerth
Use Team-Based Review Sessions to Maximize What You Learn from Each Project With detailed scenarios, imaginative illustrations, and step-by-step instructions, consultant and speaker Norman L. Kerth guides readers through productive, empowering retrospectives of project performance. Whether your shop calls them postmortems or postpartums or something else, project retrospectives offer organizations a formal method for preserving the valuable lessons learned from the successes and failures of every project. These lessons and the changes identified by the community will foster stronger teams and savings on subsequent efforts. For a retrospective to be effective and successful, though, it needs to be safe. Kerth shows facilitators and participants how to defeat the fear of retribution and establish an air of mutual trust. One tool is Kerth's Prime Directive: Regardless of what we discover, we must understand and truly believe that everyone did the best job he or she could, given what was known at the time, his or her skills and abilities, the resources available, and the situation at hand. Applying years of experience as a project retrospective facilitator for software organizations, Kerth reveals his secrets for managing the sensitive, often emotionally charged issues that arise as teams relive and learn from each project. Don't move on to your next project without consulting and using this readable, practical handbook. Each member of your team will be better prepared for the next deadline.
You might think more than enough design books exist in the programming world already. In fact, there are so many that it makes sense to ask why you would read yet another. Is there really a need for yet another design book? In fact, there is a greater need than ever before, and Practical API Design: Confessions of a Java Framework Architect fills that need! Teaches you how to write an API that will stand the test of time Written by the designer of the NetBeans API at Sun Technologies Based on best practices, scalability, and API design patterns
Each chapter starts by showing the user experience we are going to create in the chapter. It then has a section discussing the major design decisions we face in building these features, and finally presents the 'solution' including the overall architecture and highlighting the most important code elements. The book presents a lot of real-world code, with comprehensive explanation and discussion. The full social network application is available for download from the Packt website, for you to examine, study, and modify. This book is written for ASP.NET and C# developers who want to build an enterprise-grade Social Network, either for their own business purposes or as a contract job for another company. The book assumes you have prior experience of developing web applications using ASP.NET 3.5, C# 3.0, SQL Server 2005/2008, and Visual Studio .NET 2008; it focuses on topics that will be of interest to existing developers not on providing step-by-step examples for each detail.
C. J. Date, Hugh Darwen, Nikos A. Lorentzos
Temporal database systems are systems that provide special support for storing, querying, and updating historical and/or future data. Current DBMSs provide essentially no temporal features at all, but this situation is likely to change soon for a variety of reasons; in fact, temporal databases are virtually certain to become important sooner rather than later, in the commercial world as well as in academia. This book provides an in-depth description of the foundations and principles on which those temporal DBMSs will be built. These foundations and principles are firmly rooted in the relational model of data; thus, they represent an evolutionary step, not a revolutionary one, and they will stand the test of time. This book is arranged in three parts and a set of appendixes: * Preliminaries: Provides a detailed review of the relational model, and an overview of the Tutorial D language. * Laying the Foundations: Explains basic temporal data problems and introduces fundamental constructs and operators for addressing those problems. * Building on the Foundations: Applies the material of the previous part to issues of temporal database design, temporal constraints, temporal query and update, and much more. * Appendixes: Include annotated references and bibliography, implementation considerations, and other topics. Key features: * Describes a truly relational approach to the temporal data problem. * Addresses implementation as well as model issues. * Covers recent research on new database design techniques, a new normal form, new relational operators, new update operators, a new approach to the problem of "granularity," support for "cyclic point types," and other matters. * Includes review questions and exercises in every chapter. * Suitable for both reference and tutorial purposes.
Mickey Gousset, Brian Keller, Ajoy Krishnamoorthy, Martin Woodward
Get up to speed on Application Lifecycle Management (ALM) with Visual Studio 2010 through a combination of hands-on instruction and deep-dives. Microsoft has packed a lot of brand new testing and modeling tools into Visual Studio 2010, tools that previously were available only to Microsoft internal development teams. Developers will appreciate the focus on practical implementation techniques and best practices. A team of Microsoft insiders provides a nuts-and-bolts approach. This Wrox guide is designed as both a step-by-step guide and a reference for modeling, designing, and coordinating software development solutions at every level using Visual Studio 2010 and Visual Studio Team Foundation Server 2010. Visual Studio 2010 offers a complete lifecycle management system that covers modeling, testing, code analysis, collaboration, build and deployment tools.
'Programming .NET Components', second edition, updated to cover .NET 2.0., introduces the Microsoft .NET Framework for building components on Windows platforms. From its many lessons, tips, and guidelines, readers will learn how to use the .NET Framework to program reusable, maintainable, and robust components.
Stephen P. Berczuk, Brad Appleton
This volume examines proven software configuration management strategies to allow professionals to deliver quality software systems with the least amount of wasted effort. It is designed to help managers build and foster a development environment focused on producing optimal teamwork.
Git is the version control system developed by Linus Torvalds for Linux kernel development. It took the open source world by storm since its inception in 2005, and is used by small development shops and giants like Google, Red Hat, and IBM, and of course many open source projects. A book by Git experts to turn you into a Git expert Introduces the world of distributed version control Shows how to build a Git development workflow
Anne Mette Jonassen Hass
Configuration management (CM) is frequently misunderstood. This discipline is growing in popularity because it allows project participants to better identify potential problems, manage change, and efficiently track the progress of a software project. This book gives the reader a practical understanding of the complexity and comprehensiveness of the discipline.
Jean-Luc David, Mickey Gousset, Erik Gunvaldson
A guide to Team Foundation Server covers such topics as working with mixed environments, creating custom development tools, implementing IT governance, and monitoring team project metrics using SQL Server Reporting Services.
David Thomas, Andrew Hunt
Discusses how to improve the effectiveness of the software development process using version control, sometimes called source code control. A version control system is a place to store all the various revisions of written code while an application is being developed. The book focuses on using the freely available open source CVS version control system.