Google软件工程
新华书店全新正版,极速发货,假一罚十,可开电子发票,请放心购买。
¥
58.58
4.0折
¥
148
全新
库存67件
作者(美)提图斯·温特斯,(美)汤姆·曼什雷克,(美)海勒姆·赖特
出版社中国电力出版社
ISBN9787519864705
出版时间2022-03
装帧平装
开本16开
定价148元
货号1202611376
上书时间2024-10-14
商品详情
- 品相描述:全新
- 商品描述
-
目录
序1
前言3
第一部分理论
第1章什么是软件工程13
时间与变化15
海勒姆定律18
案例:哈希排序18
为什么目标不是“没有变化”呢20
规模与效率21
阻碍规模化的政策22
促进规模化的政策24
案例:编译器升级24
左移思想26
权衡与成本28
案例:白板笔29
决策投入30
案例:分布式构建30
案例:时间与规模的博弈32
数据驱动的决策32
软件工程VS编程33
小结34
本章要点34
第二部分文化
第2章如何更好地参与团队合作37
隐藏代码37
天才神话38
隐藏有害40
及早检测41
巴士系数41
小步快跑42
拒绝隐藏44
一切为了团队44
社交的三大支柱45
三大支柱的重要性46
谦虚、尊重和信任46
无指责的回顾文化50
谷歌范儿(Googley)52
小结53
本章要点53
第3章知识共享55
学习的挑战55
知识共享的哲学57
设定基调:心理安全58
导师制58
大型群体的心理安全59
不断充实知识60
提问60
理解上下文61
扩大提问渠道:向社区提问62
群聊62
邮件列表63
YAQS:问答平台63
分享你的知识:你总有可以教别人的地方64
OfficeHours64
技术讲座与课程64
文档65
代码67
组织知识发展68
培养知识分享的文化68
建立规范的信息源70
让信息流动73
可读性:通过代码评审规范化指导74
什么是可读性流程74
为什么需要可读性流程75
小结78
本章要点78
第4章平等工程79
人类的偏见80
理解多样性的必要性82
建立多元文化能力82
使多样性具有可操作性84
拒绝单一的方式85
挑战既定流程86
价值观与成果87
保持好奇心,向前推进88
小结88
本章要点89
第5章团队领导的艺术91
经理和技术主管(或两者兼任)91
工程经理92
技术主管92
技术主管经理92
从个人贡献者到93
专享需要担心的是……嗯,一切94
仆人式领导95
工程经理96
“经理”是一个令人厌恶的词96
如今的工程经理96
反模式98
反模式:雇用平庸的人98
反模式:忽视低绩效员工99
反模式:忽视“人”的问题100
反模式:做老好人101
反模式:打破招聘门槛102
反模式:像对待孩子一样对待你的团队102
积极的模式103
抛弃“自我”意识103
成为一名禅师104
成为催化剂106
移除障碍106
成为老师和导师107
设定清晰的目标107
坦诚108
追踪幸福感109
出乎意料的问题110
其他提示和技巧111
对待人像植物一样113
内在激励和外在激励114
小结115
本章要点115
第6章大规模团队领导力117
总是在做决策118
飞机的故事118
识别盲点119
识别关键的权衡120
决策,然后迭代120
总是不在场122
你的使命:建立一个“自驱”的团队123
划分问题空间123
总是在扩展126
成功的循环127
重要VS紧急128
学会放弃130
保护你的精力131
小结133
本章要点133
第7章度量工程生产力135
为什么要度量工程生产力135
鉴别:它值得度量吗137
根据目标和信号来选择有意义的指标141
目标142
信号144
指标145
使用数据验证指标145
采取行动并跟踪结果150
小结150
本章要点150
第三部分流程
第8章风格指南与规则155
为什么要有规则156
创建规则157
指导原则157
风格指南165
修改规则168
流程169
风格仲裁者170
例外情况170
指南171
应用规则173
错误检查工具174
代码格式化工具175
小结177
本章要点177
第9章代码评审179
代码评审流程180
谷歌如何进行代码评审181
代码评审的好处184
代码正确性185
代码理解187
代码一致性187
心理和文化方面的好处188
知识共享189
代码评审很好实践190
礼貌而专业190
小的变更191
清晰的变更描述193
评审者数量最少化193
尽可能的自动化194
代码评审类型194
绿地代码评审194
行为变更、改进和优化195
缺陷修复和回滚195
重构和大规模变更196
小结197
本章要点197
第10章文档199
什么是文档200
为什么需要文档200
像代码一样对待文档202
了解文档的读者204
读者的类型205
文档类型206
参考文档207
设计文档210
新手教程210
概念文档212
着陆页面213
文档评审214
文档的哲学216
WHO,WHAT,WHEN,WHERE和WHY216
开头,中间和结尾217
很好文档的要素217
丢弃文档218
什么时候需要技术文档工程师219
小结219
本章要点220
第11章测试概述221
为什么要写测试222
“GoogleWebServer”的故事223
当今开发速度下的测试224
编写,运行,响应224
测试代码的好处227
设计测试套件228
测试粒度229
测试范围233
碧昂丝规则235
代码覆盖率236
谷歌规模下的测试237
大型测试套件的陷阱238
谷歌测试的历史239
入职培训课240
测试认证241
“马桶测试”241
如今的测试文化242
自动化测试的局限性243
小结244
本章要点244
第12章单元测试245
可维护性的重要性246
防止脆弱的测试247
努力做到不更改测试247
通过公共API进行测试248
测试状态,而不是交互252
编写清晰的测试253
使测试完整简洁254
测试行为,而不是方法255
不要把逻辑放进测试260
编写清晰的失败信息261
测试与代码共享:DAMP,而不是DRY263
共享值265
共享设置267
共享helper和验证269
定义测试基础设施270
小结270
本章要点270
第13章测试替身273
测试替身对软件开发的影响274
谷歌的测试替身274
基本概念275
测试替身的示例275
缝(Seams)276
模拟(Mocking)框架277
使用测试替身的技术279
伪造(Faking)279
打桩(Stubbing)279
交互测试280
实际实现281
实际实现比隔离更好281
如何决定何时使用实际实现283
伪造(Faking)285
为什么伪实现(Fakes)如此重要286
什么时候写伪实现286
伪实现的保真度287
伪实现应该被测试288
如果没有伪实现怎么办288
打桩289
过度使用打桩的危险性289
何时使用打桩合适291
交互测试292
状态测试优于交互测试292
何时使用交互测试合适293
交互测试的很好实践294
小结296
本章要点296
第14章较大型的测试299
什么是较大型的测试299
保真度300
单元测试中的常见问题301
为什么不要有较大型的测试303
谷歌的较大型的测试304
较大型的测试和时间305
谷歌规模下的较大型的测试306
大型测试的结构308
被测系统(SUT)309
测试数据314
验证315
较大型的测试的类型316
一个或多个交互二进制文件的功能测试316
浏览器和设备测试317
性能、负载和压力测试317
部署配置测试318
探索性测试318
A/B差异回归测试319
用户验收测试(UAT)321
探针和金丝雀分析321
灾难恢复与混沌工程322
用户评估324
大型测试和开发者工作流325
编写大型测试325
运行大型测试326
大型测试的所有权329
小结330
本章要点330
第15章弃用331
为什么弃用332
为什么弃用很难333
将弃用融入设计335
弃用的类型336
建议性弃用336
强制性弃用337
弃用警告338
弃用流程的管理339
流程负责人340
里程碑340
弃用的工具341
小结342
本章要点343
第四部分工具
第16章版本控制与分支管理347
什么是版本控制348
为什么版本控制很重要349
集中式版本控制系统VS分布式版本控制系统351
真实来源354
版本控制VS依赖管理356
分支管理356
分支等同于在制品357
开发分支358
发布分支359
谷歌的版本控制360
单一版本361
场景:多个可用版本362
“单一版本”规则363
(几乎)没有长周期的分支363
发布分支呢365
单一代码仓(Monorepos)365
版本控制的未来367
小结369
本章要点370
第17章代码搜索371
CodeSearch的用户界面372
如何使用CodeSearch373
在哪里373
做什么374
如何用374
为什么375
谁以及何时375
为什么需要一个单独的Web工具375
规模375
无需设置即可浏览全局代码376
专业化377
与其他开发工具集成377
开放API379
规模对设计的影响379
搜索查询延迟380
索引延迟381
谷歌的实现382
搜索索引382
排序383
权衡387
完整性:代码库的Head387
完整性:所有结果VS最相关的结果387
完整性:HeadVS分支VS所有历史VS工作空间388
表达性:TokenVS子串VS正则表达式389
小结390
本章要点391
第18章构建工具与构建哲学393
构建系统的目的393
没有构建系统会发生什么395
但是我只需要一个编译器395
用shell脚本来拯救396
现代构建系统397
一切都是为了依赖397
基于任务的构建系统398
基于制品的构建系统402
分布式构建408
时间,规模,权衡412
处理模块和依赖413
使用细粒度依赖与1:1:1规则413
最小化模块可见性414
管理依赖414
小结419
本章要点420
第19章Critique:谷歌的代码评审工具421
代码评审工具的原则421
代码评审流程423
通知424
第一步:创建一个变更425
差异比较425
分析结果426
紧密的工具集成428
第二步:请求评审429
第三步和第四步:理解和评论变更430
评论430
了解变更状态432
第五步:批准变更(评价变更)434
第六步:提交变更435
提交后:跟踪历史436
小结437
本章要点438
第20章静态分析439
有效静态分析的特点440
可扩展性440
易用性440
让静态分析发挥作用的关键经验441
关注开发者的体验441
让静态分析成为核心开发者工作流的一部分442
赋予用户贡献的权力442
Tricorder:谷歌的静态分析平台443
集成的工具444
集成反馈渠道445
建议的修复446
按项目定制447
预提交448
编译器集成448
编辑和浏览代码时的分析449
小结450
本章要点450
第21章依赖管理451
为什么依赖管理这么难453
冲突的需求和菱形依赖453
引入依赖455
兼容性承诺455
引入时的注意事项457
谷歌如何处理引入的依赖459
从理论上讲,依赖管理460
没有变化(又名静态依赖模型)461
语义化版本号462
绑定分发模式463
LiveatHead464
SemVer的局限性465
SemVer可能过度约束466
SemVer可能过度承诺467
动机468
最小版本选择469
那么,SemVer有效吗470
资源无限的依赖管理471
导出依赖473
小结477
本章要点477
第22章大规模变更479
什么是大规模变更480
谁来处理LSC481
原子变更的障碍483
技术483
合并冲突483
“没有闹鬼的墓地”484
异构性484
测试485
代码评审487
LSC的基础设施489
政策与文化489
代码库分析490
变更管理491
测试491
语言支持491
LSC流程493
授权493
变更创建494
切片与提交494
清理498
小结498
本章要点498
第23章持续集成499
CI的概念501
快速反馈循环501
自动化503
持续测试505
CI的挑战511
封闭测试512
谷歌的CI515
CI案例研究:GoogleTakeout518
但是我无力做CI524
小结525
本章要点525
第24章持续交付527
持续交付在谷歌的习语528
速度是一项团队运动:如何将部署分解为可管理的单元529
隔离评估变更:特性开关530
力求敏捷:建立发布火车531
没有一个二进制是完美的531
赶上你的发布期限532
质量与聚焦用户:只发布有用的功能533
左移:更早地做出数据驱动的决策534
改变团队文化:建立发布规则535
小结536
本章要点537
第25章计算即服务539
驯服计算环境540
将琐事自动化540
容器化与多租户542
总结545
为托管计算编写软件545
为失效设计架构545
批处理VS服务547
管理状态549
连接到服务550
一次性代码551
CaaS随时间和规模的演化552
抽象容器552
一个服务统御余众555
提交的配置557
选择计算服务558
集中化与定制化559
抽象层次:Serverless561
公有云VS私有云565
小结566
本章要点567
后记569
内容摘要
如今,软件工程师不仅需要知道如何有效地编程,还需要知道如何发展适当的工程实践,以使代码库可持续且健康。这本书强调了编程和软件工程之间的区别。
软件工程师如何管理一个活跃的代码库,这个代码库在其生命周期里不断响应变化的需求,不断地发展?软件工程师Titus Winters和Hyrum Wright,携手技术作家Tom Manshreck,基于他们在谷歌的经验,坦率而有见地的为大家介绍了靠前的从业者是如何构建和维护软件的。
你将学习到软件组织在设计、架构、编写和维护代码时应牢记的三个基本原则:
时间如何影响软件的可持续性,以及如何使代码随着时间的推移而具有韧性。
规模如何影响工程组织内软件实践的可行性。
在评估设计和开发决策时,一位典型的工程师需要做出哪些权衡。
— 没有更多了 —
以下为对购买帮助不大的评价