Recommendations: Building Software Systems

Last modified on March 10, 2012   About this page

Building Software Systems

Better: A Surgeon's Notes on Performance by Atul Gawande
Better: A Surgeon's Notes on Performance While Gawande stays clearly in the domain of medicine, there are lessons in this book to be learned by those working in any craft that combines technology, personal skill, and human interaction. Better is a good read for anyone seeking to understand performance and how important the individual and collaboration are in a profession one often thinks of as the being dominated by individual practitioners with highly specialized skills. What was especially interesting to me was how this book brought to mind parallels with what seems to be a vastly different practice: Software development. The stories of practice in rural India seemed to make a case for the value of "generalizing specialists," the discussion of infection prevention was an echo of the value (and difficulty) of getting a team to be disciplined in using a few simple practices. Almost every chapter found me making notes about parallels to software development. I suspect those in other fields that require both individual skills, judgement, and collaboration might find the same thing. This wasn't unexpected, as I had first read The Checklist Manifesto, but that book was explicit about the parallels. If you are interested in health care, want to understand how to apply skills more effectively, or simply just like a good story, Better is good, Gawande mixes anecdote, data, and an almost suspenseful presentation style to make what could be an academic discussion approachable and entertaining. For a more detailed review see my blog

Related books

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation This book will help you to understand that the secret to quality software, reliably deployed, is to take a cross-functional approach. You will walk away from this book with an understanding of how to start implementing a continuous deployment pipeline, and you may also find yourself writing down a list of things to try, and tools to use. While not a tool-centric book, the authors provide many examples of tools to help you implement each phase of the process. Since no one book can cover every aspect of every step in the development process, the authors point you to many excellent resources if you want to learn more. While the authors have experience in, an a pre-disposition for, Agile techniques, the principles described in this book apply to any organization, whatever the process, though if you take the approach to heart, you will find yourself becoming more agile. This book covers every aspect of the development process from requirements, design, and coding, to acceptance testing, deployment and operations. While having a lot of material, the book is well organized and written. It's not a quick read, and you'll want to have a notebook or post-its handy to capture the idea it helps you to generate, but if you are interested in improving your deployment process you will find this book valuable, whether you are a developer, tester, release engineer, or someone who manages people in those roles.

Related books

Lean Architecture: for Agile Software Development by James Coplien and Gertrud Bjørnvig
Lean Architecture: for Agile Software Development When I received my review copy of this book, I had high expections. And I was not disappointed. As a C++ programmer in the early 90's Coplien's Advanced C++ Programming Styles and Idioms was a source of interview material when looking for programmers. It's a good bet that this book may fill the same role for those looking to see if candidates for architect roles understand what it means to be an architect in a Lean or Agile Organization. This book dispels the myth that Agile and Architecture don't go together and explains the balance between Agile architecture and too much Big Up Front Design. This book emphasizes the importance of frequent collaboration between stakeholders in defining a good architecture and helps you to understand the importance of architecture to the success of agile projects. With code examples throughout, this book emphasizes that architecture and coding must go together. After describing some general principles of how architecture can add value to an agile project, the authors explain the Data Context, Interaction (DCI) architecture, which provides an framework for building lean architectures. My one minor complaint is that the transition between the general discussions of lean architecture and the focused discussion of DCI was a bit abrupt. But this was a minor distraction from an enjoyable and informative read. Rich with citations and historical context, this book will be useful for anyone who is struggling with how to build systems that need to support complicated user interactions.

Related books

Measuring and Managing Performance in Organizations by Robert D. Austin
	
    Measuring and Managing Performance in OrganizationsIf you thought that performance review processes and incentive systems are often flawed, but wanted to understand why, Austin's book will give you a model to understand dysfunctional measurement processes, and a path to understanding how to avoid the dysfunctions and really help organizations and teams perform in a way that improves quality and gives customers what they want. Though the core of this book is an economic model, the book is quite readable and enjoyable. While this book was written before many people had heard of agile or Scrum, the model in the book also helps you understand why the approach of self-organizing teams that agile methods advocate can be very effective. Many of the conclusions in this book seem like common sense, but like many things, common sense is not synonymous with common practice, especially among people want to measure things. If you manage people consider reading this book to get a deeper understanding about incentive systems in addition to Behind Closed Doors: Secrets of Great Management which will help you to learn how to effectively manage people day-to-day to improve performance

Related books

Manage Your Project Portfolio: Increase Your Capacity and Finish More Projects by Johanna Rothman
Manage Your Project Portfolio: Increase Your Capacity and Finish More ProjectsPortfolio management sounds neither compelling nor agile, yet in this book Johanna Rothman explains not only the importance of portfolio management, but also how portfolio management and agile development approaches enable each other. By a combination of guidelines, stories, and references Rothman teaches you how to define a mission, prioritize your product development plan, and enable your organization to get more done while reducing technical debt, and enhancing flexibility. This is an approachable and engaging book that will appeal to project managers, technical leads, and anyone interested in understanding how to develop and execute a consistent project strategy.

Related books

The Checklist Manifesto by Atul Gawande
The Checklist ManifestoThis is a book written by a surgeon, talking about how doctors, structural engineers, pilots and others use checklists to manage complexity and manage risk. While reading it, I kept thinking of all the things the scenarios he described has in common with software projects, and how the checklists reenforced the same values that agile software teams hold dear. Gawande illusrates how checklists help people be more creative, more productive and solve problems by allowing people to focus on the novel parts of a problem. What I especially liked was the recurring theme of how complex problems are best solved by teams and not heroic individuals, and how processes, like those guided by checklists can help foster teamwork. This is an easy to read book that helps you understand what all complex endeavors have in common, regardless of profession, and gives you one approach to managing this complexity. Read it if you want to understand how to write good checklists and use them effectively, and to address the negative perceptions colleagues have about processes and checklists.

Related books

97 Things Every Programmer Should Know by Edited by Kevlin Henney
97 Things Every Programmer Should KnowI contributed to this project, which both by the content, and the process by which it came to be, provides evidence that software development is about collaboration. craftsmanship, and careful attention to detail. This book is a chance to learn from the experiences of people who've worked hard not just at writing good code, but at creating good software systems. Some of the advice may be things you already know. Some items may be surprising. Read this book to learn, be challenged, and to understand why programming isn't just about languages and syntax.

Related books

Practices of an Agile Developer: Working in the Real World by Venkat Subramaniam and Andy Hunt
Practices of an Agile Developer: Working in the Real WorldA Pragmatic, method agnostic, guide to the essential practices for an agile team. The book covers the whole lifecycle form planning to design and coding, showing you how to balance the agile dogma with practical considerations. The book also addresses common misconceptions about agile practices. People new to agile will benefit from the book, but those who have been working using an agile method will get a lot from a fresh look at why they are using agile practices.


Implementation Patterns by Kent Beck
Implementation PatternsThe title is misleading, as the book really isn't a Patterns book, and it's not a detailed handbook. This is a good terse summary of principles to apply when writing code that others will need to work with. While the book is light on details or examples, reading it can help you consider what coding and micro design conventions to apply to make your code more readable. This is a good companion to Bob Martin's Clean Code as Martin and Beck, excellent coders both, sometimes make opposite recommendations about the same situations. These contrasts drive home the point that rules for good code need to be considered, not just accepted without thought.

Related books

Clean Code by Bob Martin
Clean CodeThe book is a great guide to the basic qualities of good code. While many of the guidelines were familiar, reading the book helped me reconsider some rules that I had followed out of habit, but which no longer make sense. Like many good books even if you know and agree what it says, reading the book can help you explain "the obvious" to others. Clean Code has all the qualities of a classic book. Bob does not just a list of rules for "good" code. He explains why following the rules makes for better code, and provides several examples of how following the rules make arguably good code (like JUnit) better. Buy this book if you write code or manage people who write code. This is a must read if you are developing a coding standard for your team. Even if you don't accept all of Bob's guidelines, reading this book will help you think about what standards make sense for your team.

Related books

Prototype and script.aculo.us: You Never Knew JavaScript Could Do This! by Christophe Porteneuve
Prototype and script.aculo.us: You Never Knew JavaScript Could Do This!This book compliments the online resources nicely, explaining not just what to do, but why, and how to do things best. This book does an excellent job of straddling the line between reference and introduction. The writing style is readable enough that you can read a few chapters just to get a sense of what to do, while at the same time, terse enough that you can find what you need quickly.


Manage It! Your Guide to Modern, Pragmatic Project Management by Johanna Rothman
Manage It! Your Guide to Modern, Pragmatic Project ManagementManage It! will help you understand how to manage projects effectively, taking into account the needs of the people working on the project as well as the needs of the business sponsors. In this regard Johanna Rothman follows in the steps of authors like Jerry Weinberg by showing you how to set up a project environment that helps software developers be more effective and thus be better able to deliver value to their customers. This book has pragmatic advice on how to make progress and issues visible, how to plan a project, and most everything else you need to help a project come to a good conclusion. This book is unique in that while it discusses the benefits of agile lifecycles, it shows you how to make progress in a variety of software lifecycles, and gives advice on when to use the various lifecycles she discusses. Buy this book if you want to be a more effective project manager (or technical lead who works with project managers), or if you want to be more agile but are not sure how.

Related books

The Inmates are Running the Asylum by Alan Cooper
The Inmates are Running the AsylumThis a classic book that anyone who build computer systems should read. Some of the specific examples are dated, though many caused me to nod in acknowledgment, especially his observations about alarm clocks and TV remotes, Inmates describes goal directed design, the concept of Pesonas, ideas which, whether they make sense for your project are not, are ones that you should be aware of. This book also explains what "polite software" is and emphasizes the market advantages to good interaction design. Even if this book doesn't change the way you work, it will help you think about the relationship between interaction design and programming. Among the interesting points Cooper makes are Customer Driven isn't aways the best model (customer influenced is better), and neither is Engineering Driven; software designers should go beyond customers say they want and help them to understand what they need. There were a few things towards the end of the book that struck me as just wrong. For example Cooper says that most developers don't believe that they are the best people to test their code. Most Agile software developers would challenge that point. Agile developers would also challenge the recurring theme that the engineering team can't make the leap to understanding the customer enough to build good interaction design. He ignores the value of a specializing generalist, which is an important concept in today's projects. Regardless, this is a book that anyone building software systems should read, if only to understand the concepts underlying interaction design.

Related books

Implementing Lean Software Development by Mary and Tom Poppendieck
Implementing Lean Software DevelopmentImplementing Lean Software Development is an essential resource if you want to understand the value of lean software development. It explains the theory of lean manaufacturing and how it applies to software development. It contains practical advice for implementing Lean and anecdotes to help you to understand the value of Lean. This is a great addition to the library of any agile developer or project manager.

Related books

Wicked Problems, Righteous Solutions by Peter DeGrace and Leslie Hulet Stahl
Wicked Problems, Righteous SolutionsA Wicked Problem is a problem where some of the solution space lies within the problem space; the problem is only fully understood after it is solved. Thsi book describes how many programming problems fall into the catgegory of wicked problems and how waterfall softwarae development practices are not well suited to these kinds of problems.This book explains how agille approaches are more suited for many software development projects. In addition to all of this, this book had many excellent references.


Continuous Integration: Improving Software Quality and Reducing Risk by Paul M Duvall
Continuous Integration: Improving Software Quality and Reducing RiskThis book is an excellent overview of why Continuous Integration is important and about more than just compiling frequently. The book helps you to understand why to do CI, what you can do beyond building, and how to do it. In addition to general principles, the book points you to some excellent tools and resources. This book is an excellent companion to Software Configuration Management Patterns; it provides teriffic information that support the build patterns in that book.

Related books

Testing Extreme Programming by Lisa Crispin and Tip House
Testing Extreme ProgrammingThis book explains, in detail, the value of having a tester role on an XP project. Much of what is written on XP focuses on the role of developers in writing tests, and this book will help you understand the value that testing professionals can add to an XP, or other agile, project. The function of a tester changes when a team applies XP; In the spirt of lean software development, this book shows you how to apply the skills of testers in a new environment. One minor flaw in the book is that it is targeted at testers. While testers need to understand how to apply their skills to an XP environment, others such as Coaches, programmers and project managers also need to understand the value of testers. Get this book to understand how testers can improve your XP project.

Related books

Working Effectively with Legacy Code by Michael Feathers
Working Effectively with Legacy CodeThis book shows you how to apply patterns and refactorings to the task of untangling legacy code so that you can apply effective techniques like test driven development as you change the code. Since there will always be legacy code, this is a very practical book. The author emphasises the role of testing as a change enabler in a way that echos the the ideas in the SCM Patterns book.

Related books

JUnit Recipes: Practical Methods for Programmer Testing by J. B. Rainsberger and Scott Stirling
JUnit Recipes: Practical Methods for Programmer TestingGet this book both as an introduction to what JUnit can do for you and also as a reference when you are looking for information on how to solve a particular testing problem. The book covers the basics of using JUnit as well as issues around database and J2EE testing. It is filled with pointers to many frameworks and resources that can simplify your testing experience. This is not just a testing cookbook. J.B. also discusses issues such as how to design for testing (and how that can improve your architecture) as well as what to do when you need to test legacy code. This is an excellent guide to the details of how to use JUnit effectively.

Related books

Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans
Domain-Driven Design: Tackling Complexity in the Heart of SoftwareDeveloping a language to enable communication between team memembers and with domain experts seems like a common enough idea. Most teams do not do this and start their application by solving technology problems. This book describes the utility of a domain-driven approach to building systems and shows you how to apply this approach effectively. This book makes excellent use of patterns to demonstrate how design, architecture and development practices such as continuous integration interact with each other to determine how good your application will be. Like all good patterns books, the information in this book seems obvious once you read it. But it is material most people overlook. Buy this books to understand the value of a domain driven approach, or if you already understand that, use it as a guide for teaching others.


Agile Project Management with Scrum by Ken Schwaber
Agile Project Management with ScrumThis book helped me understand more details about how to implement Scrum. The combines some simple overviews of Scrum rules and practices with case studies. The rules of Scrum are simple. Apply these rules in your context can be tricky. I found that the case studies that thread throughout the book really helped me to understand some of the nuances of the Scrum process. And if you want a checklist, there is a appendix that summarizes the rules of Scrum. This is a great book if you want to learn about Scrum as a project management tool, or if you have been trying to use Scrum and want a chance to renew your understanding.

Related books

Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Apps by Mike Clark
Pragmatic Project Automation: How to Build, Deploy, and Monitor Java AppsPrag Auto is an excellent companion to the Scm patterns book if you are doing Java Dev. It uses simple examples to show you how to set up a private workspace, integration build , release line among others. using open source tools. I wish that the book had referenced the patterns by name so as to set up a common vocabulary.

Related books

Pragmatic Version Control Using CVS by Dave Thomas and Andy Hunt
Pragmatic Version Control Using CVSDave Thomas and Andy Hunt have written an excellent book, Pragmatic Version Control which explains how to use CVS in a basic and effective way. This book is an excellent companion to the SCM Patterns Book.

Related books

UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition by Martin Fowler
UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third EditionThis is an excellent summary of the UML, and a great guide to how to express OO models using the UML. If you buy only one UML book, get this one. It The third edition is updated to the UML 2.0 spec. Fowler explains that the book is best for people who want to sketch UML diagrams to explain their designs, rather than who want to use UML for formally, but that may well be all you need to do with UML. This book also explains some key concepts of OO design. Every software developer should have a copy of this book on their shelves!


User Stories Applied : For Agile Software Development (Addison-Wesley Signature Series) by Mike Cohn
User Stories Applied : For Agile Software Development (Addison-Wesley Signature Series)This is an excellent guide to writing User Stories. In addition to explaining what user stories are and how to write them, the book shows you how user stories fit into the development process and answers many of the common questions that arise when one starts writing stories. If you want to start using stories as part of your development process, buy this book; you'll want to read it and have it around for reference later.


Struts in Action: Building Web Applications with the Leading Java Framework by Ted Husted, Cedric Dumoulin, George Franciscus, David Winterfeldt and Craig R. McClanahan
Struts in Action: Building Web Applications with the Leading Java FrameworkI read this book after working on Struts applications for a few months, and it added understanding to my knowledge about Struts applications. I marked many pages that illustrated approaches that I wanted to use on my projects, either because my team had problems with that aspect of Struts, or because the approach in the book seemed better. In addition to explaining how to build Struts applications, it also provides good, practical, advice about structuring your Struts applications so that they are maintainable and understandable. I refer to this book often, and it is an excellent complement to the online documentation.


Design Patterns in C# by Steven John Metsker
Design Patterns in C#This book will serve you well whether you know Patterns and are trying to learn C# or know C# and are trying to understand Patterns better. It is not a replacement for the Design Patterns Book or a good C+ reference, but it is an excellent companion for both.


Software Configuration Management Implementation Roadmap by Mario E. Moreira
Software Configuration Management Implementation RoadmapFinding the path to the right process for your project and organization is tricky, and this book provides a map of the terrain that can guide you to the implementation appropriate for your project. This book will guide you through the steps that you need to take if you need to implement an SCM process for your organization at an organization, application, or project level. It includes customizable templates and examples to more quickly get you to your SCM goals.

Related books

Joe Celko's SQL for Smarties: Advanced SQL Programming by Joe Celko
Joe Celko's SQL for Smarties: Advanced SQL ProgrammingSQL for Smarties is a book that you should own if you work with relational databases. It has good practical advice and good examples. It is useful both for improving your SQL skills and as a reference.


Questioning Extreme Programming by Pete McBreen
Questioning Extreme ProgrammingIn this book McBreen gives a well reasoned discussion of what XP is and is not, when it works and when it might not work. The book is positive about the merits of XP, when used in the right setting. This book will be valuable to anyone who is considering changing their development approach, even is they are not considering Extreme Programming. Both enthusiast and skeptics alike will find the material in the book thought provoking.

Related books

Planning Extreme Programming by Kent Beck and Martin Fowler
Planning Extreme ProgrammingPlanning Extreme Programming gives you advice on how to fit the XP Planning game, and related aspects into the larger context. This book will be particularly useful if you have had to reconcile the XP approach of incremental development and planning with an organization that takes a master plan approach.


Extreme Programming Installed by Ron Jeffries, Ann Anderson and Chet Hendrickson
Extreme Programming InstalledExtreme Programming Installed describes how to implement XP practices with practical advice based on experience. Buy this book when you are ready to implement XP for your team.

Related books

Software Architecture: Organizational Principles and Patterns by David M. Dikel, David Kane and James R. Wilson
Software Architecture: Organizational Principles and PatternsThis is one of the most useful books on software architecture that I have read. It discusses the qualities of a good architecture, and how the organization and process relates to the architecture.


Artful Making: What Managers Need to Know About How Artists Work by Rob Austin and Lee Devin
Artful Making: What Managers Need to Know About How Artists WorkThe principles that this book discusses: Release, Collaboration Ensemble and Play are extremely relevant to creating effective software teams. The principles are inspired by observing how theatre companies work, but they also have a basis in lean manufacturing. If you work as a software developer or manager and have ever worked on a theatre production (community theatre or at school) a light will go on immediately. If you haven't The data that the authors provide about lean manufacturing practices and software development will convince you that there is a lot that we can learn from this metaphor. The theatre examples will be helpful in explaining how the principles work if you need to communicate them to a manager who does not understand software development. Buy this book and place it along side your books on agile software development; you will want to read it and refer back to it frequently.

Related books

Test Driven Development: By Example by Kent Beck
Test Driven Development: By ExampleThrough examples and a collection of patterns, this book explains what test driven development is, and what it is for. Every agile developer should read this book.

Related books

Lean Software Development: An Agile Toolkit for Software Development Managers by Mary Poppendieck and Tom Poppendieck
Lean Software Development: An Agile Toolkit for Software Development ManagersThis is an excellent discussion of how the principles of Lean Manufacturing apply to Software Development. The authors explain why the usual metaphor of software as manufacturing is not quite right, and why the metaphor of Lean Manufacturing is. It is well written and will be useful to refer to as a reference.

Related books

Agile Software Development with SCRUM by Ken Schwaber and Mike Beedle
Agile Software Development with SCRUMExcellent book that explains Scrum, one of the more popular agile development techniques. The approach in this book is very pragmatic. The authors discuss what Scrum is and how to apply it in various environments.

Related books

Beyond Software Architecture: Creating and Sustaining Winning Solutions by Luke Hohmann
Beyond Software Architecture: Creating and Sustaining Winning SolutionsAll you ever wanted to know about product management, but were afraid to ask. This book discusses the relationship between technical-architecture and marketing-architecture. This is an oft-neglected subject, but it is important as marketing and technology are both important for a successful product. This is a great book to read if you design software systems, or are involved in product management.


Peopleware : Productive Projects and Teams, 2nd Ed. by Tom Demarco and Timothy Lister
Peopleware : Productive Projects and Teams, 2nd Ed.This is a classic book. Everyone involved with software systems: developers, managers, and customers, should read this book.

Related books

Patterns of Enterprise Application Architecture by Martin Fowler with David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee and Randy Stafford
Patterns of Enterprise Application ArchitectureThis book is an excellent collection of tools to have available when designing and building enterprise or web applications. This is more of a patterns collection or pattern catalog, than a pattern language, but the author ties the patterns together in a way that makes it possible to compare and contrast the various approaches. This is also a very readable book. Get a copy, skim through it to get familiar with what is there, and keep it on your shelf for ready reference.


Software Craftsmanship: The New Imperative by Pete McBreen.
Software Craftsmanship: The New ImperativeThis book discusses the differences between a craft approach and an engineering approach to building software, and the benefits of using a craft approach to build most software applications. It is a great book to read to learn how to think about your career, or how to build a software organization. This book is not about Agile Development, per se , but if you are interested in that, you should read this book too because the Agile development works best when there are people skilled in the craft of software working on the project.

Related books

Surviving Object-Oriented Projects. A Manager's Guide by Alistair Cockburn
A good overview of how a move to object technology can, and cannot effect project success. Using case studies, Alistair Cockburn describes the importance of people in the success of an OO project. He also emphasises that the move to object technology involves a different way of thinking, not just a new programming language.


Analysis Patterns by Martin Fowler.
Analysis PatternsPatterns on how to model business and systems and organizations. This book will save you from heading into a lot of dead ends if you walk into a system when you need to model a business process. A book which covers similar material, but from a database modeling point of view is Data Model Patterns by David Hay. While these are "patterns" in the more conventional sense (recurring structures, but not broken down into Problem/Context/Solution), this book will tell you a lot about database design.


Design Patterns by the "Gang of Four" (Gamma, Helm, Johnson & Vlissides).
Design PatternsThis the one book everyone who talks about patterns has should read. It collects the basic software design idioms everyone doing object-oriented software development should know.


Pattern Hatching by the John Vlissides .
Pattern HatchingUsing Design Patterns in more detail. This book discusses some of the fine points of the Patterns in Design Patterns . This is a well written book that is based on a series of columns from C++ Report . Unlike many compilations of columns, this book reads like a coherent book.


A System of Patterns by Buschmann, Meunier, Rohnert, Sommerlad, Stal.
A System of PatternsThis book has system level patterns than design patterns. It also uses a lot of examples from distributed systems.


The Pragmatic Programmer: From Journeyman to Master by
The Pragmatic Programmer: From Journeyman to MasterThis is an excellent book that explains very clearly many practical things that people often ignore. A great book to read, and one that you will want to re-read sections of from time to time.

Related books

Refactoring: Improving the Design of Existing Code by Martin Fowler
Refactoring: Improving the Design of Existing CodeThis book describes what to do to change code that has gotten messy with time, and how to proceeed to make the changes. If you've been doing Object-Oriented programming for a while you probably know much of what is in here, but it is worth reading anyway, both as a reminder, and as a way to explain the techniques to others. Fowler describes the refactorings very clearly, with guidelines on when to use each technique. Like Design Patterns, this book provides a vocabulary for the important techniques you use to change code. The examples are in Java, but the techniques can be adapted to any OO language, such as C++ quite readily.


Software for Use: A Practical Guide to the Models and Methods of Usage-Centered Design by By Larry L. Constantine and Lucy A. D. Lockwood
Software for Use: A Practical Guide to the Models and Methods of Usage-Centered DesignThis is an excellent book about how to build good interfaces. The book, at first glance, is geared towards uasbility professionals, but anyone who has a role in building or specifying systems that have some sort of user interface will benefit from reading, and referring to, this book.


Rapid Development, Taming Wild Software Schedules by Steve McConnell.
Rapid Development, Taming Wild Software SchedulesAn excellent book that describes best practices for the entire software development lifecycle. This should be required reading for anyone planning or working on a software project.

Related books

Component Software: Beyond Object-Oriented Programming by Clements Szyperski.
This is an excellent discussion about component software. It covers general issues involved in component design and distribution, including technical issues and marketing issues. It provides a good comparison of the major component technologies (COM, CORBA and Java Beans), and it also contains a good deal of timeless information. While this is not always light reading, it is very well written. This is a book developers, architects, and product managers can all read parts of!


HTTP: The Definitive Guide by David Gourley
HTTP: The Definitive GuideThis book does a great job of describing enough of what you need to know about HTTP to have a useful conversation about web architecture. It is written well enough that you can just read through it, and it also make a great resource when you need to look something up. And there is all sorts of useful reference material in the appendicies.


Designing Web Usability by Jakob Nielson
Designing Web UsabilityAn excellent book. It describes what is in an effective web sites, and provides many examples of good and bad web design. People who work with web sites at all levels: users, project managers, and people who implement web sites, will find this book incredibly useful and inspirational. Read this book before doing any work on a web site or intranet.


The XML Companion(3rd Edition) by Neil Bradley
The XML Companion(3rd Edition)The best guide and refererence to XML I've seen so far. I've had people recommend The XML Bible by Harold to me, but this book seems like a more useful reference.


The XSL Companion (2nd Edition) by Neil Bradley
The XSL Companion (2nd Edition)Like his book on XML, this book gives you enough to get started, and has enough in it to keep as a refererence.


The Invisible Computer by Donald A. Norman.
The Invisible ComputerA mix of Norman's usual excellent ideas about usability combined with the market concepts of Crossing The Chasm . An excellent book that guides us to the coming era when computers are in tools we use everyday, rather than complicated devices we need to be experts to use.


The Practice of Programming by B. W. Kernighan and R. Pike
A collection of good, time tested, ideas. The authors give examples in C++, Java, scripting languages, and C. The examples are biased towards C, but there are good general principles about design, coding, debugging and testing. Combine this book with Multi-Paradigm Design for C++ , and you will have inspiration to look at problems multiple ways before jumping in and coding.


Programming Pearls by Jon Louis Bentley
Programming PearlsThis is one of those classic books that you should read. Lots of good programming basics.


Code Complete by Steve McConnell.
This book is an excellent resource about the mechanics of coding. While some of the examples are language specific, the principles are general. You should at least skim through, if not read and own, this book at some point in your career.


Multi-Paradigm Design for C++ by Jim Coplien.
Multi-Paradigm Design for C++Coplien explains how to apply commonality and variability analysis to solve problems using all the tools at the disposal of the C++ programmer. The book shows how and when to combine the object-oriented, functional, and generic paradigms along with other tools such as patterns. The book is primarily of use to the experienced C++ developer/designer, but anyone with a interest in how software design is influenced by the application language will find the book interesting.


C++ Primer by Stanley Lippman and Josee Lajoie.
C++ PrimerThis is an excellent book to introduce someone to C++ with. I've recommended the previous editions to people, with much success. The third edition is updated for the standard, and includes information on the standard library, STL, etc. This book is much more approachable to Stroustrup's The C++ Programming Language 2nd Edition . I'd buy this book first, and then the The C++ Programming Language . They both should be part of a C++ developer's library.


Effective C++ Second Edition by Scott Meyers.
Effective C++ Second EditionThis book and More Effective C++ list many of the idioms a serious C++ programer should know.


The Design and Evolution of C++ by Bjarne Stroustrup.
This book discusses some of the history of C++. It will help you understand why some of the parts of the C++ Language that seem broken are in the language. (Hint: most have to do with compatability with C.)