Book description
Improve Your Creativity, Effectiveness, and Ultimately, Your Code
In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues.
Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success.
Farley’s ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. This general, durable, and pervasive approach to software engineering can help you solve problems you haven’t encountered yet, using today’s technologies and tomorrow’s. It offers you deeper insight into what you do every day, helping you create better software, faster, with more pleasure and personal fulfillment.
Clarify what you’re trying to accomplish
Choose your tools based on sensible criteria
Organize work and systems to facilitate continuing incremental progress
Evaluate your progress toward thriving systems, not just more "legacy code"
Gain more value from experimentation and empiricism
Stay in control as systems grow more complex
Achieve rigor without too much rigidity
Learn from history and experience
Distinguish "good" new software development ideas from "bad" ones
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Table of contents
- Cover Page
- About This eBook
- Praise for Modern Software Engineering
- Title Page
- Copyright Page
- Pearson’s Commitment to Diversity, Equity, and Inclusion
- Dedication
- Contents
- Foreword
- Preface
- Acknowledgments
- About the Author
-
Part I What Is Software Engineering?
- 1 Introduction
-
2 What Is Engineering?
- Production Is Not Our Problem
- Design Engineering, Not Production Engineering
- A Working Definition of Engineering
- Engineering != Code
- Why Does Engineering Matter?
- The Limits of “Craft”
- Precision and Scalability
- Managing Complexity
- Repeatability and Accuracy of Measurement
- Engineering, Creativity, and Craft
- Why What We Do Is Not Software Engineering
- Trade-Offs
- The Illusion of Progress
- The Journey from Craft to Engineering
- Craft Is Not Enough
- Time for a Rethink?
- Summary
- 3 Fundamentals of an Engineering Approach
- Part II Optimize for Learning
-
Part III Optimize for Managing Complexity
- 9 Modularity
- 10 Cohesion
- 11 Separation of Concerns
-
12 Information Hiding and Abstraction
- Abstraction or Information Hiding
- What Causes “Big Balls of Mud”?
- Organizational and Cultural Problems
- Technical Problems and Problems of Design
- Fear of Over-Engineering
- Improving Abstraction Through Testing
- Power of Abstraction
- Leaky Abstractions
- Picking Appropriate Abstractions
- Abstractions from the Problem Domain
- Abstract Accidental Complexity
- Isolate Third-Party Systems and Code
- Always Prefer to Hide Information
- Summary
-
13 Managing Coupling
- Cost of Coupling
- Scaling Up
- Microservices
- Decoupling May Mean More Code
- Loose Coupling Isn’t the Only Kind That Matters
- Prefer Loose Coupling
- How Does This Differ from Separation of Concerns?
- DRY Is Too Simplistic
- Async as a Tool for Loose Coupling
- Designing for Loose Coupling
- Loose Coupling in Human Systems
- Summary
- Part IV Tools to Support Engineering in Software
- Index
Product information
- Title: Modern Software Engineering: Doing What Works to Build Better Software Faster
- Author(s):
- Release date: December 2021
- Publisher(s): Addison-Wesley Professional
- ISBN: 9780137314942
You might also like
audiobook
Software Architecture: The Hard Parts
There are no easy decisions in software architecture. Instead, there are many hard parts-difficult problems or …
book
Software Architecture: The Hard Parts
There are no easy decisions in software architecture. Instead, there are many hard parts--difficult problems or …
book
Software Architecture Patterns, 2nd Edition
The success of any software application or system depends on the architecture style you use. This …
book
Designing Event-Driven Systems
Many forces affect software today: larger datasets, geographical disparities, complex company structures, and the growing need …