Cart

Modern Software Engineering: Doing What Works to Build Better Software Faster, 1st edition

BRAND: PEARSON

Publisher:PearsoAddison-Wesley Professional n
Author: David Farley 
Edition: (December 10, 2021) © 2022
eBook ISBN:9780137314867
Print ISBN: 9780137314911
Type: 1 Year Subscription. Dành cho Cá nhân 

eBook edition. 1 Year Subscription. Dành cho Cá nhân  |  Trường ĐH, Nhóm, Thư Viện: Gọi 0915920514 để báo giá Pearson, Vital Source eBook hoặc mua Sách In  

Số lượng:
Tổng tiền:
Giá có thể thay đổi bất kỳ khi nào.
Thời hạn giao hàng: 03 ngày làm việc với sách eBook và 30 ngày với sách In. Gọi để được Tư vấn Giáo Trình.

Mô tả sản phẩm


Viết cho sinh viên ở mọi cấp độ kinh nghiệm, Farley làm sáng tỏ những nguyên tắc bền vững cốt lõi của việc phát triển phần mềm hiệu quả. Ông chắt lọc nguyên tắc này thành hai bài tập cốt lõi: thứ nhất, học tập và khám phá, và thứ hai, quản lý sự phức tạp. Đối với mỗi lĩnh vực, ông xác định các nguyên tắc có thể giúp sinh viên cải thiện mọi thứ, từ tư duy đến chất lượng mã, đồng thời mô tả các phương pháp đã được chứng minh là có thể thúc đẩy thành công.
 

Các ý tưởng và kỹ thuật của Farley gắn kết thành một cách tiếp cận thống nhất, khoa học và nền tảng để giải quyết các vấn đề phát triển phần mềm thực tế trong những hạn chế kinh tế thực tế. Cách tiếp cận chung, bền vững và phổ biến này đối với công nghệ phần mềm có thể giúp sinh viên giải quyết các vấn đề mà họ chưa gặp phải bằng cách sử dụng các công nghệ ngày nay và ngày mai. Nó cung cấp cho sinh viên cái nhìn sâu sắc hơn về những gì họ làm hàng ngày, giúp họ tạo ra phần mềm tốt hơn, nhanh hơn, mang lại nhiều niềm vui và thỏa mãn cá nhân hơn.

 

Foreword xvii
Preface xxi
Acknowledgments xxv
About the Author xxvii


Part I: What Is Software Engineering? 1


Chapter 1: Introduction 3

Engineering--The Practical Application of Science 3
What Is Software Engineering? 4
Reclaiming "Software Engineering" 5
The Birth of Software Engineering 7
Shifting the Paradigm 8
Summary 9

Chapter 2: What Is Engineering? 11

Production Is Not Our Problem 11
Design Engineering, Not Production Engineering 12
A Working Definition of Engineering 17
Engineering != Code 17
Why Does Engineering Matter? 19
The Limits of "Craft" 19
Precision and Scalability 20
Managing Complexity 21
Repeatability and Accuracy of Measurement 22
Engineering, Creativity, and Craft 24
Why What We Do Is Not Software Engineering 25
Trade-Offs 26
The Illusion of Progress 26
The Journey from Craft to Engineering 27
Craft Is Not Enough 28
Time for a Rethink? 28
Summary 30

Chapter 3: Fundamentals of an Engineering Approach 31

An Industry of Change? 31
The Importance of Measurement 32
Applying Stability and Throughput 34
The Foundations of a Software Engineering Discipline 36
Experts at Learning 36
Experts at Managing Complexity 37
Summary 38

Part II: Optimize for Learning 41


Chapter 4: Working Iteratively 43

Practical Advantages of Working Iteratively 45
Iteration as a Defensive Design Strategy 46
The Lure of the Plan 48
Practicalities of Working Iteratively 54
Summary 55

Chapter 5: Feedback 57

A Practical Example of the Importance of Feedback 58
Feedback in Coding 60
Feedback in Integration 61
Feedback in Design 63
Feedback in Architecture 65
Prefer Early Feedback 67
Feedback in Product Design 68
Feedback in Organization and Culture 68
Summary 70

Chapter 6: Incrementalism 71

Importance of Modularity 72
Organizational Incrementalism 73
Tools of Incrementalism 74
Limiting the Impact of Change 76
Incremental Design 77
Summary 79

Chapter 7: Empiricism 81

Grounded in Reality 82
Separating Empirical from Experimental 82
"I Know That Bug!" 82
Avoiding Self-Deception 84
Inventing a Reality to Suit Our Argument 85
Guided by Reality 88
Summary 89

Chapter 8: Being Experimental 91

What Does "Being Experimental" Mean? 92
Feedback 93
Hypothesis 94
Measurement 95
Controlling the Variables 96
Automated Testing as Experiments 97
Putting the Experimental Results of Testing into Context 98
Scope of an Experiment 100
Summary 100

Part III: Optimize for Managing Complexity 103


Chapter 9: Modularity 105

Hallmarks of Modularity 106
Undervaluing the Importance of Good Design 107
The Importance of Testability 108
Designing for Testability Improves Modularity 109
Services and Modularity 115
Deployability and Modularity 116
Modularity at Different Scales 118
Modularity in Human Systems 118
Summary 120

Chapter 10: Cohesion 121

Modularity and Cohesion: Fundamentals of Design 121
A Basic Reduction in Cohesion 122
Context Matters 125
High-Performance Software 128
Link to Coupling 129
Driving High Cohesion with TDD 129
How to Achieve Cohesive Software 130
Costs of Poor Cohesion 132
Cohesion in Human Systems 133
Summary 133

Chapter 11: Separation of Concerns 135

Dependency Injection 139
Separating Essential and Accidental Complexity 139
Importance of DDD 142
Testability 144
Ports & Adapters 145
When to Adopt Ports & Adapters 147
What Is an API? 148
Using TDD to Drive Separation of Concerns 149
Summary 150

Chapter 12: Information Hiding and Abstraction 151

Abstraction or Information Hiding 151
What Causes "Big Balls of Mud"? 152
Organizational and Cultural Problems 152
Technical Problems and Problems of Design 154
Fear of Over-Engineering 157
Improving Abstraction Through Testing 159
Power of Abstraction 160
Leaky Abstractions 162
Picking Appropriate Abstractions 163
Abstractions from the Problem Domain 165
Abstract Accidental Complexity 166
Isolate Third-Party Systems and Code 168
Always Prefer to Hide Information 169
Summary 170

Chapter 13: Managing Coupling 171

Cost of Coupling 171
Scaling Up 172
Microservices 173
Decoupling May Mean More Code 175
Loose Coupling Isn't the Only Kind That Matters 176
Prefer Loose Coupling 177
How Does This Differ from Separation of Concerns? 178
DRY Is Too Simplistic 179
Async as a Tool for Loose Coupling 180
Designing for Loose Coupling 182
Loose Coupling in Human Systems 182
Summary 184

Part IV: Tools to Support Engineering in Software 185


Chapter 14: The Tools of an Engineering Discipline 187

What Is Software Development? 188
Testability as a Tool 189
Measurement Points 192
Problems with Achieving Testability 193
How to Improve Testability 196
Deployability 197
Speed 199
Controlling the Variables 200
Continuous Delivery 201
General Tools to Support Engineering 202
Summary 203

Chapter 15: The Modern Software Engineer 205

Engineering as a Human Process 207
Digitally Disruptive Organizations 207
Outcomes vs. Mechanisms 210
Durable and Generally Applicable 211
Foundations of an Engineering Discipline 214
Summary 215

Index 217
 

TỔNG QUAN SÁCH

Viết cho sinh viên ở mọi cấp độ kinh nghiệm, Farley làm sáng tỏ những nguyên tắc bền vững cốt lõi của việc phát triển phần mềm hiệu quả. Ông chắt lọc nguyên tắc này thành hai bài tập cốt lõi: thứ nhất, học tập và khám phá, và thứ hai, quản lý sự phức tạp. Đối với mỗi lĩnh vực, ông xác định các nguyên tắc có thể giúp sinh viên cải thiện mọi thứ, từ tư duy đến chất lượng mã, đồng thời mô tả các phương pháp đã được chứng minh là có thể thúc đẩy thành công.
 

Các ý tưởng và kỹ thuật của Farley gắn kết thành một cách tiếp cận thống nhất, khoa học và nền tảng để giải quyết các vấn đề phát triển phần mềm thực tế trong những hạn chế kinh tế thực tế. Cách tiếp cận chung, bền vững và phổ biến này đối với công nghệ phần mềm có thể giúp sinh viên giải quyết các vấn đề mà họ chưa gặp phải bằng cách sử dụng các công nghệ ngày nay và ngày mai. Nó cung cấp cho sinh viên cái nhìn sâu sắc hơn về những gì họ làm hàng ngày, giúp họ tạo ra phần mềm tốt hơn, nhanh hơn, mang lại nhiều niềm vui và thỏa mãn cá nhân hơn.

 

MỤC LỤC

Foreword xvii
Preface xxi
Acknowledgments xxv
About the Author xxvii


Part I: What Is Software Engineering? 1


Chapter 1: Introduction 3

Engineering--The Practical Application of Science 3
What Is Software Engineering? 4
Reclaiming "Software Engineering" 5
The Birth of Software Engineering 7
Shifting the Paradigm 8
Summary 9

Chapter 2: What Is Engineering? 11

Production Is Not Our Problem 11
Design Engineering, Not Production Engineering 12
A Working Definition of Engineering 17
Engineering != Code 17
Why Does Engineering Matter? 19
The Limits of "Craft" 19
Precision and Scalability 20
Managing Complexity 21
Repeatability and Accuracy of Measurement 22
Engineering, Creativity, and Craft 24
Why What We Do Is Not Software Engineering 25
Trade-Offs 26
The Illusion of Progress 26
The Journey from Craft to Engineering 27
Craft Is Not Enough 28
Time for a Rethink? 28
Summary 30

Chapter 3: Fundamentals of an Engineering Approach 31

An Industry of Change? 31
The Importance of Measurement 32
Applying Stability and Throughput 34
The Foundations of a Software Engineering Discipline 36
Experts at Learning 36
Experts at Managing Complexity 37
Summary 38

Part II: Optimize for Learning 41


Chapter 4: Working Iteratively 43

Practical Advantages of Working Iteratively 45
Iteration as a Defensive Design Strategy 46
The Lure of the Plan 48
Practicalities of Working Iteratively 54
Summary 55

Chapter 5: Feedback 57

A Practical Example of the Importance of Feedback 58
Feedback in Coding 60
Feedback in Integration 61
Feedback in Design 63
Feedback in Architecture 65
Prefer Early Feedback 67
Feedback in Product Design 68
Feedback in Organization and Culture 68
Summary 70

Chapter 6: Incrementalism 71

Importance of Modularity 72
Organizational Incrementalism 73
Tools of Incrementalism 74
Limiting the Impact of Change 76
Incremental Design 77
Summary 79

Chapter 7: Empiricism 81

Grounded in Reality 82
Separating Empirical from Experimental 82
"I Know That Bug!" 82
Avoiding Self-Deception 84
Inventing a Reality to Suit Our Argument 85
Guided by Reality 88
Summary 89

Chapter 8: Being Experimental 91

What Does "Being Experimental" Mean? 92
Feedback 93
Hypothesis 94
Measurement 95
Controlling the Variables 96
Automated Testing as Experiments 97
Putting the Experimental Results of Testing into Context 98
Scope of an Experiment 100
Summary 100

Part III: Optimize for Managing Complexity 103


Chapter 9: Modularity 105

Hallmarks of Modularity 106
Undervaluing the Importance of Good Design 107
The Importance of Testability 108
Designing for Testability Improves Modularity 109
Services and Modularity 115
Deployability and Modularity 116
Modularity at Different Scales 118
Modularity in Human Systems 118
Summary 120

Chapter 10: Cohesion 121

Modularity and Cohesion: Fundamentals of Design 121
A Basic Reduction in Cohesion 122
Context Matters 125
High-Performance Software 128
Link to Coupling 129
Driving High Cohesion with TDD 129
How to Achieve Cohesive Software 130
Costs of Poor Cohesion 132
Cohesion in Human Systems 133
Summary 133

Chapter 11: Separation of Concerns 135

Dependency Injection 139
Separating Essential and Accidental Complexity 139
Importance of DDD 142
Testability 144
Ports & Adapters 145
When to Adopt Ports & Adapters 147
What Is an API? 148
Using TDD to Drive Separation of Concerns 149
Summary 150

Chapter 12: Information Hiding and Abstraction 151

Abstraction or Information Hiding 151
What Causes "Big Balls of Mud"? 152
Organizational and Cultural Problems 152
Technical Problems and Problems of Design 154
Fear of Over-Engineering 157
Improving Abstraction Through Testing 159
Power of Abstraction 160
Leaky Abstractions 162
Picking Appropriate Abstractions 163
Abstractions from the Problem Domain 165
Abstract Accidental Complexity 166
Isolate Third-Party Systems and Code 168
Always Prefer to Hide Information 169
Summary 170

Chapter 13: Managing Coupling 171

Cost of Coupling 171
Scaling Up 172
Microservices 173
Decoupling May Mean More Code 175
Loose Coupling Isn't the Only Kind That Matters 176
Prefer Loose Coupling 177
How Does This Differ from Separation of Concerns? 178
DRY Is Too Simplistic 179
Async as a Tool for Loose Coupling 180
Designing for Loose Coupling 182
Loose Coupling in Human Systems 182
Summary 184

Part IV: Tools to Support Engineering in Software 185


Chapter 14: The Tools of an Engineering Discipline 187

What Is Software Development? 188
Testability as a Tool 189
Measurement Points 192
Problems with Achieving Testability 193
How to Improve Testability 196
Deployability 197
Speed 199
Controlling the Variables 200
Continuous Delivery 201
General Tools to Support Engineering 202
Summary 203

Chapter 15: The Modern Software Engineer 205

Engineering as a Human Process 207
Digitally Disruptive Organizations 207
Outcomes vs. Mechanisms 210
Durable and Generally Applicable 211
Foundations of an Engineering Discipline 214
Summary 215

Index 217
 

-%
0₫ 0₫
0915920514
0915920514