How we did it:
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.
Jason E. Sweat
Design patterns are comprehensive, well-tested solutions to common problems that developers everywhere encounter each day. Although designed for solving general programming issues, some of them have been successfully adapted to the specific needs of Web development.php architect's Guide to PHP Design Patterns is the first comprehensive guide to the application of design patterns to the PHP development language. Designed to satisfy the need of enterprise-strength development, you will find this book an excellent way to learn about design patterns and an irreplaceable reference for your day-to-day programming.With coverage of more than 16 different types of patterns, including Model-View-Controller, Iterator, MockObject, Register, Proxy, ActiveRecord, DataMapper and many, many others, this book is the ideal resource for your enterprise development with PHP 4 and PHP 5.* Includes over 16 design patterns* Each pattern is discussed in detail with practical code applications* Covers both PHP 4 and PHP 5* Provides a thorough test-driven approach to design patterns* Code is available online
Create a MongoDB cluster that will to grow to meet the needs of your application. With this short and concise book, you'll get guidelines for setting up and using clusters to store a large volume of data, and learn how to access the data efficiently. In the process, you'll understand how to make your application work with a distributed database system. Scaling MongoDB will help you: Set up a MongoDB cluster through sharding Work with a cluster to query and update data Operate, monitor, and backup your cluster Plan your application to deal with outages By following the advice in this book, you'll be well on your way to building and running an efficient, predictable distributed system using MongoDB.
Pramod J. Sadalage, Martin Fowler
The definitive introduction to NoSQL, the breakthrough performance and scalability solution for cloud-based database applications * *Co-authored by the legendary Martin Fowler: does for NoSQL what he did for UML in his classic UML Distilled *Presents realistic use cases and clear explanations of frequently misunderstood concepts, so developers and architects can make the most of NoSQL *Shows how NoSQL can be integrated with existing infrastructure and used to enable the cloud transition. NoSQL technologies are well-suited for many new applications where traditional RDBMSes often don't perform or scale well - including systems requiring large-scale indexing, serving pages on high-traffic websites, and heavy-duty streaming media delivery. In NoSQL Distilled, renowned software expert Martin Fowler and Thoughtworks database consultant Pramod J. Sadalage demystify NoSQL, succinctly explore the architectural and design issues associated with implementing it, and offer realistic use cases. Modeled after UML Distilled Fowler's international best-seller, NoSQL Distilled, covers all this and more: * *Evaluating which enterprise applications NoSQL is (and isn't) appropriate for. *Understanding the architectural tradeoffs associated with deploying NoSQL. *Comparing leading NoSQL offerings such as MongoDB, CouchDB, Cassandra, Riak, and Neo4J. *Integrating NoSQL with legacy systems. *Managing performance, reliability, availability, and recoverability. *Overcoming widespread misconceptions about NoSQL and its tradeoffs. *Understanding how NoSQL can support the transition to cloud-based systems. *Using NoSQL in agile development environments. *Applying NoSQL in search/retrieval, metadata management, text analysis, social networking, business intelligence, and financial services applications. *Understanding NoSQL query languages, including Object Query MDX, and XQuery and more
Whether you're building the newest and hottest social media web site or developing an internal-use-only enterprise business intelligence application, scaling your data model has never been more important. Traditional relational databases, while familiar, present significant challenges and complications when trying to scale up to such "big data" needs. Into this world steps MongoDB, a leading NoSQL database, to address these scaling challenges while also simplifying the process of development. However, in all the hype surrounding big data, many sites have launched their business on NoSQL databases without an understanding of the techniques necessary to effectively use the features of their chosen database. MongoDB Applied Design Patterns provides the much-needed connection between the features of MongoDB and the business problems that it is suited to solve. The book's focus on the practical aspects of the MongoDB implementation makes it an ideal purchase for developers charged with bringing MongoDB's scalability to bear on the particular problem you've been tasked to solve.
Kristina Chodorow, Michael Dirolf
How does MongoDB help you manage a huMONGOus amount of data collected through your web application? With this authoritative introduction, you'll learn the many advantages of using document-oriented databases, and discover why MongoDB is a reliable, high-performance system that allows for almost infinite horizontal scalability. Written by engineers from 10gen, the company that develops and supports this open source database, MongoDB: The Definitive Guide provides guidance for database developers, advanced configuration for system administrators, and an overview of the concepts and use cases for other people on your project. Learn how easy it is to handle data as self-contained JSON-style documents, rather than as records in a relational database. Explore ways that document-oriented storage will work for your project Learn how MongoDB’s schema-free data model handles documents, collections, and multiple databases Execute basic write operations, and create complex queries to find data with any criteria Use indexes, aggregation tools, and other advanced query techniques Learn about monitoring, security and authentication, backup and repair, and more Set up master-slave and automatic failover replication in MongoDB Use sharding to scale MongoDB horizontally, and learn how it impacts applications Get example applications written in Java, PHP, Python, and Ruby
This comprehensive guide book begins by explaining what makes MongoDB unique. A series of tutorials designed for MongoDB mastery then leads into detailed examples for leveraging MongoDB in e-commerce, social networking, analytics, and other common applications.
Michael Dory, Adam Parrish, Brendan Berg
Discusses how to use the Tornado server to create powerful web applications, covering how to modify templates, use persistent storage, secure applications from vulnerabilities, and authenticate applications with external services.
Basarat Ali Syed