“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
Every company is a software company. Software is the future.
And software is the backbone for every organization in the digital age.
To build better software, you need to learn the principles, patterns, and practices of software engineering as well as the mindset, the skillset, and the action-set that supports it.
And in my experience, the best knowledge and know-how of great software engineering has been put into many books by many of the great leaders and legends in the software industry over the past few decades.
What Makes This List of Software Engineering Books So Special?
I’ve read a lot of software engineering books over my 25 years at Microsoft. I read a lot of software engineering books each year on a variety of software engineering topics including agile development, project management, design, patterns, architecture, security, performance… etc.
While many books are throw away as technology changes, some of the software engineering books have stood the test of time.
I continue to turn to them time and again.
They are evergreen sources of the best of what we’ve learned in the art and science of building better software.
This list is my must-read list of the best books on software engineering for any developer, project manager, software engineer, systems analyst, or team lead who wants to master their discipline and produce better software, whether that’s better apps, better systems, better frameworks, or simply better code.
The power of the best software engineering books is that they are like self-paced mentors, and they are the best short-cut for learning and getting better on the job.
This is my list of the best software engineering books of all time that I found useful on the job and helped me grow in some way, shape or form.
Top 20 Best Software Engineering Books of All Time
Here is my short list of the best-of-the-best software engineering books of all time in no particular order…
1. Agile Project Management with Kanban
by Eric Brechner
Agile Project Management with Kanban, by Eric Brechner
A very pragmatic book on how to apply Kanban to add value for customers.
2. Agile Software Development: Principles, Patterns, and Practices
by Robert Martin
Agile Principles, Patterns, and Practices in C#, by Robert Martin and Micah Martin
This book is the most comprehensive introduction and guide to Agile programming in the real world. It includes a full discussion of Agile principles, the 14 practices of eXtreme programming, full explanations of iterations, pair programming, refactoring, spiking, splitting, test-driven development, velocity, 5 types of UML diagrams, and how to use it all.
3. Clean Code: A Handbook of Agile Software Craftsmanship
by Robert Martin
Clean Code, by Robert Martin
This is a great book on how to clean up your code. It’s also an eye-opening book, especially the# chapters on functions, classes, and code smells.
4. Code Complete: A Practical Handbook of Software Construction
by Steve McConnell
Code Complete, by Steve McConnell
This must-read classic dives deeps into building better code and how to bake quality into the beginning, middle, and end of your software development projects.
5. Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
Design Patterns, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
This must-read classic shares 23 patterns that will help you tremendously improve the way you organize your code.
6. Designing Secure Software
by Loren Kohnfelder
Designing Secure Software is the must-read book on software security.
It’s a a no-nonsense book by a serious software architect and thought leader, with decades of software security under his belt with past tenures at both Microsoft and Google product teams.
It’s a deep book and yet very easy to read, with examples and stories to make software security hit home.
7. Head First Design Patterns: A Brain-Friendly Guide
by Eric Freeman, Elizabeth Robson, Kathy Sierra, and Bert Bales
Head First Design Patterns, by Eric Freeman and Elisabeth Robson
This must-read classic is a funny, simple, and yet serious guide into great programming concepts and design patterns.
8. Introduction to Algorithms
by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
Introduction to Algorithms, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
This must-read classic is a beautiful combo of comprehensive coverage and rigor. The chapters are self-contained and the algorithms are illustrated with pseudocode. The 4th edition includes 140 new exercises and 22 new problems.
9. Managing the Design Factory
by Donald Reinertsen
Managing the Design Factory, by Donald Reinertsen
A timeless classic on how to build better products by thinking in terms of product lines.
10. More Effective Agile
by Steve McConnell
More Effective Agile, by Steve McConnell
A really good drill down into the proven, modern Agile practices that work best.
11. Patterns of Enterprise Application Architecture
by Martin Fowler
Patterns of Enterprise Architecture, by Martin Fowler
A patterns book that has stood the test of time and a great walkthrough of how to think in terms of structuring Enterprise solutions.
12. Refactoring: Improving the Design of Existing Code
by Martin Fowler, Kent Beck, John Prant, William Opydyke, and Don Roberts
Refactoring, by Martin Fowler
This must-read classic is the definitive guide to “refactoring” practices to help you improve the structural integrity and performance of existing software.
13. Requirements-led Project Management
by Suzanne Robertson and James Robertson
Requirements-Led Project Management is one of the greatest books on project management in terms of walking through how to really build great products.
The visuals and the way of structuring information gave me a much better way to think more broadly, more deeply, and more holistically about leading great software projects.
It’s an evergreen classic.
14. Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle
by Ian Alexander and Niel Maiden
Scenarios, Stories, Use Cases Through the System Development Life-Cycle, by Ian Alexander and Niel Maiden
This has been one of the most interesting and enlightening books in terms of the distinctions between scenarios, stories, and use cases. I remember it was the first time where I fully appreciated the distinction between user stories and system stories.
15. Soft Skills: The Software Developer’s Life Manual
by John Sonmez
Soft Skills: The Software Developer’s Life Manual, by John Sonmez
This is really a book about taking a holistic approach to make your career and life better. It’s split into the following sections: Career, Marketing Yourself, Learning, Productivity, Finance, Fitness, Mindset.
16. Software Development Pearls: Lessons from Fifty Years of Software Experience
by Karl Wiegers
Software Development Pearls, by Karl Wiegers
This must-read classic is a collection of 60 “pearls” of wisdom from the author’s decades of experience.
The pearls are grouped into categories: requirements, design, project management, quality, culture, teamwork, and process improvement.
17. The Design of Sites
by Douglas Van Duyne, James Landay, Jason Hong
The Design of Sites is one of the most unique books on my shelf. It’s an old book, but such an incredible book with timeless lessons.
It’s pattern-based and it’s effectively an organized collections of patterns and visual examples from actual sites on the Web.
While site design has evolved, I still finding my self turning back to the early lessons from this book, and it’s given me a really big advantage in terms of site design and information modeling.
18. The Mythical Man-Month: Essays on Software Engineering
by Fred Brooks
They Mythical Man-Month, by Fred Brooks
This must-read classic walks through how “adding manpower to a late software project makes it later.”
Ultimately, it’s thoughtful guide to the structuring of work groups and of the importance of communication within and among teams working on projects.
19. The Pragmatic Programmer: From Journeyman to Master
by Andrew Hunt and Dave Thomas
The Pragmatic Programmer, by Andrew Hunt and Dave Thomas
This must-read classic is like a pattern language for how to program in a more systematic way and to continuously improve the art and science of programming.
20. Writing Effective Use Cases
by Alistair Cockburn
Writing Effective Use Cases, by Alistair Cockburn
This is probably the best book I read on the art and science of writing use cases.
I think if more people read this book, the world would see a lot more use cases written much better.
The Rest of the Best Software Engineering Books of All Time (By Category)
I’ve bought so many books over the course of my career. I haven’t listed any of the books that I haven’t found useful in some way.
The top 20 above are really a core set that help cover some of the most important aspects of becoming a better software engineering or helping improve the software engineering discipline in some way, even if indirectly or from another perspective.
Sometimes the best way to get better is to look at your discipline from another role or another discipline, or change from building it to managing it. You can then bring back a much broader view to the discipline with an appreciation for how to advance the discipline.
The rest of my list is a organized by popular topics with the realm or related to software engineering.
Again, this reflects the book that I’ve found the most useful, that I’ve used in some way, and that I am happy to recommend to others to help them in their software engineering adventures.
Best Software Engineering Books on Agile Development
- Agile Project Management: How to Succeed in the Face of Changing Project Requirements, by 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.
- Agile Software Development, Principles, Patterns, and Practices (Alan Apt Series), by Robert C. Martin. Learn how to use Agile Development for getting projects done on time, and on budget. See real-world case studies to learn how to plan, test, refactor, and pair program using eXtreme Programming. Learn how to apply UML and Design Patterns to solve customer-oriented systems problems.
- Refactoring: Improving the Design of Existing Code, , by 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 refactoring examples with tips on when to apply them, step-by-step instructions for applying each refactoring, and an example that shows how the refactoring works.
- Scaling Software Agility: Best Practices for Large Enterprises (Agile Software Development Series), by Dean Leffingwell. Learn how to apply agile methods to enterprise-class development. Learn an overview of Agile, learn seven agile team practices that scale, and learn how to achieve Enterprise agility.
Best Software Engineering Books on Career, Jobs, and Interviews
- How Would You Move Mount Fuji? Microsoft’s Cult of the Puzzle – How the World’s Smartest Company Selects the Most Creative Thinkers
by William Poundstone. Learn “puzzle interview” techniques and examples that challenge your intelligence, imagination, and problem-solving ability. - My Job Went to India: 52 Ways to Save Your Job (Pragmatic Programmers), by Chad Fowler. Learn 52 ways to keep your job, despite the changing tech landscape. Learn a decision-making process for choosing which 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 the 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.
- Programming Interviews Exposed: Secrets to Landing Your Next Job (Programmer to Programmer), by John Mongan, Noa Suojanen. Learn how to ace programming interviews. Learn how to gain critical interviewing skills, how to ask effective questions, how to best approach a problem, and what to do when you get stuck.
- Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers, by 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.
Best Software Engineering Books on Consulting
Secrets of Consulting: A Guide to Giving and Getting Advice Successfully, by Gerald M. Weinberg. Learn how to price and market your services, measure your effectiveness, and deal with client resistance. Learn memorable rules, laws, and principles for effective consulting.
Best Software Engineering Books on Software Architecture
- A Practical Guide to Enterprise Architecture (Coad Series), by 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 architecture 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), by 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), by 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.
- Software Architect Bootcamp, by Raphael Malveau, Thomas J. Mowbray, Ph.D. Learn how to choose the right architectural 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), by 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.
Best Software Engineering Books on Software Design
- Clean Architecture: A Craftsman’s Guide to Software Structure and Design, by Robert Martin. A straight-forward book to help you learn what software architects need to achieve, and the core principles, patterns, and practices for achieving it.
- Designing Software Architectures: A Practical Approach, by Humberto Cervantes and Rick Kazman. The most interesting thing about this book is that it provides a practical methodology for architecture design. The book also provides structured methods supported by reusable chunks of design knowledge, along with case studies that demonstrate how to use the methods.
- Fundamentals of Software Architecture: An Engineering Approach, by Mark Richards and Neal Ford. This is a good book for helping developers become architects. It’s a comprehensive overview of the many aspects of software architecture.
- Software Architect’s Handbook, by Joseph Ingeno. A comprehensive guide that walks you through software architecture concepts and implementing best practices.
- Software Architecture in Practice, by Len Bass, Dr Paul Clements, and Rick Kazman. This book puts a key focus on quality attributes and how to leverage proven patterns, interfaces, and practices for optimizing quality through architecture.
- Software Architecture: The Hard Parts, by Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani. A really good deep dive into the trade-offs you fave when building distributed architectures.
- The Customer-Driven Playbook, by Travis Lowdermilk, Jessica Rich. This guide shows how to adopt an end-to-end process that will help you understand customers, identify their problems, conceptualize new ideas, and create great products.
Best Software Engineering Books on Software Fundamentals
- Code Reading: The Open Source Perspective (Effective Software Development Series), Diomidis Spinellis. Learn how to identify good (and bad) code, how to read it, what to look for, and how to use the knowledge to improve your own code.
- The Best Software Writing I: Selected and Introduced by Joel Spolsky, by Joel Spolsky. Experience well-writen essays on ideas in software, edited and introduced by Joel Spolsky.
- The Pragmatic Programmer: From Journeyman to Master, by Andrew Hunt, David Thomas. Learn how to write flexible, dynamic, and adaptable code, bullet proof your code, capture real requirements, effective testing, delight your users, build teams of pragmatic programmers.
- Write Great Code: Volume 1: Understanding the Machine, by Randall Hyde. Learn the foundation upon which all great software is built. Learn how computer systems execute programs and how abstractions in programming languages map to the machine’s low-level hardware.
Best Software Engineering Books on Software Management
- Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Coad Series), by 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), by 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), by 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, by 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, by 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) – by 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, by 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, by 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), by 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.
Best Software Engineering Books on the Software Development Process
- Software Engineering: A Practitioner’s Approach, by 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, by 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.
Best Software Engineering Books on Software Monitoring
Agile Modeling: Effective Practices for Extreme Programming and the Unified Process, by Scott W. Ambler. Learn how to model on an XP project. Learn how to model to explore an issue or to facilitate communication. Learn how to write agile documents to reduce your documentation burden. Learn how to use simple modeling tools, such as index cards, and whiteboards.
Best Software Engineering Books on Software Patterns
- Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) (Sun Core Series), by Deepak Alur, John Crupi, Dan Malks. Learn the 21 patterns in the J2EE Pattern Catalog. Learn effective patterns, strategies, and refactoring. 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, by Floyd Marinescu. Learn effective 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), by 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, by 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 manageable web tier. Learn how to apply patterns to construct a reusable 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, by 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.
- Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series), by 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.
Best Software Engineering Books on Software Performance
- Code Optimization: Effective Memory Usage, by 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) by 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, by 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, by 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 anti-patterns that 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), by 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.
Best Software Engineering Books on Software Requirements
- Managing Software Requirements: A Use Case Approach (2nd Edition) (Addison-Wesley Object Technology Series), by 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, by 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, by Ian F. Alexander, Neil Maiden. Learn a rang of scenario techniques from light, sketchy and agile, to careful and systematic.
- Writing Better Requirements, by 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), by Alistair Cockburn. Learn a proven methodology for taking advantage of use cases. Learn the key elements of use cases, including actors, stakeholders, design scope, scenarios, and more. Includes a use case style guide with action steps and suggested formats. Learn time-saving use case writing tips.
Best Software Engineering Books on Software Security
- Designing Secure Software, by Loren Kohnfelder. This book is the must-read book on software security that walks you through how to design more secure software by learning the mindset and skillset from a seasoned security architect.
- How to Break Software Security, by James Whittaker, Hugh Thompson. This book walks through a tester’s perspective in terms of how to find software vulnerabilities.
- How to Break Web Software: Functional and Security Testing of Web Applications and Web Services, by Mike Andrews, James Whittaker. This book walks through a tester’s perspective in terms of how to find software vulnerabilities.
- Secure by Design, by Daniel Sawano, Dan Johnsson, and Daniel Deogun. A guide to writing secure, easy to understand code. It’s not a book about exploiting insecure code. It’s a book about using solid principles to build a more reliable and secure code base.
- Secure Coding: Principles and Practices, by Mark G. Graff, Kenneth R. van Wyk. Learn effective security principles and practices for design, coding, and operations.
- Threat Modeling: Designing for Security, by Adam Shostack. Learn how to bake security into software up front versus bolt it on later. It’s an action guide with pragmatic advice for managing threats, attacks, vulnerabilities, and countermeasures.
Best Software Engineering Books on User Experience
- About Face 2.0: The Essentials of Interaction Design, by 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.
- Inclusive Design Patterns, by Heydon Pickering. This is a good starter book for learning about the basics of web accessibility. It can also help you make the case for focusing on inclusive design in your organization.
What are your favorite software books?
You Might Also Like
Best Practices at Microsoft patterns & practices
Customer-Connected Engineering at patterns & practices
Lessons in Software Development from Alok Srivastava
Lessons in Software Development from Eric Brechner
Lessons in Software Development from James Waltezky
Lessons in Software Development from Mike de Libero
These are the Best Product Management Lessons I Learned
Nice writing. You are on my RSS reader now so I can read more from you down the road.
Allen Taylor
A very informative book, well written and read by my favorite Senator, Ted Kennedy. Web 2.0
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”
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.
Wow Corey and Anonymous — impressive lists of quality books!
Hello,
Well written & list is so impressive with good books thanks for sharing with us.