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.
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.
Krzysztof Cwalina, Brad Abrams
A new edition of this title is available, ISBN-10: 0321545613 ISBN-13: 9780321545619 "This book is an absolute must-read for all .NET developers. It gives clear do and don't guidance on how to design class libraries for .NET. It also offers insight into the design and creation of .NET that really helps developers understand the reasons why things are the way they are. This information will aid developers designing their own class libraries and will also allow them to take advantage of the .NET class library more effectively." --Jeffrey Richter, author/trainer/consultant, Wintellect "Framework Design Guidelineswill help you in two important ways. First, any .NET developer will benefit from a greater understanding of the design principles that govern the .NET Base Class Library. Second, a deeper understanding of these principles will help you to create software that integrates well with the .NET environment. Quite frankly, this book should be on every .NET developer's bookshelf." --Bill Wagner, founder and consultant, SRT Solutions, author ofEffective C# "Not since Brooks'The Mythical Man Monthhas the major software maker of its time produced a book so full of relevant advice for the modern software developer. This book has a permanent place on my bookshelf and I consult it frequently." --George Byrkit, senior software engineer, Genomic Solutions "This book is a must-read for all architects and software developers thinking about frameworks. The book offers insight into some driving factors behind the design of the .NET Framework. It should be considered mandatory reading for anybody tasked with creating application frameworks." --Peter Winkler, senior software engineer, Balance Technology Inc. "Frameworks are valuable but notoriously difficult to construct: Your every decision must be geared towards making them easy to be used correctly and difficult to be used incorrectly. This book takes you through a progression of recommendations that will eliminate many of those downstream 'I wish I'd known that earlier' moments. I wish I'd read it earlier." --Paul Besly, principal technologist, QA "Filled with information useful to developers and architects of all levels, this book provides practical guidelines and expert background information to get behind the rules.Framework Design Guidelinestakes the already published guidelines to a higher level, and it is needed to write applications that integrate well in the .NET area." --Cristof Falk, software engineer Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Librariesteaches developers the best practices for designing system frameworks and reusable libraries for use with the Microsoft .NET Framework and WinFX. This book focuses on the design issues that directly affect the programmability of a framework, specifically its publicly accessible APIs. This book can improve the work of any .NET developer producing code that other developers will use. An added benefit is a collection of annotations to the guidelines by various members of the Microsoft .NET Framework and WinFX teams, which provide a lively discussion of the motives behind the guidelines, along with examples of good reasons for breaking the guidelines. Microsoft architects Krzysztof Cwalina and Brad Abrams offer guidelines for framework design from the top down. From their long experience and deep insight, you will learn The general philosophy of framework design Principles and guidelines that are fundamental to overall framework design Naming guidelines for the various parts of a framework, such as namespaces, types, and members Guidelines for the design of types and members of types Issues and guidelines that are important to ensure appropriate extensibilityin your framework Guidelines for working with exceptions, the preferred error reporting mechanism in the .NET Framework and WinFX Guidelines for extending and using types that commonly appear in frameworks Guidelines for and examples of common framework design patterns Guidelines in this book come in four major forms:Do,Consider,Avoid, andDo not. In general, aDoguideline should almost always be followed, aConsiderguideline should generally be followed, anAvoidguideline indicates that something is generally not a good idea, and aDo notguideline indicates something you should almost never do. Every guideline includes a discussion of its applicability, and most guidelines include a code example. A companion DVD includes theDesigning .NET Class Librariesvideo series, instructional presentations by the authors on design guidelines for developing classes and components that extend the .NET Framework. A sample API specification and other useful resources are also included.
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.
Stanley B. Lippman
There is a lot of misinformation and myth about the overhead and costs associated with C++. Now Stan Lippman, the acclaimed author of the C++ Primer, answers the call for a book that gives strategy guidelines for C++ programming. Inside the C++ Object Model explains where overhead costs reside and what they actually consist of. The author explains which parts vary by implementation and which are invariant. He tells how the various implementation models arose, points out areas where they are likely to evolve, and explains why they are what they are. This book is a must for C++ programmers who want to understand the semantic implications of the C++ object model and how the model affects their programs.
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).
The first edition of this book was released at the 2001 Tech-Ed conference in Atlanta, Georgia. At that time, the .NET platform was still a beta product, and in many ways, so was this book. This is not to say that the early editions of this text did not have merit—after all, the book was a 2002 Jolt Award finalist and it won the 2003 Referenceware Excellence Award. However, over the years that author Andrew Troelsen spent working with the common language runtime (CLR), he gained a much deeper understanding of the .NET platform and the subtleties of the C# programming language, and he feels that this fifth edition of the book is as close to a “final release” as he’s come yet. This new edition has been comprehensively revised and rewritten to make it accurately reflect the C# 4 language specification for the .NET 4 platform. You’ll find new chapters covering the important concepts of dynamic lookups, named and optional arguments, Parallel LINQ (PLINQ), improved COM interop, and variance for generics. If you’re checking out this book for the first time, do understand that it's targeted at experienced software professionals and/or graduate students of computer science (so don't expect three chapters on iteration or decision constructs!). The mission of this text is to provide you with a rock-solid foundation in the C# programming language and the core aspects of the .NET platform (assemblies, remoting, Windows Forms, Web Forms, ADO.NET, XML web services, etc.). Once you digest the information presented in these 25 chapters, you’ll be in a perfect position to apply this knowledge to your specific programming assignments, and you’ll be well equipped to explore the .NET universe on your own terms. What you’ll learn Be the first to understand the .NET 4 platform and Visual C# 2010. Discover the ins and outs of the leading .NET technology. Learn from an award-winning author who has been teaching the .NET world since version 1.0. Find complete coverage of the WPF, WCF, and WF foundations that support the core .NET platform. Who this book is for This book is for anyone with some software development experience who is interested in the new .NET Framework 4 and the C# language. Whether you are moving to .NET for the first time or are already writing applications on .NET 2.0 or .NET 3.5, this book will provide you with a comprehensive grounding in the new technology and serve as a complete reference throughout your coding career. Table of Contents The Philosophy of NET Building C# Applications Core C# Programming Constructs, Part I Core C# Programming Constructs, Part II Defining Encapsulated Class Types Understanding Inheritance and Polymorphism Understanding Structured Exception Handling Understanding Object Lifetime Working with Interfaces Understanding Generics Delegates, Events, and Lambdas Advanced C# Language Features LINQ to Objects Configuring NET Assemblies Type Reflection, Late Binding, and Attribute-Based Prog Processes, AppDomains, and Object Contexts Understanding CIL and the Role of Dynamic Assemblies Dynamic Types and the Dynamic Language Runtime Multithreaded and Parallel Programming File I/O and Object Serialization ADO.NET Part I: The Connected Layer ADO.NET Part II: The Disconnected Layer ADO.NET Part III: The Entity Framework Introducing LINQ to XML Introducing Windows Communication Foundation Introducing Windows Workflow Foundation 40 Introducing Windows Presentation Foundation and XAML Programming with WPF Controls WPF Graphics Rendering Services WPF Resources, Animations, and Styles WPF Control Templates and UserControls Building ASP.NET Web Pages ASP.NET Web Controls, Master Pages and Theme ASP.NET State Management Techniques
Offers application debugging techniques for Microsoft .NET Framework and Windows, covering topics such as exception monitoring, crash handlers, and multithreaded deadlocks.
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
Anders Hejlsberg, Mads Torgersen, Scott Wiltamuth
The definitive reference to the C# Programming Language, updated for the new version 4.0, direct from its creator, Anders Hejlsberg * *New to this edition - all code presented in full color. *Contains insightful, valuable annotations from twelve leading C# programmers, available nowhere else. *C# has become the most widely used language for Windows development. *Anders Hejlsberg is the creator of C#, and a true legend among programmers. C# is now firmly established as the most-used language when writing applications for Windows and the Microsoft platform. Written by the language's architect, Anders Hejlsberg, and design team members, and now updated for C# 4.0, The C# Programming Language, 4/e, is the definitive technical reference for C#. It provides the most complete specification of the languages, along with descriptions, reference materials, and code samples from the C# design team. This edition also adds valuable notes, comments, and tips from twelve of the world's top C# programmers, including Bill Wagner, Chris Sells, Jesse Liberty, and Brad Abrams. It has been brought fully up to date with the new features of C# 4.0. And new to this edition, all the code will be presented in full color, so that it appears in the book exactly as it appears on screen. This book is a must-have for any developer using C# on a regular basis.
MSBuild is more than just a list of source files; it is a declarative programming language, and with the new features in the .Net 4.0 engine, a rather expressive language to boot. This book explores the Microsoft Build Engine used by C#, VB.Net, F# and C++ projects-the 4.0 version shipped with Visual Studio 2010-in depth and in a very practical way, full of examples not covered in the reference material (or in the other book on MSBuild). Inside you'll find: How to unify all your projects How to add help to your build How to simulate loops and data joins How to use inline C# code in project files How to enhance logging ...and over 90 additional tips and tricks, and including some extensive walkthroughs of more advanced topics, like dealing with huge projects and rolling your own tool integrations right in the IDE. You can further explore the content with code samples on the Web. So if you've ever found yourself wondering how to get MSBuild to... Perform some simple arithmetic, or a string replacement (see trick #9) Find a subset of files using a complex expression (see trick #11) Specify the folder where MSBuild.exe resides (see trick #6) Fail the build when your custom task shows an error but the build still succeeds (see trick #2) Get you a list of all the referenced assemblies in your project (see trick #72) Get Visual Studio to stop ignoring your customizations (see trick #82) Search for your customizations, without having to hardcode paths (see trick #16) Allow almost any property to be tweaked (see trick #45) Do something that seems too complex for AfterBuild (see trick #23) Extract the branch name from a path (see trick #99) And don't be put off if you're brand new to MSBuild. If you've ever so much as peeked at the XML in a C# project file, you'll be well served by this book. You'll start from first principals and the most basic mechanisms of MSBuild and the structure of an MSBuild file will be explained. Each trick is small and digestible and presented in a way that you can try out new techniques with just a few lines of MSBuild in a text file. Most of the tricks are things you can copy directly into your own build files and use that day. While many of the tricks stand on their own, the more complex ones are broken down and presented in sequences that progressively build on one another. You won't need any other book on MSBuild! But if you happen to have the other one, MSBuild Trickery will take you far beyond a reference book, providing practical guidance and preparing you for all of those truly unique gotchas that appear when the build runs. With a foreword by Dan Moseley, Microsoft Senior Development Lead for Visual Studio Project & Build.
William H. Press
Do you want easy access to the latest methods in scientific computing? This greatly expanded third edition of Numerical Recipes has it, with wider coverage than ever before, many new, expanded and updated sections, and two completely new chapters. The executable C++ code, now printed in colour for easy reading, adopts an object-oriented style particularly suited to scientific applications. Co-authored by four leading scientists from academia and industry, Numerical Recipes starts with basic mathematics and computer science and proceeds to complete, working routines. The whole book is presented in the informal, easy-to-read style that made earlier editions so popular. Highlights of the new material include: a new chapter on classification and inference, Gaussian mixture models, HMMs, hierarchical clustering, and SVMs; a new chapter on computational geometry, covering KD trees, quad- and octrees, Delaunay triangulation, and algorithms for lines, polygons, triangles, and spheres; interior point methods for linear programming; MCMC; an expanded treatment of ODEs with completely new routines; and many new statistical distributions. For support, or to subscribe to an online version, please visit www.nr.com.
Martin Fowler, Rebecca Parsons
Martin Fowler's breakthrough practitioner-oriented book on Domain Specific Languages - will do for DSLs what Fowler did for refactoring! * *Fowler's highly anticipated introduction to DSLs: a category-defining book by one of the software world's most influential authors. *Two books in one: a concise narrative that introduces DSLs, and a larger reference that shows how to plan and develop them. *Helps software professionals reduce the cost and complexity of building DSLs - so they can take full advantage of them. Domain Specific Languages (DSLs) offer immense promise for software engineers who need better, faster ways to solve problems of specific types, or in specific areas or industries. DSLs have been around for several years, and have begun to grow in popularity. Now, Martin Fowler - one of the world's most influential software engineering authors - has written the first practitioner-oriented book about them. Fowler's legendary book, Refactoring, made software refactoring a crucial tool for software engineers worldwide; this book will do the same for DSLs. Fowler has designed Domain Specific Languages as two books in one. The first --a narrative designed to be read from 'cover to cover' - offers a concise introduction to DSLs, how they are implemented, and what are useful for. Next, Fowler thoroughly introduces today's most effective techniques for building DSLs. Fowler covers both 'external' and 'internal' DSLs, a well as alternative computational models, code generation, common parser topics, and much more. He provides extensive Java and C# examples throughout, as well as selected Ruby examples for concepts that can best be explained using a dynamic language. Together, both sections enable readers to make wellinformed choices about whether to use a DSL in their work, and which techniques to employ in order to build DSLs more quickly and cost-effectively.