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.
Thomas H. Cormen
Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.The first edition became a widely used text in universities worldwide as well as the standard reference for professionals. The second edition featured new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming. The third edition has been revised and updated throughout. It includes two completely new chapters, on van Emde Boas trees and multithreaded algorithms, substantial additions to the chapter on recurrence (now called "Divide-and-Conquer"), and an appendix on matrices. It features improved treatment of dynamic programming and greedy algorithms and a new notion of edge-based flow in the material on flow networks. Many new exercises and problems have been added for this edition. As of the third edition, this textbook is published exclusively by the MIT Press.
Mark E. Russinovich, David A. Solomon, Alex Ionescu
See how the core components of the Windows operating system work behind the scenes--guided by a team of internationally renowned internals experts. Fully updated for Windows Server(R) 2008 and Windows Vista(R), this classic guide delivers key architectural insights on system design, debugging, performance, and support--along with hands-on experiments to experience Windows internal behavior firsthand. Delve inside Windows architecture and internals: Understand how the core system and management mechanisms work--from the object manager to services to the registry Explore internal system data structures using tools like the kernel debugger Grasp the scheduler's priority and CPU placement algorithms Go inside the Windows security model to see how it authorizes access to data Understand how Windows manages physical and virtual memory Tour the Windows networking stack from top to bottom--including APIs, protocol drivers, and network adapter drivers Troubleshoot file-system access problems and system boot problems Learn how to analyze crashes
"Offers a requirements process that saves time, eliminates rework, and leads directly to better software. A great way to build software that meets users' needs is to begin with 'user stories': simple, clear, brief descriptions of functionality that will be valuable to real users. ... [the author] provides you with a front-to-back blueprint for writing these user stories and weaving them into your development lifecycle. You'll learn what makes a great user story, and what makes a bad one. You'll discover practical ways to gather user stories, even when you can't speak with your users. Then, once you've compiled your user stories, [the author] shows how to organize them, prioritize them, and use them for planning, management, and testing"--Back cover.
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
Christian Bolton, Justin Langford, Brent Ozar, James Rowland-Jones, Jonathan Kehayias, Cindy Gross, Steven Wort
A hands-on resource for SQL Server 2008 troubleshooting methods and tools SQL Server administrators need to ensure that SQL Server remains running 24/7. Authored by leading SQL Server experts and MVPs, this book provides in-depth coverage of best practices based on a deep understanding of the internals of both SQL Server and the Windows operating system. You'll get a thorough look at the SQL Server database architecture and internals as well as Windows OS internals so that you can approach troubleshooting with a solid grasp of the total processing environment. Armed with this comprehensive understanding, readers will then learn how to use a suite of tools for troubleshooting performance problems whether they originate on the database server or operating system side. Topics Covered: SQL Server Architecture Understanding Memory SQL Server Waits and Extended Events Working with Storage CPU and Query Processing Locking and Latches Knowing Tempdb Defining Your Approach To Troubleshooting Viewing Server Performance with PerfMon and the PAL Tool Tracing SQL Server with SQL Trace and Profiler Consolidating Data Collection with SQLDiag and the PerfStats Script Introducing RML Utilities for Stress Testing and Trace File Analysis Bringing It All Together with SQL Nexus Using Management Studio Reports and the Performance Dashboard Using SQL Server Management Data Warehouse Shortcuts to Efficient Data Collection and Quick Analysis Note: CD-ROM/DVD and other supplementary materials are not included as part of eBook file.
William J. Brown
"The AntiPatterns authors have clearly been there and done that when it comes to managing software development efforts. I resonated with one insight after another, having witnessed too many wayward projects myself. The experience in this book is palpable." -John Vlissides, IBM Research "This book allows managers, architects, and developers to learn from the painful mistakes of others. The high-level AntiPatterns on software architecture are a particularly valuable contribution to software engineering. Highly recommended!" -Kyle Brown Author of The Design Patterns Smalltalk Companion "AntiPatterns continues the trend started in Design Patterns. The authors have discovered and named common problem situations resulting from poor management or architecture control, mistakes which most experienced practitioners will recognize. Should you find yourself with one of the AntiPatterns, they even provide some clues on how to get yourself out of the situation." -Gerard Meszaros, Chief Architect, Object Systems Group Are you headed into the software development mine field? Follow someone if you can, but if you're on your own-better get the map! AntiPatterns is the map. This book helps you navigate through today's dangerous software development projects. Just look at the statistics: * Nearly one-third of all software projects are cancelled. * Two-thirds of all software projects encounter cost overruns in excess of 200%. * Over 80% of all software projects are deemed failures. While patterns help you to identify and implement procedures, designs, and codes that work, AntiPatterns do the exact opposite; they let you zero-in on the development detonators, architectural tripwires, and personality booby traps that can spell doom for your project. Written by an all-star team of object-oriented systems developers, AntiPatterns identifies 40 of the most common AntiPatterns in the areas of software development, architecture, and project management. The authors then show you how to detect and defuse AntiPatterns as well as supply refactored solutions for each AntiPattern presented.
Allen Sherrod, Wendy Jones
Discover the latest and most popular technology for creating next-generation 3D games: DIRECTX 11! BEGINNING DIRECTX 11 GAME PROGRAMMING is an introductory guide to learning the basics of DirectX 11 that will help get you started on the path to 3D video game programming and development. Written specifically for the beginner programmer, this book uses step-by-step instructions to teach the basics of DirectX 11 and introduces skills that can be applied to creating games for PCs and game console platforms such as the Xbox 360. Updated for all the newest DirectX 11 technology, this book includes coverage of improved professional coding practices, an overview of the latest DirectX components and tools, sprites, text and font rendering, 3D character rendering, cameras, audio, shaders and effects, and much more. By the time you reach the end of this book, you will have had enough experience with DirectX 11 that you should be able to explore making simple video games and demos. From there, you can progress toward making more complex games and demos until you find yourself able to complete and release your own PC or console games. Important Notice: Media content referenced within the product description or the product text may not be available in the ebook version.
Haskell is a purely functional language that allows programmers to rapidly develop clear, concise, and correct software. The language has grown in popularity in recent years, both in teaching and in industry. This book is based on the author's experience of teaching Haskell for more than twenty years. All concepts are explained from first principles and no programming experience is required, making this book accessible to a broad spectrum of readers. While Part I focuses on basic concepts, Part II introduces the reader to more advanced topics. This new edition has been extensively updated and expanded to include recent and more advanced features of Haskell, new examples and exercises, selected solutions, and freely downloadable lecture slides and example code. The presentation is clean and simple, while also being fully compliant with the latest version of the language, including recent changes concerning applicative, monadic, foldable, and traversable types.
James L. Adams
We all run up against mental blocks, and there’s no better map for getting around them than Conceptual Blockbusting . This proven and popular book is packed with eye-opening exercises and original thought problems that will stretch your mind. Whether you’re a student or a teacher, an artist or an executive, you need to think flexibly and creatively.
"John Robbins has done for Windows debugging what Charles Petzold did for Windows programming." -Jeffrey Richter, author, Programming Applications for Microsoft Windows How can you prevent bugs from creeping into your programs-even before you begin writing code? What practices separate the debugging gods from the mere mortals? DEBUGGING APPLICATIONS describes a powerful, Windows-focused methodology for debugging on the offensive-starting at the requirements phase-so you catch and fix bugs at the source, before customers ever see your software. Expert bugslayer John Robbins reveals lethally effective real-world techniques for resolving just a bout any debugging problem-from memory bugs and disappearing threads to the hairiest multithreaded deadlock. * Learn the coding techniques that help you introduce fewer errors into your program and spend less time debugging * Use version control systems, bug tracking software, and other infrastructure tools to maximize product quality * Exploit the advanced debugging capabilities in the Microsoft Visual C++ and Visual Basic development systems so you debug faster and more effectively * Cushion crashes with structured exception handling and C++ exception handling * Decipher the x86 assembly language you see in the Disassembly window * Master the tools and tactics for debugging multithreaded deadlocks, cross-machine processes, multilanguage problems, Windows 2000 services and dynamic-link libraries (DLLs) that load into services, and other challenging situations Along with John's expert guidance, you also get eight of his battle-tested, professional-level utilities for solving many of the nastiest bugs you'll encounter. In all, the CD-ROM packs over 2.5 megabytes of source code to study and reuse. With DEBUGGING APPLICATIONS, you'll learn the proven practices the industry's best developers use to eradicate bugs at the source-and deliver better software faster!
James O. Coplien, Neil Harrison
This book covers the human and organizational dimension of the software improvement process and software project management - whether based on the CMM or ISO 9000 or the Rational Unified Process.
In 1984, at a start-up company in Silicon Valley, Roberta Walton, a novice software tester, discovers a bug that she brings to the attention of programmer Ethan Levin, who, obsessed with eliminating the bug, begins to unravel, while Roberta is drawn to the challenge of working with the computer, in a novel about the sometimes uneasy relationship between humans and computers. A first novel. Reprint.
This revised, cross-referenced, and thematically organized volume of selected DumpAnalysis.org blog posts targets software engineers developing and maintaining products on Windows platforms, technical support, and escalation engineers.
Jonathan Kehayias, Ted Krueger
This book describes, diagnoses, and solves the most common problems with SQL Server 2005, 2008, and 2008 R2. The authors explain a basic approach to troubleshooting and the essential tools. They explore areas in which problems arise with regularity: high disk I/O (RAID misconfiguration, inadequate I/O throughput, poor workload distribution, SAN issues, disk partition misalignment); high CPU usage (insufficient memory, poorly written queries, inadequate indexing, inappropriate configuration option settings); memory mismanagement; missing indexes; blocking (caused mainly by poorly designed databases that lack proper keys and indexing, and applications that apply needlessly restrictive transaction isolation levels); deadlocking (Bookmark Lookup, Serializable Range Scan, Cascading Constraint); full transaction logs (lack of log backups, hefty index maintenance operations, long running transaction, problems with replication and mirroring environments); and accidentally-lost data. Finally, the authors discuss diagnosing tools such as the Performance Monitor, Dynamic Management Views, and server-side tracing. --