My Favorite Software Books

I cycle through a lot of books each year on software development, project management, design, patterns, architecture … etc. While many are throw aways, some of the books have stood the test of time. I continue to turn to them time and again. Here’s a list of my favorite software books::

Agile Project Management: How to Succeed in the Face of Changing Project Requirements – (Gary Chin) – Learn practical strategies for taking charge of crucial but unpredictable projects. Lear how to develop a strong and supportive project management infrastructure and culture. Learn how to improve communication between project teams and business decision-makers. Learn how to improve the productivity of fast-paced projects without increasing risk.

Refactoring: Improving the Design of Existing Code (Addison-Wesley Object Technology Series) – (Martin Fowler) – Learn expert techniques to improve the structural integrity and performance of existing software. Learn how to take a bad design and rework it into well-designed, robust code. Provides a detailed catalog of more than seventy proven refactorings with tips on when to apply them, step-by-step instructions for applying each refactoring, and an example that shows how the refactoring works.

Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) – (Martin Fowler) – Learn how to divide an application into layers. Learn the major approaches for organizing business logic. Learn how to map between objects and relational databases. Learn how to use Model-View-Controller. Learn how to handle concurrency for data that spans multiple transactions. Learn how to design distributed object interfaces.

Software Architect Bootcamp – (Raphael Malveau, Thomas J. Mowbray, Ph.D.) – Learn how to choose the right architetural model for your project. Learn how to manage complexity, scalability, reliability, security, latency, and flexibility. Learn how to make the most of abstraction, refactoring, and architectural prototyping. Leverage proven design patterns and anti-patterns. Learn effective prototyping, business-case development, and project leadership. Learn how to manage your own career as a software architect.

About Face 2.0: The Essentials of Interaction Design – (Alan Cooper, Robert Reimann) – Learn Goal-Directed Design, how to design behavior and form, how to apply visual design principles, effective user interaction, and how to communicate with users effectively.

My Job Went to India: 52 Ways to Save Your Job (Pragmatic Programmers) – (Chad Fowler) – Learn 52 ways to keep your job, despite the changing tech landscape. Learn a decision-making process for choosing wich technologies to focus on and which business domains to master so that you invest your time and energy in the right areas. Learn how to develop a structured plan for keeping your skills up-to-date so that you can complete with both the growing stable of developers in so-called low-cost countries as well as your higher-priced local peers. Learn how to shift your skillset up thte value chain, from an offshore-ready commodity to one in high demand. Learn how to market yourself both inside your company and to the industry in general.

Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Coad Series) – (David J. Anderson) Learn how to develop management disciplines for all phases of the engineering process, implement realistic financial and production metrics, and focus on building software the delivers maximum customer value and outstanding business results. Learn how to make the business case for agile methods. Learn how to choose an agile method for your next project. Learn how to apply Critical Chain Project Management and constraint-driven control of the flow of value.

How to Run Successful Projects III: The Silver Bullet (3rd Edition) – (Fergus O’Connell) Learn the Ten Steps of Structured Project Management. Learn how to do the least amount of project management possible and still be sure of a successful outcome. Learn how to identify and monitor your project’s vital signs. Learn a quick and easy way to assess project plans and proposals so you can catch potential disasters before they happen. Learn daily, weekly, and monthly routines.

Managing the Design Factory – (Donald G. Reinertsen) Learn a methodical approach to consistently hit the “sweet spot” of quality, cost, and time in developing any system. Combines the powerful analytic tools of queuing, information, and system theories with the proven ideas of organization design and risk management.

Software Architecture: Organizational Principles and Patterns (Software Architecture Series) – (David M. Dikel, David Kane, James R. Wilson) Learn how to establish product-line architectural frameworks and vision that managers, administrators, and developers can buy into. Learn how to implement architectures that anticipate and predict change, and can easily adapt to new business requirements. Learn how to address the organizational issues that make or break enterprise software architectures.

Successful Project Management – (Gido, Clements) Learn the essential concepts and processes to work successfully in a project management environment. Learn how to organize and manage effective project teams. Learn how to document and communicate project developments within and outside the team.

Under Pressure and On Time (Pro-Best Practices) – (Ed Sullivan) – Learn practical strategies and a proven model for developing great teams and world-class software. Learn how to recruit, interview, and retain the right people, build the right organizational structure, and create the right corporate culture for a great software-development effort. Learn how to acquire the best development tools and establish the correct processes for quality assurance and release engineering. Learn how to manage the relationship between your requirements, usability model, technology foundation, and schedule.

Head First Design Patterns (Head First) – (Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates) Learn the patterns that matter, when to use them and why, how to apply them to your own designs, when not to use them, and OO design principles that patterns are based.

Software Engineering Processes: With the UPEDU – (Pierre N. Robillard, Philippe Kruchten) Learn the essentials of the software development process. Learn the methods, tools, and concepts of the software life cycle. Learn the core engineering and management disciplines. Learn the quality aspects of the software process. Learn a software process metamodel that is the a theoretical foundation for any software process.

Requirements

Managing Software Requirements: A Use Case Approach (2nd Edition) (Addison-Wesley Object Technology Series) – (Dean Leffingwell, Don Widrig) Learn the five steps in problem analysis. Learn business modeling and system engineering. Learn techniques for eliciting requirements from customers and stakeholders. Learn how to establish and manage project scope. Learn how to apply and refine use cases. Learn product management. Learn how to transition from requirements to design and implementation. Learn how to transition from use cases to test cases. Learn agile requirement methods.

Mastering the Requirements Process (2nd Edition) – (Suzanne Robertson, James Robertson) – Learn the requirements process. Learn how to bring rigor, traceability, and completeness to requirements. Includes checklists to help identify stakeholders, users, non-functional requirements, and more. Learn how to exploit use cases to determine the best product to build. Learn how to reuse requirements and requirement patterns.

Requirements-Led Project Management: Discovering David’s Slingshot – (Suzanne Robertson, James Robertson) Learn how to use requirements as input to project planning and decision-making. Learn how to determine whether to invest in a project. Learn how to deliver more appropriate products with a quick cycle time. Learn how to measure and estimate the requirements effort. Learn how to define the most effective requirements process for a project. Learn how to set requirements priorities. Learn how to manage requirements across multiple domains and technologies. Learn how to use requirements to communicate across business and technological boundaries.

[...] patterns & practices team, at large, but I thought I would help bootstrap by creating a list of my favorite software books. The list includes the books that I continue to mine for principles, patterns, and practices [...]

Object-Oriented Software Construction, Bertrand Meyer : I liked Test-Driven Development a lot more when it was called Design by Contract.A Discipline of Programming, E.W. Dijkstra : I liked Test-Driven Development a lot more when it was called Correctness by Construction.Structure and Interpretation of Computer Programming, Abelson and Sussman : The “Art of Electronics” of computer programs.Introduction to Database Systems, C.J. Date : Just because SQL is a steaming pile of dung doesn’t mean the relational theory is obsolete.Design Patterns, GO4 : Possibly the most widely misunderstood software book of the 1990′s.Refactoring, Martin Fowler: Before he jumped the Agile shark.Introduction to General Systems Thinking, Jerry Weinberg : Try not to confuse your tools and models with reality.Total Design, Stuart Pugh : Cross-functional evolutionary feature teams…from the 1980′s.Axiomatic Design, Nam Suh : Design decisions are a consequence of functional requirements. Functional requirements are a consequence of design decisions. We’re going to need a rigorous theory of design to make sense of this.Lean Thinking, Womack and Jones : Any work that has a sequence of activities can be made to flow.Managing the Design Factory, Don Reinertsen : Seminal interpretation of lean thinking for product development.The Mythical Man-Month, Fred Brooks : Interpersonal communication is what makes software development hard.Rapid Development, Steve McConnell : You mean there’s more than one way to do it…who knew?Principles of Software Engineering Management, Tom Gilb : I liked Agile better when it was called Evolutionary Delivery.Pragmatic Programmer, Hunt and Thomas : Pragmatism! Imagine that.Software by Numbers, Denne and Huang : Incremental delivery is less risky AND more profitable.