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.
This volume is a handbook for enterprise system developers, guiding them through the intricacies and lessons learned in enterprise application development. It provides proven solutions to the everyday problems facing information systems developers.
Gregor Hohpe, Bobby Woolf
Would you like to use a consistent visual notation for drawing integration solutions? "Look inside the front cover." Do you want to harness the power of asynchronous systems without getting caught in the pitfalls? "See "Thinking Asynchronously" in the Introduction." Do you want to know which style of application integration is best for your purposes? "See Chapter 2, Integration Styles." Do you want to learn techniques for processing messages concurrently? "See Chapter 10, Competing Consumers and Message Dispatcher." Do you want to learn how you can track asynchronous messages as they flow across distributed systems? "See Chapter 11, Message History and Message Store." Do you want to understand how a system designed using integration patterns can be implemented using Java Web services, .NET message queuing, and a TIBCO-based publish-subscribe architecture? "See Chapter 9, Interlude: Composed Messaging." Utilizing years of practical experience, seasoned experts Gregor Hohpe and Bobby Woolf show how asynchronous messaging has proven to be the best strategy for enterprise integration success. However, building and deploying messaging solutions presents a number of problems for developers. " Enterprise Integration Patterns " provides an invaluable catalog of sixty-five patterns, with real-world solutions that demonstrate the formidable of messaging and help you to design effective messaging solutions for your enterprise. The authors also include examples covering a variety of different integration technologies, such as JMS, MSMQ, TIBCO ActiveEnterprise, Microsoft BizTalk, SOAP, and XSL. A case study describing a bond trading system illustrates the patterns in practice, and the book offers a look at emerging standards, as well as insights into what the future of enterprise integration might hold. This book provides a consistent vocabulary and visual notation framework to describe large-scale integration solutions across many technologies. It also explores in detail the advantages and limitations of asynchronous messaging architectures. The authors present practical advice on designing code that connects an application to a messaging system, and provide extensive information to help you determine when to send a message, how to route it to the proper destination, and how to monitor the health of a messaging system. If you want to know how to manage, monitor, and maintain a messaging system once it is in use, get this book. 0321200683B09122003
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
Andrew S. Tanenbaum
The widely anticipated revision of this worldwide best-seller incorporates the latest developments in operating systems technologies. The Third Edition includes up-to-date materials on relevant operating systems such as Linux, Windows, and embedded real-time and multimedia systems. Includes new and updated coverage of multimedia operating systems, multiprocessors, virtual machines, and antivirus software. Covers internal workings of Windows Vista (Ch. 11); unique even for current publications. Provides information on current research based Tanenbaum's experiences as an operating systems researcher. A useful reference for programmers.
Maurice J. Bach
This is the first, and still, the most comprehensive book to describe the sophisticated workings of the UNIX System V kernel--the internal algorithms, the structures that form the basis of the UNIX operating system, and their relationship to the programming interface. System programmers will gain a better understanding of how the kernel works and will be able to compare algorithms used in the UNIX system to algorithms used in other operating systems. Programmers on UNIX systems will gain a deeper understanding of how their programs interact with the system and can thereby code more efficient programs.
Gayle Laakmann McDowell
Now in the 5th edition, the book gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book includes 150 programming interview questions and answers, as well as other advice.
Ken Schwaber, Mike Beedle
Arguably the most important book about managing technology and systems development efforts, this book describes building systems using the deceptively simple process, Scrum. Readers will come to understand a new approach to systems development projects that cuts through the complexity and ambiguity of complex, emergent requirements and unstable technology to iteratively and quickly produce quality software. BENEFITS Learn how to immediately start producing software incrementally regardless of existing engineering practices or methodologies Learn how to simplify the implementation of Agile processes Learn how to simplify XP implementation through a Scrum wrapper Learn why Agile processes work and how to manage them Understand the theoretical underpinnings of Agile processes
Abraham Silberschatz, Peter B. Galvin, Greg Gagne
Operating System Concepts, now in its ninth edition, continues to provide a solid theoretical foundation for understanding operating systems. The ninth edition has been thoroughly updated to include contemporary examples of how operating systems function. The text includes content to bridge the gap between concepts and actual implementations. End-of-chapter problems, exercises, review questions, and programming exercises help to further reinforce important concepts. A new Virtual Machine provides interactive exercises to help engage students with the material.
W. Richard Stevens
Bestselling UNIX author Stevens offers application and system programmers his professional, experienced-based guidance on using the system call interface with C. Since good examples are the key to a book like this, a simple shell program is developed in the first chapter and then expanded throughout the book to demonstrate the principles.
Joel Spolsky began his legendary web log, www.joelonsoftware.com, in March 2000, in order to offer insights for improving the world of programming. Spolsky based these observations on years of personal experience. The result just a handful of years later? Spolsky's technical knowledge, caustic wit, and extraordinary writing skills have earned him status as a programming guru! His blog has become renowned throughout the programming worldnow linked to more than 600 websites and translated into over 30 languages. Joel on Software covers every conceivable aspect of software programming—from the best way to write code, to the best way to design an office in which to write code! All programmers, all people who want to enhance their knowledge of programmers, and all who are trying to manage programmers will surely relate to Joel's musings. Table of Contents Choosing a Language Back to Basics The Joel Test: 12 Steps to Better Code The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) Painless Functional Specifications Part 1: Why Bother? Painless Functional Specifications Part 2: What’s a Spec? Painless Functional Specifications Part 3: But . . . How? Painless Functional Specifications Part 4: Tips Painless Software Schedules Daily Builds Are Your Friend Hard-Assed Bug Fixin’ Five Worlds Paper Prototyping Don’t Let Architecture Astronauts Scare You Fire and Motion Craftsmanship Three Wrong Ideas from Computer Science Biculturalism Get Crash Reports From Users—Automatically! The Guerilla Guide to Interviewing Incentive Pay Considered Harmful Top Five (Wrong) Reasons You Don’t Have Testers Human Task Switches Considered Harmful Things You Should Never Do, Part One The Iceberg Secret, Revealed The Law of Leaky Abstractions Lord Palmerston on Programming Measurement Rick Chapman Is In Search of Stupidity What Is the Work of Dogs in This Country? Getting Things Done When You’re Only a Grunt Two Stories Big Macs vs. The Naked Chef Nothing Is As Simple As It Seems In Defense of Not-Invented-Here Syndrome Strategy Letter I: Ben & Jerry’s vs. Amazon Strategy Letter II: Chicken-and-Egg Problems Strategy Letter III: Let Me Go Back! Strategy Letter IV: Bloatware and the 80/20 Myth Strategy Letter V: The Economics of Open Source A Week of Murphy’s Law Gone Wild How Microsoft Lost the API War Microsoft Goes Bonkers Our .NET Strategy Please Sir May I Have a Linker?
Watts S. Humphrey
"This book describes the PSP and is the definitive guide and reference for its latest iteration. PSP training focuses on the skills required by individual software engineers to improve their personal performance. Once learned and effectively applied, PSP-trained engineers are qualified to participate on a team using the Team Software Process (TSP), the methods for which are described in the final chapter of the book. The goal for both PSP and TSP is to give developers exactly what they need to deliver quality products on predictable schedules"--publisher website.
Stephen H. Kan
Seven new chapters and exhaustive coverage of process improvement, testing, and quality assurance bulk up this new edition. The book contains numerous real-life examples based on the author's work at the Malcolm Baldrige Award-winning software development laboratory at IBM Rochester, MN.
Watts S. Humphrey
This book demonstrates how to solve complex scientific problems with software that runs on high-performance computers, principally massively parallel computers (both SIMD and MIMD), as well as vector, superscalar, and superpipelined computers. Using case studies from a variety of problem domains-each one written by an expert-the book shows how to develop appropriate algorithms and evaluate resulting implementations in order to transform abstract problems into concrete solutions that execute rapidly and efficiently on these computers.
Peter Coad, Eric Lefebvre, Jeff De Luca
"Java Modeling in Color with UML: Enterprise Components and Process" is the first book to teach software design in color. Coad and his co-authors use four colors to represent four archetypes-little forms that appear again and again in effective component and object models. Given a color, you'll know the kind of attributes, links, methods, and interactions that particular class is likely to have. You develop little color building blocks that will help you build better models and get the recognition you deserve. Color and archetypes are only the beginning. Coad and his co-authors go further, plugging those archetypes into a 12-class, domain-neutral component. Every model Coad has built over the past decade follows the basic shape and responsibilities expressed in this one component. Coad and his co-authors go even further, taking the domain-neutral component and applying it in a wide variety of business areas. So you end up with specific examples for your business, examples you can relate to, readily understand, and benefit from. "Java Modeling in Color with UML: Enterprise Components and Process" delivers 61 components, 283 classes, 46 interfaces, 671 attributes, 1139 methods, and 65 interaction sequences. On top of all of this, Coad, Lefebvre, and De Luca present "Feature-Driven Development (FDD)," the process for getting the most out of your Java modeling and development, delivering frequent, tangible, working results on time and within budget. "This book brings a new dimension to the effective use of the UML, by showing you how to apply archetypes in color to enrich the content of your models.--Grady Booch, "Chief Scientist, Rational Software Corporation" "Iwent for a job interview. The interviewer asked me to model a payroll system and gave me an hour to work it out while he observed. So I built a model using pink moment-intervals, yellow roles, green things, and blue descriptions-classes, attributes, links, methods, interactions. After 25 minutes the interviewer stopped me, saying I had already gone well beyond what others struggle to do in a full hour! So my recommendation is: read this book! It's made a better modeler out of me and I'm sure it will do the same for you." --David Anderson, "Modeler and Designer, www.uidesign.net" The CD includes all of the component models and skeletal Java source code in the book, along with "Together/J Whiteboard Edition" for modeling in color. www.togetherj.com
Managed Code Rootkits is the first book to cover application-level rootkits and other types of malware inside the application VM, which runs a platform-independent programming environment for processes. The book, divided into four parts, points out high-level attacks, which are developed in intermediate language. The initial part of the book offers an overview of managed code rootkits. It explores environment models of managed code and the relationship of managed code to rootkits by studying how they use application VMs. It also discusses attackers of managed code rootkits and various attack scenarios. The second part of the book covers the development of managed code rootkits, starting with the tools used in producing managed code rootkits through their deployment. The next part focuses on countermeasures that can possibly be used against managed code rootkits, including technical solutions, prevention, detection, and response tactics. The book concludes by presenting techniques that are somehow similar to managed code rootkits, which can be used in solving problems. Named a 2011 Best Hacking and Pen Testing Book by InfoSec Reviews Introduces the reader briefly to managed code environments and rootkits in general Completely details a new type of rootkit hiding in the application level and demonstrates how a hacker can change language runtime implementation Focuses on managed code including Java, .NET, Android Dalvik and reviews malware development scanarios
Gary J. Nutt
Operating Systems, Third Edition has become a market leader by striking a balance between introducing the basic principles and putting examples from Linux, UNIX, and Windows into practice. The book promotes an understanding of contemporary operating system concepts and how they are applied today. For the third edition Gary Nutt has enhanced his vision with even more breadth to his coverage of operating system principles and even more opportunities for readers to see and work with real-world examples.