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.
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)
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.
This title documents a convergence of programming techniques - generic programming, template metaprogramming, object-oriented programming and design patterns. It describes the C++ techniques used in generic programming and implements a number of industrial strength components.
Build your expertise as you move beyond the basics—and delve into the core topics of programming with ASP.NET 2.0. Useful to both experienced developers and those developing new skills, this ultimate reference is packed with expert guidance, hands-on programming instruction, and practical examples to help you advance your mastery of developing applications for the Web. Discover how to: Author rich, visually consistent pages and manage layout with themes and Master pages Create personalized pages that persist user preferences Retrieve, modify, and manage data with Microsoft ADO.NET Configure the HTTP pipeline to serve ASP.NET 2.0 pages Control program flow by tracing and handling exceptions Design caching layers and learn state management techniques to optimize application performance Manage users with membership control, registration, and authentication capabilities Build real-world data access layers using common design patterns Use custom collections with data source controls Learn the internals of grid controls PLUS—Get code samples on the Web
Comprehensive, complete coverage is given of Windows programming fundamentals. Fully revised for Windows 98, this edition covers the basics, special techniques, the kernel and the printer, data exchange and links, and real applications developed in the text.
Shows developers how COM operates and how to use it to create efficient and stable programs consistent with the COM philosophy, allowing disparate applications and components to work together across a variety of languages, platforms, and host machines. Original. (Advanced).
Jeffrey Richter, Christophe Nasarre
"Get the classic book for programming Windows in Microsoft Visual C++--now in its fifth edition and fully revised for Windows Vista. This must-have book covers programming at the API level with code samples in Visual C++"--Resource description p.
Writing for intermediate-to-advanced C++ developers, the author outlines all 58 Boost libraries, and then presents comprehensive coverage of 12 libraries. The topics in this work range from smart pointers and conversions to containers and data structures, explaining exactly how using each library can improve your code.
The puzzles and problems in Exceptional C++ not only entertain, they will help you hone your skills to become the sharpest C++ programmer you can be. Many of these problems are culled from the famous Guru of the Week feature of the Internet newsgroup comp.lang.c++, moderated, expanded and updated to conform to the official ISO/ANSI C++ Standard. Try your skills against the C++ masters and come away with the insight and experience to create more efficient, effective, robust, and portable C++ code.
In the first edition ofThinking in C++, Bruce Eckel synthesized years of C++ teaching and programming experience into a beautifully structured course in making the most of the language. The book became an instant classic, winning the 1995Software Development Jolt ColaAward for best book of the year. Now, inThinking in C++, Volume I, Second Edition, Eckel has thoroughly rewritten his masterpiece to reflect all the changes introduced in C++ by the final ANSI/ISO C++ standard. Every page has been revisited and rethought, with many new examples and exercises throughout -- all with a single goal: to help you understand C++ "down to the bare metal," so you can solve virtually any development problem you encounter. Eckel begins with a detailed look at objects and their rationale, then shows how C++ programs can be constructed from off-the-shelf object libraries. This edition includes a new, chapter-length overview of the C features that are used in C++ -- plus a new CD-ROM containing an outstanding C seminar that covers all the foundations developers need before they can truly take advantage of C++. Eckel next introduces key object-oriented techniques such as data abstraction and implementation hiding. He then walks through initialization and cleanup; function overloading and default arguments; constants; inline functions; name control; references and the copy constructor; operator overloading; and more. There are chapters on dynamic object creation; inheritance and composition; polymorphism and virtual functions, and templates. (Bonus coverage of string, templates, and the Standard Template Library, can be found at Eckel's web site.) Every chapter contains many modular, to-the-point examples, plus exercises based on Eckel's extensive experience teaching C++ seminars. Put simply, Eckel has made an outstanding book on C++ even better. For all C++ programmers, and for programmers experienced in other languages who want to strengthen their C++ and object development skills.
Chris Tavares, Brent Rector ATL internals, Kirk Fertitta
The Active Template Library (ATL) is a set of small, efficient, and flexible classes created by Microsoft that facilitate the creation of interoperable components for developing Windows applications. The latest version of ATL is version 8, released with Visual Studio 2005. While .NET has been getting all the attention recently, there is still a huge base of installed COM/ATL code. Many programmers are dealing with difficult issues adding new .NET code to that installed base. At the same time there are many instances where ATL is still the superior choice for new applications - applications that have to run fast and efficiently on Windows, where the CPU doesn't have the memory or bandwidth to run .NET. This book will be a godsend to developers in both of those situations. As one tech reviewer put it, "Any programmer needing to transition ATL code to .NET will need this book." The first edition was widely praised, and sold close to 20,000 units. While ATL is no longer the cutting edge of Microsoft developer tools, there should still be a strong market for authoritative, complete, deep coverage of the newest version of this standard tool.
George Shepherd, Scot Wingo
This guide is for the professional programmer who needs to know what is happening at an internal level within the MFC class library. A real-world reference to MFC, MFC Internals reveals the code-level specifics of how the classes interact with the Windows operating system. Topics include data management and entry, ODBC and OLE interfaces, and more.
Ian Griffiths, Matthew Adams, Jesse Liberty
With its support for dynamic programming, C# 4.0 continues to evolve as a versatile language on its own. But when C# is used with .NET Framework 4, the combination is incredibly powerful. This bestselling tutorial shows you how to build web, desktop, and rich Internet applications using C# 4.0 with .NET's database capabilities, UI framework (WPF), extensive communication services (WCF), and more. In this sixth edition, .NET experts Ian Griffiths, Matthew Adams, and Jesse Liberty cover the latest enhancements to C#, as well as the fundamentals of both the language and framework. You'll learn concurrent programming with C# 4.0, and how to use .NET tools such as the Entity Framework for easier data access, and the Silverlight platform for browser-based RIA development. Learn C# fundamentals, such as variables, flow control, loops, and methods Build complex programs with object-oriented and functional programming techniques Process large collections of data with the native query features in LINQ Communicate across networks with Windows Communication Foundation (WCF) Learn the advantages of C# 4.0's dynamic language features Build interactive Windows applications with Windows Presentation Foundation (WPF) Create rich web applications with Silverlight and ASP.NET
David Kruglinski, Scot Wingo, George Shepherd
The acknowledged standard for unlocking the power and versatility of Microsoft Visual C++, this resource has been updated to cover the latest features that support Internet development.An enclosed CD-ROM contains valuable sample source code and sample applications developed for the book. All of which makes this volume an indispensable tool that every professional should keep close at hand.
Tom Archer, Nishant Sivakumar
This text shows traditional Windows developers how - and why - to incorporate .NET functionality into their applications. Filled with practical examples, it demonstrates how various .NET classes provide either a new ability or a markedly improved way of doing something.
Tom Archer, Andrew Whitechapel
This guide thoroughly covers the features professional programmers must know and the skills they are expected to demonstrate from day one of a new project as they quickly get up to speed programming with Visual C++ within the new .NET environment.
The accompanying CD-ROM features the complete source code and executable files for more than 100 sample programs from the text. Also included on the CD-ROM are numerous compiled examples of Stingray Software's Microsoft Foundation Class extension libraries.
Windows NT File System Internalspresents the details of the NT I/O Manager, the Cache Manager, and the Memory Manager from the perspective of a software developer writing a file system driver or implementing a kernel-mode filter driver. The book provides numerous code examples included on diskette, as well as the source for a complete, usable filter driver. This book appeals to a wide audience: system programmers implementing kernel-mode code such as file systems, device drivers, network redirectors, or filter drivers; system administrators who simply want to learn more about the systems they manage; software engineers interested in NT internals; and computer science students examining the intricacies of file system technology. Topics covered in the book include: An introduction to NT system components The NT I/O Manager The NT Virtual Memory Manager The NT Cache Manager Structured driver development under Windows NT Writing a file system driver Writing a filter driver