The best software books

4 authors have picked their favorite books about software and why they recommend each book.

Soon, you will be able to filter by genre, age group, and more. Sign up here to follow our story as we build a better way to explore books.

Shepherd is reader supported. When you buy through links on our website, we may earn an affiliate commission (learn more).

Requirements by Collaboration

By Ellen Gottesdiener,

Book cover of Requirements by Collaboration: Workshops for Defining Needs

Exploring requirements is more about communication than computing. Requirements elicitation often involves discussions between business analysts and user representatives or other project stakeholders in either one-on-one discussions or group workshops. Requirements by Collaboration presents a wealth of practical tools and techniques for planning and leading requirements development workshops. It’s packed full of useful tips, checklists, questions to ask, and activities to perform to make workshops effective and successful.

I especially like Gottesdiener’s “collaboration patterns,” eight techniques that a workshop facilitator can employ to help the group achieve its objectives. The pattern called Decide How to Decide is the first one that any group of collaborators should use: exactly how will we make decisions? If you expect to lead, or even participate in, requirements workshops, read this book first.


Who am I?

Defining and managing the requirements for a software system is hard! I’ve been interested in improving how projects handle their requirements for more than 35 years. I realized how important this was when I saw how many projects—including my own—struggled and failed when they neglected to build a solid foundation of well-understood and clearly communicated requirements. I’ve personally used nearly all of the techniques described in my book Software Requirements, and I got always better results when I applied those techniques. My books, articles, training courses, presentations, and videos on requirements have been helpful to thousands of business analysts worldwide for many years.


I wrote...

Software Requirements

By Karl Wiegers, Joy Beatty,

Book cover of Software Requirements

What is my book about?

The award-winning Software Requirements is one of the most popular books in this domain. Coauthored with Joy Beatty, it comprehensively addresses the full spectrum of requirements development and management. It provides the broadest coverage of any requirements book.

This pragmatic book is based on my many years of personal experience with requirements as well as having consulted and taught at more than 100 companies. It provides dozens of practical techniques, templates, and work aids for requirements elicitation, analysis, specification, validation, and management. Many real-life stories illustrate how these techniques have been applied effectively. The topics covered also include business rules, data requirements, visual modeling, nonfunctional requirements, and requirements reuse. Other chapters address how to handle requirements on agile, enhancement, data analytics, embedded systems, outsourced, and packaged-solution projects.

User Stories Applied

By Mike Cohn,

Book cover of User Stories Applied: For Agile Software Development

Many agile projects employ user stories as a way to represent requirements rather than a more traditional approach combining use cases and functional requirements. I favor the latter approach for several reasons. Nonetheless, user stories are well established in the agile development world, and if you wish to learn about them, there’s no better author to read than Mike Cohn. Cohn describes how to craft user stories well and how they fit into the agile development process.


Who am I?

Defining and managing the requirements for a software system is hard! I’ve been interested in improving how projects handle their requirements for more than 35 years. I realized how important this was when I saw how many projects—including my own—struggled and failed when they neglected to build a solid foundation of well-understood and clearly communicated requirements. I’ve personally used nearly all of the techniques described in my book Software Requirements, and I got always better results when I applied those techniques. My books, articles, training courses, presentations, and videos on requirements have been helpful to thousands of business analysts worldwide for many years.


I wrote...

Software Requirements

By Karl Wiegers, Joy Beatty,

Book cover of Software Requirements

What is my book about?

The award-winning Software Requirements is one of the most popular books in this domain. Coauthored with Joy Beatty, it comprehensively addresses the full spectrum of requirements development and management. It provides the broadest coverage of any requirements book.

This pragmatic book is based on my many years of personal experience with requirements as well as having consulted and taught at more than 100 companies. It provides dozens of practical techniques, templates, and work aids for requirements elicitation, analysis, specification, validation, and management. Many real-life stories illustrate how these techniques have been applied effectively. The topics covered also include business rules, data requirements, visual modeling, nonfunctional requirements, and requirements reuse. Other chapters address how to handle requirements on agile, enhancement, data analytics, embedded systems, outsourced, and packaged-solution projects.

201 Principles of Software Development

By Alan M. Davis,

Book cover of 201 Principles of Software Development

Many of the most significant principles of effective software development are timeless. They’re independent of the development life cycle or model, programming language, application type, and so forth. Although this book is quite a few years old now, nearly all of its contents are still valid. The 201 principles cover the full spectrum of software engineering: general principles, requirements engineering, design, coding, testing, management, product assurance, and evolution. The descriptions of each principle are concise, whereas my 60 lessons in Software Development Pearls go into a great deal more detail and offer many practical techniques.

There’s an unfortunate tendency among young software people to disregard knowledge from the past as irrelevant to them. That’s not correct. This book can help close significant gaps in any practicing software developer’s knowledge.


Who am I?

I first learned to program in college in 1970. Since then I’ve spent much time as a software developer, manager, tester, process improvement leader, consultant, trainer, author, and, of course, a user. I quickly learned that I didn’t have time to make all the mistakes that every software developer before me had already made. My training and writing career has involved sharing what I and others have learned with audiences to help them quickly become more effective software development team members, regardless of their project role. This book distills insights and observations both from my own experience and from what I’ve heard from thousands of students and consulting clients.


I wrote...

Software Development Pearls: Lessons from Fifty Years of Software Experience

By Karl Wiegers,

Book cover of Software Development Pearls: Lessons from Fifty Years of Software Experience

What is my book about?

There’s a tremendous amount to learn about the complex business of software development. Any approach that can help you avoid mistakes and false starts is a real time saver. Also, there’s a lot more to software development than just writing code. You can struggle up all those learning curves yourself, or you can jumpstart your career by learning from others’ experiences.

I wrote Software Development Pearls to share 60 powerful insights that I’ve collected in my 50+ years of software experience about requirements, design, project management, culture and teamwork, quality, and process improvement. Each lesson describes practical techniques, many true experience stories that illustrate the lesson, and helpful guidance to let you begin applying the lesson immediately in your world.

Rapid Development

By Steve McConnell,

Book cover of Rapid Development: Taming Wild Software Schedules

One way to craft lessons learned is in the form of recommended best practices (or, as I prefer, “good practices”). Best practices represent collected and distilled wisdom from many observers, many projects, and many years of experience. Rapid Development includes 27 best practices for software development, with one chapter devoted to each. Although the book was published more than 25 years ago, most of these are still relevant. Indeed, several of them have been incorporated into routine contemporary practices: evolutionary delivery, designing for change, timebox development, and requirements scrubbing. Techniques such as inspections, miniature milestones, principled negotiation, and reuse are perennially pertinent.


Who am I?

I first learned to program in college in 1970. Since then I’ve spent much time as a software developer, manager, tester, process improvement leader, consultant, trainer, author, and, of course, a user. I quickly learned that I didn’t have time to make all the mistakes that every software developer before me had already made. My training and writing career has involved sharing what I and others have learned with audiences to help them quickly become more effective software development team members, regardless of their project role. This book distills insights and observations both from my own experience and from what I’ve heard from thousands of students and consulting clients.


I wrote...

Software Development Pearls: Lessons from Fifty Years of Software Experience

By Karl Wiegers,

Book cover of Software Development Pearls: Lessons from Fifty Years of Software Experience

What is my book about?

There’s a tremendous amount to learn about the complex business of software development. Any approach that can help you avoid mistakes and false starts is a real time saver. Also, there’s a lot more to software development than just writing code. You can struggle up all those learning curves yourself, or you can jumpstart your career by learning from others’ experiences.

I wrote Software Development Pearls to share 60 powerful insights that I’ve collected in my 50+ years of software experience about requirements, design, project management, culture and teamwork, quality, and process improvement. Each lesson describes practical techniques, many true experience stories that illustrate the lesson, and helpful guidance to let you begin applying the lesson immediately in your world.

Why Software Sucks...and What You Can Do About It

By David S. Platt,

Book cover of Why Software Sucks...and What You Can Do About It

This book changed my entire perspective on writing the UI and UX of great software. Even the revised edition is a bit old but still has many valuable lessons to teach. Platt established many of the fundamental principles of writing usable and transparent software, and his book should be read not only by designers, but perhaps especially by programmers.


Who am I?

I have been coding for over 30 years. I’ve seen some miserable interfaces, and some large programs that collapse under their own weight. Software was, at one point, notorious for being late, over budget, and unreliable. These books have helped turn the corner on these failings, and I have found each of them very valuable in my day-to-day programming. While you can learn technique and even languages online, the kind of insight found in these books is rare and worth spending time and money on.


I wrote...

Git for Programmers: Master Git for effective implementation of version control for your programming projects

By Jesse Liberty,

Book cover of Git for Programmers: Master Git for effective implementation of version control for your programming projects

What is my book about?

Git for Programmers comprehensively equips you with actionable insights on advanced Git concepts in an engaging and straightforward way. As you progress through the chapters, you'll gain expertise (and confidence) on Git with lots of practical use cases.

After a quick refresher on git history and installation, you'll dive straight into the creation and cloning of your repository. You'll explore Git places, branching, and GUIs to get familiar with the fundamentals. Then you'll learn how to handle merge conflicts, rebase, amend, interactive rebase, and use the log, as well as explore important Git commands for managing your repository. The troubleshooting part of this Git book will include detailed instructions on how to use bisect, blame, and several other problem-handling techniques that will complete your newly acquired Git arsenal.

Mastering the Requirements Process

By Suzanne Robertson, James Robertson,

Book cover of Mastering the Requirements Process: Getting Requirements Right

Suzanne and James Robertson have been writing insightful books on software requirements for many years. This book covers all the important topics, including understanding the real problem, different techniques for exploring solutions, and numerous ways to communicate requirements effectively. I especially like their treatment of quality attribute requirements and defining “fit criteria” to judge whether a solution adequately addresses them.

The book includes a comprehensive requirements specification template to guide writing a rigorous and complete specification on projects for which that is valuable. I also appreciate their use of visual models both to communicate with the reader and to guide the reader in communicating requirements to project stakeholders. I do prefer my book Software Requirements, but this is an excellent choice as well by two authorities in the field.


Who am I?

Defining and managing the requirements for a software system is hard! I’ve been interested in improving how projects handle their requirements for more than 35 years. I realized how important this was when I saw how many projects—including my own—struggled and failed when they neglected to build a solid foundation of well-understood and clearly communicated requirements. I’ve personally used nearly all of the techniques described in my book Software Requirements, and I got always better results when I applied those techniques. My books, articles, training courses, presentations, and videos on requirements have been helpful to thousands of business analysts worldwide for many years.


I wrote...

Software Requirements

By Karl Wiegers, Joy Beatty,

Book cover of Software Requirements

What is my book about?

The award-winning Software Requirements is one of the most popular books in this domain. Coauthored with Joy Beatty, it comprehensively addresses the full spectrum of requirements development and management. It provides the broadest coverage of any requirements book.

This pragmatic book is based on my many years of personal experience with requirements as well as having consulted and taught at more than 100 companies. It provides dozens of practical techniques, templates, and work aids for requirements elicitation, analysis, specification, validation, and management. Many real-life stories illustrate how these techniques have been applied effectively. The topics covered also include business rules, data requirements, visual modeling, nonfunctional requirements, and requirements reuse. Other chapters address how to handle requirements on agile, enhancement, data analytics, embedded systems, outsourced, and packaged-solution projects.

The Quest for Software Requirements

By Roxanne E. Miller,

Book cover of The Quest for Software Requirements

Most discussions about requirements focus on functionality, which is what the users most obviously observe in a software system. However, user satisfaction also depends heavily on nonfunctional requirements, such as various quality characteristics the system exhibits: usability, availability, reliability, security, scalability, maintainability, and others.

The Quest for Software Requirements is the only book that focuses on nonfunctional requirements. It provides many questions a business analyst could ask during requirements elicitation to understand the stakeholders’ expectations for those all-important quality attributes. That’s an often-neglected aspect of requirements exploration that frequently leads to deficiencies that can be expensive to correct later in development or after the product is released. This book can help you avoid those unpleasant outcomes.


Who am I?

Defining and managing the requirements for a software system is hard! I’ve been interested in improving how projects handle their requirements for more than 35 years. I realized how important this was when I saw how many projects—including my own—struggled and failed when they neglected to build a solid foundation of well-understood and clearly communicated requirements. I’ve personally used nearly all of the techniques described in my book Software Requirements, and I got always better results when I applied those techniques. My books, articles, training courses, presentations, and videos on requirements have been helpful to thousands of business analysts worldwide for many years.


I wrote...

Software Requirements

By Karl Wiegers, Joy Beatty,

Book cover of Software Requirements

What is my book about?

The award-winning Software Requirements is one of the most popular books in this domain. Coauthored with Joy Beatty, it comprehensively addresses the full spectrum of requirements development and management. It provides the broadest coverage of any requirements book.

This pragmatic book is based on my many years of personal experience with requirements as well as having consulted and taught at more than 100 companies. It provides dozens of practical techniques, templates, and work aids for requirements elicitation, analysis, specification, validation, and management. Many real-life stories illustrate how these techniques have been applied effectively. The topics covered also include business rules, data requirements, visual modeling, nonfunctional requirements, and requirements reuse. Other chapters address how to handle requirements on agile, enhancement, data analytics, embedded systems, outsourced, and packaged-solution projects.

Software Engineering at Google

By Titus Winters, Tom Manshreck, Hyrum Wright

Book cover of Software Engineering at Google: Lessons Learned from Programming Over Time

This hefty and contemporary volume provides a wealth of recommendations about how to build high-quality, large-scale software that’s intended to endure for an extended period of time. The book contains sections on culture and leadership, processes, and tools. It describes many effective practices for testing, configuration management, continuous integration and delivery, code reviews, code static analysis, and documentation. Not everyone is writing software on the scale that Google does, but the many comprehensive and specific examples in this book can be applied to nearly any software development project.


Who am I?

I first learned to program in college in 1970. Since then I’ve spent much time as a software developer, manager, tester, process improvement leader, consultant, trainer, author, and, of course, a user. I quickly learned that I didn’t have time to make all the mistakes that every software developer before me had already made. My training and writing career has involved sharing what I and others have learned with audiences to help them quickly become more effective software development team members, regardless of their project role. This book distills insights and observations both from my own experience and from what I’ve heard from thousands of students and consulting clients.


I wrote...

Software Development Pearls: Lessons from Fifty Years of Software Experience

By Karl Wiegers,

Book cover of Software Development Pearls: Lessons from Fifty Years of Software Experience

What is my book about?

There’s a tremendous amount to learn about the complex business of software development. Any approach that can help you avoid mistakes and false starts is a real time saver. Also, there’s a lot more to software development than just writing code. You can struggle up all those learning curves yourself, or you can jumpstart your career by learning from others’ experiences.

I wrote Software Development Pearls to share 60 powerful insights that I’ve collected in my 50+ years of software experience about requirements, design, project management, culture and teamwork, quality, and process improvement. Each lesson describes practical techniques, many true experience stories that illustrate the lesson, and helpful guidance to let you begin applying the lesson immediately in your world.

Computers Ltd.

By David Harel,

Book cover of Computers Ltd.: What They Really Can't Do

This book provides a brief introduction to the concept of algorithms before discussing the limitations of computation. Specifically, Harel explains undecidable problems (that is, problems for which no algorithm exists) and infeasible problems (that is, problems for which only algorithms are known that have an exponential runtime). I like this book (and its splendid title) because of its focus on the limitations of computation. Harel does a marvelous job in explaining two difficult topics about computation. The understanding of any scientific discipline requires the understanding of its limits, and the limits of computation are as significant as they are surprising.


Who am I?

I’m a professor of computer science at Oregon State University. My research focus is on programming languages, but I also work on computer science education and outreach. I grew up in Germany and moved to the United States in 2000. Since computer science is a fairly new and not widely understood discipline, I am interested in explaining its core ideas to the general public. I believe that in order to attract a more diverse set of people to the field we should emphasize that coding is only a small part of computer science.


I wrote...

Once Upon an Algorithm: How Stories Explain Computing

By Martin Erwig,

Book cover of Once Upon an Algorithm: How Stories Explain Computing

What is my book about?

According to popular culture, computer science is all about coding. This is a tragic misconception that deters many creative students from exploring the field while at the same time disappointing those that only want to code.

At its core, computer science is the science of systematic problem solving, which critically involves the design of representations and their transformations. A precisely described method for solving a problem is called an algorithm, and computation is the execution of an algorithm. My book emphasizes that everybody uses algorithms (and thus computes) all the time—often without a machine, and it explains the major topics of computer science based on everyday examples and well-known stories, without the need to learn how to code.

User Story Mapping

By Jeff Patton,

Book cover of User Story Mapping

Patton’s book is an amazing introduction to modern product management techniques, both from a practical and theoretical view. It introduces story mapping as a practical technique that you’ll be able to use immediately to start making sense of large plans and visualizing product ideas. More importantly, Patton uses this technique as an excuse to introduce readers to principles such as focusing on outcomes over outputs, working closely with users and iterative delivery, and experimentation. 

The book is a gateway drug for new product managers. It is an easy read and will get you hooked on modern ways to ensure that both users and stakeholders get value from your products. It helps people get started easily in a new role and provides a great foundation for going deeper into this field.


Who am I?

I’m a software developer turned independent software vendor, learning about product management as a way to launch more successful products. I’m a co-founder of MindMup, a popular collaboration tool used by millions of students and schoolchildren worldwide, and Narakeet, an innovative video maker for people who are not video professionals. The books from this list helped me create successful products that users love, and successfully compete with companies that have several orders of magnitude more staff and resources. 


I wrote...

Impact Mapping: Making a Big Impact with Software Products and Projects

By Gojko Adzic,

Book cover of Impact Mapping: Making a Big Impact with Software Products and Projects

What is my book about?

Impact Mapping is a wonderfully effective method for collaborative planning that helps organisations make an impact with software. Impact mapping helps to create better plans and roadmaps that ensure alignment of business and delivery, and are easily adaptable to change. 

Or, view all 19 books about software

New book lists related to software

All book lists related to software

Bookshelves related to software