Best Software Development Books



“Books are the quietest and most constant of friends; they are the most accessible and wisest of counselors, and the most patient of teachers.”— Charles William Eliot

Books are the best short-cut.

I read a lot of books each year on software development, project management, design, patterns, architecture … etc. 

While many are throw away books as technology changes, some of the books have stood the test of time–I continue to turn to them time and again. 

Here is a list of some of my favorite software development books…

General Software Development Books

  • Microsoft 2.0: How Microsoft Plans to Stay Relevant in the Post-Gates Era – (Mary Jo Foley) – This is a relatively new book in my collection.  It’s a thought proving book with insight into Microsoft’s future.  It includes thoughts on leadership, potential products, management, product development styles, licensing issues, rising stars, and business models,

Agile Development Books

Architecture Books

  • A Practical Guide to Enterprise Architecture (Coad Series) – (James McGovern, Scott W. Ambler, Michael E. Stevens, James Linn, Vikas Sharan, and Elias K. Jo) – Learn which strategies work and why for Enterprise architecture.  Learn proven product-line practices for streamlining the design of enterprise software.  Learn how to translate key business drivers into enterprise architecture output.  Learn agile architeture and modeling techniques.  Learn how to create a reusable base of core assets.  Learn how to transition to agile methods.
  • Designing Software Product Lines with UML: From Use Cases to Pattern-Based Software Architectures (Addison-Wesley Object Technology Series) – (Hassan Gommaa) – Learn product line engineering process.  Learn how to model the common and variable functionality of a product line.  Learn how to model common, optional, and alternative product line features.  Learn software architectural patterns for product lines.
  • Enterprise Architecture Using the Zachman Framework (MIS) – (O’Rourke, Fishman, Selkow) – Learn a complete introduction to the fundamental concepts of enterprise architecture.  Learn a framework that promotes holistic thinking, teamwork, individuality, and responsibility.
  • 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.
  • Software Architecture in Practice (2nd Edition) (SEI Series in Software Engineering) – (Len Bass, Paul Clements, Rick Kazman) – Learn how to perform architecture design and analysis.  Learn how to capture quality requirements and achieve them through quality scenarios and tactics.  Learn how to use architecture reconstruction to recover undocumented architectures.  Learn how to document architecture using UML. 

Career, Jobs, and Interviews Books

Consulting Books

Design Books

Fundamentals Books

Management Books

  • 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.
  • Antipatterns: Identification, Refactoring, and Management (Auerbach Series on Applied Software Engineering) – (Phillip A. Laplante, Colin J. Neill) Learn 48 bad management practices and environments common to software development, IT, and other organizations.  Learn how to correctly identify problems in your own work environment and take action to correct them.
  • 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.
  • Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers – (Steve McConnell) – Learn effective software development practices.  Learn how to create career paths for software professionals.  Learn the impact of personnel and processes.  Learn how much difference there is between the worst software companies and the best.
  • 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.
  • The Project Manager’s Pocket Survival Guide – (James P. Lewis) – Learn how to keep your projects and your career on track. Learn the nitt-gritty realities of project management as politics, personalities, motivation, teamwork, and leadership.
  • 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.

Modeling Books

Patterns Books

  • Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) (Sun Core Series) – (Deepak Alur, John Crupi, Dan Malks) Learn the 21 patterns in the J2EE Pattern Catalog.  Learn effective patterns, strategies, and refactorings.  Learn design strategies for the presentation, business, and integration tier.  Learn how to refactor to improve existing designs using patterns.
  • EJB Design Patterns: Advanced Patterns, Processes, and Idioms – (Floyd Marinescu) Learn effetive architectural, transaction, concurrency, client-side, and primary key generation patterns.  Includes a catalog of twenty advanced EJB patterns.  Learn strategies for applying the patterns, best practices for J2EE development, and useful EJB tips and techniques.
  • 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.
  • J2EE Design Patterns Applied – (Cragy A. Berry, John Carnell, Matjaz B. Juric, Meeraj Moidoo Kunnumpurath, Nadia Nashi, Sasha Romanosky) – Learn how to apply patterns to construct a robust and manageabile web tier.  Learn how to apply patterns to construct a resuable persistence framework.  Learn how to apply patterns to improve your application’s performance and scalability.  Learn how to apply patterns to manage your application’
    s security.  Learn how to apply patterns to enable enterprise integration.
  • Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML, 2nd Edition, Volume 1 – (Mark Grand) Learn seven fundamental design patterns, six creational patterns, three partitioning patterns, nine structural patterns, eleven behavioral patterns, and eleven concurrency patterns.  Includes practical, hands-on examples of pattern implementation in Java.

Performance Books

  • Code Optimization: Effective Memory Usage – (Kris Kaspersky) Learn typical mistakes.  Learn how to eliminate problems with effective patterns and practices.  Learn how to perform algorithmic optimization.
  • Concurrent Programming in Java(TM): Design Principles and Pattern (2nd Edition) (Java Series) – (Doug Lea) – Learn key concepts of concurrent programming including: confinement and synchronization, deadlocks and conflicts, state-dependent action control, asynchronous message passing, and control flow, coordinated interaction, and how to structure web-based and computational services.
  • Java 2 Performance and Idiom Guide – (Craig Larman, Rhett Gurthrie) – Learn how to optimize for speed and space.  Learn design-level optimization principles.  Learn environment and tool strategies.  Learn algorithm and data structure strategies.  Learn language and library specific optimization techniques.
  • Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software – (Connie U. Smith, Lloyd G. Williams) – Learn proactive versus reactive performance management.  Learn how to use UML for software performance engineering.  Learn how to specify key performance scenarios and performance objectives.  Learn how to construct and solve performance models.  Learn how to plan and conduct performance measurements.  Learn principles for performance-oriented design.  Learn patterns for achieving responsiveness and scalability.  Learn anitpatternsthat illustrate what not to do and how to fix a problem when you find it.  Learn effective performance tuning strategies.  Learn how to integrate software performance engineering into the life cycle.
  • Web Performance Tuning, 2nd Edition (O’Reilly Internet) – (Patrick Killelea) – Learn principles and patterns for thinking about the performance of your web site.  Includes case studies of performance problems and solutions.  Learn how to measure performance.  Learn performance tuning in depth.

Process Books

  • Software Engineering: A Practitioner’s Approach – (Roger S. Pressman, Ph.D) Learn the software process.  Learn modern analysis, design, and testing methods.  Learn how software engineering practices can be adapted to Web applications.  Learn how to plan, manage and control a software project.  Learn formal methods. cleanroom software engineering, component-based approaches, and reengineering.
  • 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 Books

  • 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.
  • Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle – (Ian F. Alexander, Neil Maiden) Learn a rang of scenario techniques from light, sketchy and agile, to careful and systematic.
  • Writing Better Requirements – (Ian F. Alexander, Richard Stevens) – Learn how to write simple, clear requirements.  Learn how to organize requirements as scenarios.  Learn how to review requirements.
  • Writing Effective Use Cases (Agile Software Development Series) – (Alistair Cockburn) – Learn a proven methodology for taking advantage of use cases.  Learn the key elements of use cases, including actors, staeholders, design scope, scenarios, and more.  Includes a use case style guide with action steps and suggested formats.  Learn time-saving use case writing tips.

Security Books

Writing Books

What are your favorite software books?


  1. Addison Wesley: Beyond Software Architecture, Continuous Integration – Improving Software Quality and Reducing Risk, Emergent Design – The Evolutionary Nature of Software Development, Refactoring to Patterns
    Artech House: A Practitioner’s Guide to Software Test Design
    Auerbach: Manage Software Testing
    ITP: Software Testing Techniques 2nd Edition
    Microsoft Press: Code Complete 2nd Edition, Software.Requirement.Patterns
    New Riders: Don’t Make Me Think!: A Common Sense Approach to Web Usability 2nd Edition
    O’Reilly: Head First Software Development, Java Power Tools, Windows Developer Power Tools
    Prentice Hall: Object Oriented Software Construction 2nd Edition, Working Effectively with Legacy Code
    Wiley: Automated Defect Prevention, Pattern Oriented Software Architecture Volumes 1-4
    Wrox: Code Leader – Using People, Tools, and Processes to Build Successful Software

    Other favorites you mentioned: Refactoring (Fowler), _all_ the ones in “Fundamentals”, Head First Design Patterns, and some of the ones listed in “Requirements”

  2. Heavens, that’s quite a list!

    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.

Comments are closed.