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
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)
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.
A quick and reliable way to build proven databases for core business functions Industry experts raved about The Data Model Resource Book when it was first published in March 1997 because it provided a simple, cost-effective way to design databases for core business functions. Len Silverston has now revised and updated the hugely successful First Edition, while adding a companion volume to take care of more specific requirements of different businesses. Each volume is accompanied by a CD-ROM, which is sold separately. Each CD-ROM provides powerful design templates discussed in the books in a ready-to-use electronic format, allowing companies and individuals to develop the databases they need at a fraction of the cost and a third of the time it would take to build them from scratch. Updating the data models from the First Edition CD-ROM, this resource allows database developers to quickly load a core set of data models and customize them to support a wide range of business functions.
Robert L. Glass
Regarding the controversial and thought-provoking assessments in this handbook, many software professionals might disagree with the authors, but all will embrace the debate. Glass identifies many of the key problems hampering success in this field. Each fact is supported by insightful discussion and detailed references.
Timothy G. Mattson, Beverly A. Sanders, Berna L. Massingill
The Parallel Programming Guide for Every Software Developer From grids and clusters to next-generation game consoles, parallel computing is going mainstream. Innovations such as Hyper-Threading Technology, HyperTransport Technology, and multicore microprocessors from IBM, Intel, and Sun are accelerating the movement's growth. Only one thing is missing: programmers with the skills to meet the soaring demand for parallel software. That's where Patterns for Parallel Programming comes in. It's the first parallel programming guide written specifically to serve working software developers, not just computer scientists. The authors introduce a complete, highly accessible pattern language that will help any experienced developer "think parallel"-and start writing effective parallel code almost immediately. Instead of formal theory, they deliver proven solutions to the challenges faced by parallel programmers, and pragmatic guidance for using today's parallel APIs in the real world. Coverage includes: Understanding the parallel computing landscape and the challenges faced by parallel developers Finding the concurrency in a software design problem and decomposing it into concurrent tasks Managing the use of data across tasks Creating an algorithm structure that effectively exploits the concurrency you've identified Connecting your algorithmic structures to the APIs needed to implement them Specific software constructs for implementing parallel programs Working with today's leading parallel programming environments: OpenMP, MPI, and Java Patterns have helped thousands of programmers master object-oriented development and other complex programming technologies. With this book, you will learn that they're the best way to master parallel programming too. 0321228111B08232004
Success on the web is measured by usage and growth. Web-based companies live or die by the ability to scale their infrastructure to accommodate increasing demand. This book is a hands-on and practical guide to planning for such growth, with many techniques and considerations to help you plan, deploy, and manage web application infrastructure. The Art of Capacity Planning is written by the manager of data operations for the world-famous photo-sharing site Flickr.com, now owned by Yahoo! John Allspaw combines personal anecdotes from many phases of Flickr's growth with insights from his colleagues in many other industries to give you solid guidelines for measuring your growth, predicting trends, and making cost-effective preparations. Topics include: Evaluating tools for measurement and deployment Capacity analysis and prediction for storage, database, and application servers Designing architectures to easily add and measure capacity Handling sudden spikes Predicting exponential and explosive growth How cloud services such as EC2 can fit into a capacity strategy In this book, Allspaw draws on years of valuable experience, starting from the days when Flickr was relatively small and had to deal with the typical growth pains and cost/performance trade-offs of a typical company with a Web presence. The advice he offers in The Art of Capacity Planning will not only help you prepare for explosive growth, it will save you tons of grief.
Martin L. Abbott, Michael T. Fisher
Overcome IT scalability problems by optimizing everything that affects scalability: architecture, processes, people, and organization • •By authors who've operated and scaled some of the world's highest-transaction volume websites - for companies including eBay and PayPal •Goes beyond covering just technology to address every issue that matters •Provides detailed models and proven approaches available in no other book. •Includes indispensable metrics, complete with actual calculations. Successful modern enterprises share two key challenges: their rapid growth often leads to business-critical technology failures, and it's difficult for them to find people with the talent and experience to fix these problems. For these enterprises, scalability is the 'holy grail.' In at eBay and PayPal cover everything IT and business leaders must know in order to build infrastructures that will scale smoothly in the face of any business challenge. Drawing on their unparalleled experience managing some of the world's highest-transaction-volume websites, the authors provide detailed models and best practice approaches for scaling any online or web services platform to meet virtually any business requirement. Unlike other books on scalability The Art of Scalability, former CTOsThe Art of Scalability doesn't limit its coverage to technology. This book covers everything that matters - architecture, processes, and organization. Replete with examples, it presents indispensable metrics - complete with actual calculations for everything from availability and capacity to load and performance. Along the way, the authors address a remarkably broad spectrum of real-world challenges, from database performance to IT governance. Using this book's tools and guidance, organizations can rethink their technology architectures to systematically overcome obstacles to scalability, and achieve unprecedented levels of technical and business performance.
Microsoft Patterns & Practices Team
Get the definitive guide on designing applications on the Microsoft application platformâ€”straight from the Microsoft patterns & practices team. Learn how to choose the most appropriate architecture and the best implementation technologies that the Microsoft application platform offers applications developers. Get critical design recommendations and guidelines organized by application typeâ€”from Web, mobile, and rich Internet applications to Office Business Applications. Youâ€™ll also get links to additional technical resources that can help with your application development.
The Art of Computer Systems Performance Analysis "At last, a welcome and needed text for computer professionals who require practical, ready-to-apply techniques for performance analysis. Highly recommended!" -Dr. Leonard Kleinrock University of California, Los Angeles "An entirely refreshing text which has just the right mixture of theory and real world practice. The book is ideal for both classroom instruction and self-study." -Dr. Raymond L. Pickholtz President, IEEE Communications Society "An extraordinarily comprehensive treatment of both theoretical and practical issues." -Dr. Jeffrey P. Buzen Internationally recognized performance analysis expert ". it is the most thorough book available to date" -Dr. Erol Gelenbe Universit? Ren? Descartes, Paris ". an extraordinary book.. A worthy addition to the bookshelf of any practicing computer or communications engineer" -Dr. Vinton G. Cer??? Chairman, ACM SIGCOMM "This is an unusual object, a textbook that one wants to sit down and peruse. The prose is clear and fluent, but more important, it is witty." -Allison Mankin The Mitre Washington Networking Center Newsletter
Edward D. Lazowska
An overview of queueing network modelling. Conducting a modelling study. Fundamental laws. General analytic technique. Bounds on performance. Models with one job class. Models with multiple job classes. Flow equivalence and hierarchical modelling. Representing specific subsystems. Memory. Disk I/O. Processors. Parameterization. Existing systems. Evolving systems. Proposed systems. Perspective. Using queueing network modelling software. Appendices. Constructing a model from RMF data. An implementation of single class, exact MVA. An implementation of multiple class, exact MVA. Load dependent service centers. Index.
Stacy Joines, Ruth Willenborg, Ken Hygh
Targeting the critical issue of performance, this guide shows how to resolve bottlenecks, increase speed, and get better overall performance for Java Websites. The author team is a group of seasoned performance experts who have helped hundreds of customers resolve enterprise Website performance issues.
Frank Buschmann, Kevlin Henney, Douglas C. Schmidt
The eagerly awaited Pattern-Oriented Software Architecture (POSA) Volume 4 is about a pattern language for distributed computing. The authors will guide you through the best practices and introduce you to key areas of building distributed software systems. POSA 4 connects many stand-alone patterns, pattern collections and pattern languages from the existing body of literature found in the POSA series. Such patterns relate to and are useful for distributed computing to a single language. The panel of experts provides you with a consistent and coherent holistic view on the craft of building distributed systems. Includes a foreword by Martin Fowler A must read for practitioners who want practical advice to develop a comprehensive language integrating patterns from key literature.
Daniel A. Menascé, Virgilio A. F. Almeida, Lawrence W. Dowdy, Larry Dowdy
Practical systems modeling: planning performance, availability, security, and more Computing systems must meet increasingly strict Quality of Service (QoS) requirements for performance, availability, security, and maintainability. To achieve these goals, designers, analysts, and capacity planners need a far more thorough understanding of QoS issues, and the implications of their decisions. Now, three leading experts present a complete, application-driven framework for understanding and estimating performance. You'll learn exactly how to map real-life systems to accurate performance models, and use those models to make better decisions--both up front and throughout the entire system lifecycle. Coverage includes: State-of-the-art quantitative analysis techniques, supported by extensive numerical examples and exercises QoS issues in requirements analysis, specification, design, development, testing, deployment, operation, and system evolution Specific scenarios, including e-Business and database services, servers, clusters, and data centers Techniques for identifying potential congestion at both software and hardware levels Performance Engineering concepts and tools Detailed solution techniques including exact and approximate MVA and Markov Chains Modeling of software contention, fork-and-join, service rate variability, and priority About the Web Site The accompanying Web site provides companion Excel workbooks that implement many of the book's algorithms and numerical examples.
The first textbook that focuses purely on Synchronization - a fundamental challenge in Computer Science that is fast becoming a major performance and design issue for concurrent programming on modern architectures, and for the design of distributed systems.