首页>参考读物>计算机科学与技术>软件与程序设计

高效研发:硅谷研发效能方法与实践
作者 : 葛俊 著
出版日期 : 2021-12-20
ISBN : 978-7-111-69817-3
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 301
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容介绍
本书以Facebook(Meta)等硅谷企业的研发经验为背景,结合作者17年的研发经验,讲解了如何实现个人和团队的高效研发。
全书主要从以下5个方面对硅谷的高效研发方法进行了总结,提供了非常系统的指导原则和实践指南。
(1)研发效能综述
主要了讲解研发效能的定义、模型,以及研发效能度量的正确方法。希望借此帮助读者梳理出研发效能的主脉络,构建一幅清晰的知识图谱。
(2)个人高效研发实践
主要讲解如何提高个人研发效能,具体涉及深度工作、Git、命令行、VIM、工具环境集成等内容,旨在帮助读者提高技术的专精程度和持续成长。
(3)研发流程优化
主要讲解研发流程优化的基本目标和原则、代码优化、分支管理、DevOps、团队协同等,希望帮助读者深入理解研发过程中的关键流程,以及流程优化的基本原则,从而能够针对自己的实际情况,找到合适的工程实践,让软件开发的整个流程更加顺畅、高效。
(4)团队高效研发实践
主要讲解团队高效研发实践过程中各关键步骤的高效工程方法,内容涉及研发环境搭建、代码审查、合理处理技术债、开源利弊分析、测试等,同时对研发流程及工程方法的趋势进行解读,希望帮助读者掌握这些具体工程方法的正确使用。
(5)管理和文化
系统分析了硅谷研发团队的管理和文化,尤其是Facebook的工程师文化,并根据作者在国内公司的具体落地经验,给出推荐的文化引入和建设方法。

图书特色

资深研发效能专家,在Facebook、Microsoft和华为等
企业17年经验总结,硅谷和国内经验相结合

从个人效能、流程优化、团队效能、管理和文化4个方面总结硅谷研发方法,提供系统的指导原则和实践指南

图书前言

什么是研发效能,为什么要关注研发效能
为什么写作本书
最近这十几年,国内互联网产业的发展速度不亚于硅谷,在商业模式创新方面甚至完成了超越,但是我们在研发效能方面始终比较落后。难以否认的是,在互联网行业繁荣发展的背景下,国内很多公司采用了“拼工时”的做法,却忽略了最应该关注的研发效能。
你是否也曾为下面这些问题感到困扰?
团队角度:
1)加班也不少,但是产品发布还是常常延期,上线后产品问题频发。
2)从需求分析、产品设计、开发、测试到部署一个环节都不少,但最终发布的产品却与用户需求偏差很大。
3)产品发布上线时出现大量提交、合并,导致最后时刻出现很多问题,团队成员集体熬夜加班,却将大把的时间花在了等待环境、等待验证上。
4)开发提测质量不好,大量压力聚集到测试这一步,导致代码返工率很高。引入单元测试、代码审查,效果却不明显。
个人角度:
1)疲于应付业务,没有精力去精进技术。
2)工作过程中有大量的电话、即时聊天消息干扰,工作思路常常被打断。
3)对众多的工具(比如Git、命令行)的使用仅限于表层,工作效率较低,想提高却因为工具太多不知道从何下手。
4)有知识焦虑,但是没有找到好的办法系统地提高个人工作效率。
这其实是研发效能出现了问题。那么,研发效能到底是什么呢?一提到研发效能,很多人的第一反应都是开发的速率,也就是能否快速开发、发布产品。但事实上,速率只是效能的三大支柱之一。
相比快,产品开发更重要的是方向正确,因为不能为用户和公司真正提供价值的产品做了也是白做。另外,高效能还需要有可持续性,否则短期的高产出可能会严重伤害长期的产出。比如,连续熬夜加班虽然短期能增加一定的产出,但其带来的身体问题会导致后续工作效率低下,得不偿失。
因此,研发效能的完整定义应该是持续为用户产生有效价值的效率。它包括有效性(Effectiveness)、效率( Efficiency)和可持续性(Sustainability )三个方面。简单来说,就是能否长期、高效地开发出有价值的产品。对于团队研发效能和个人研发效能来说,其核心都是这三个方面,只不过在价值的侧重点上有所不同。团队研发效能更注重对公司、团队、客户产生价值,而个人研发效能更注重个人的产出、技术的成长、个人的提高。
可喜的是,最近几年,国内越来越多的公司开始在研发流程、工具、文化等方面下功夫,很多百名研发人员规模的公司开始组建专门的效能团队,以提高整个公司的研发效能。
这是一个很好的现象和趋势。但很多公司在推进研发效能的时候,常常不知道从何下手,或者花了精力、加大了投入却看不到效果,产出抵不上投入。比如,我在一些公司做内训和顾问工作的时候,经常会遇到类似以下案例的情况。
1)想通过指标度量的方式来衡量团队的效能,要求每个团队达到一定的测试覆盖率。研发团队在产品完成后进行突击来编写单元测试,最终达到了要求,但产品质量却没有提高。
2)引入业界先进工程实践,学习Google使用大的代码仓,但因为基础设施不成熟,对大量二进制文件支持很差,结果算法团队有很多的二进制模型文件,每次执行git clone命令都需要半小时,导致怨声载道。
3)希望建设工程师文化来提高产出和活跃气氛,跟公司管理层以及HR商量了好几条价值观在公司宣传推广,还组织了几次团建活动,但是收效甚微,大家真正工作起来还是老样子。
这些问题的根源都在于,软件开发的灵活性决定了研发效能提升的困难性:需要关注的点太多,可以使用的方法也很多,但如果只是简单照搬业界研发实践的话,效果往往不好,有时甚至会造成负面效果。
在这方面,硅谷的互联网公司做得要好很多。在2000年互联网泡沫之后,美国的互联网产业从疯狂增长进入“精耕细作”的阶段,通过比拼效能在竞争中取得优势,并在此过程中积累了很多经验。
其中,Facebook的研发效能非常高,更是硅谷公司中的一个典范。比如,在2012年Facebook月活达到10亿的时候,其后端服务及前端网站的部署采用的是每周一次全量代码部署、每天一次增量代码部署,以及每天不定次数的热修复部署,但部署人员只有2.5个(0.5个是因为有一人是来自工程师团队的自愿报名的助手),达到平均每个部署人员支撑4亿用户的惊人效率。
又比如,社交网络出现Bug的时候,调测起来非常麻烦,因为要复现Bug场景中错综复杂的社交网络数据困难且耗时。但Facebook采用开发环境与生产环境共享一套数据的方法,使开发人员可以非常方便地在自己的机器上复现Bug,以进行调测。当然,这样的数据共享机制背后有着强大的技术和管理支撑来规避风险。
2010到2013年,我在Facebook基础平台团队的内部工具组工作。作为核心成员,我研发并开源了研发工具套件Phabricator。2013到2015年,我又作为效能工具的使用者参与了Facebook对外产品的研发。这几年的工作,让我对Facebook如何提高研发效能有了越来越清晰的理解,认识到研发效能的提高需要整个公司在研发流程、工程方法、个人效能和文化管理等方面进行精心设计。
离开Facebook之后,我在硅谷的Stand Technologies 公司(后文简称Stand)、国内的两家创业公司以及华为等担任过技术总负责人、CTO、技术专家和团队主管等,带领百人技术团队进行研发。
比如,2017到2018年,我在华为开发工具部主导开发下一代集成开发环境,旨在为软件开发工程师提供全栈的端云一体工具平台,为2万多名开发人员服务,从而提高公司整体的研发效能。同时,我也尝试将研发效能的工程实践引入华为。比如,我在团队组织了几次黑客马拉松(Hackathon)活动,平均10个开发人员就产出一个项目,每10个项目中就有 1.5个成功落地。
工作17年来,我在研发效能团队工作过,也在产品团队中推行过研发效能,涉及国内外不同类型、不同规模的公司,所以对怎样在一个公司或者团队中引入效能实践有比较丰富的经验。
在这里,我想将自己之前的经验和教训进行一次系统的梳理,希望能够帮助对效能有期待又有困惑的同行者,当然对自己也是一次温故知新的机会。
本书结构
在本书中,分五个部分系统讲述如何做到研发的高效能。
研发效能综述(第1~3章)。这一部分讲解研发效能的定义、模型,并着重介绍研发效能度量的正确使用方法,希望帮助读者梳理研发效能的主脉络,构建清晰的知识图谱。
个人高效研发实践(第4~15章)。这一部分讲解如何提高个人效能,具体涉及深度工作、Git、命令行、Vim、工具集成等内容,旨在帮助读者提高技术的专精程度,实现持续成长。每个开发人员都应该提高自己的效能,只有这样才能持续学习、持续提高,避免被业务拖着跑。
研发流程优化(第16~21章)。这一部分讲解研发流程优化的基本目标和原则、代码优化、分支管理、DevOps、团队协同等话题,希望帮助读者深入理解研发过程中的关键流程以及流程优化的基本原则,使读者能够针对自己的实际情况,找到最合适的工程实践,让软件开发的整个流程更加顺畅、高效。
团队高效研发实践(第22~30章)。这一部分讲解团队高效研发实践过程中各关键步骤的高效工程方法,内容涉及研发环境搭建、代码审查、合理处理技术债、开源利弊分析、测试等,同时对研发流程及工程方法的趋势进行解读和展望,希望帮助读者加深对这些具体工程方法的理解,并学会正确地使用这些方法。
管理和文化(第31~36章)。这一部分系统分析硅谷管理和文化,尤其是Facebook的工程师文化,并根据我在国内外公司的具体落地经验,给出推荐的文化引入和建设方法。
这里要着重强调一下个人高效研发实践部分。团队由个人组成,所以团队研发效能和个人研发效能密不可分。然而,个人研发效能是很多公司和团队在进行提效工作时容易忽略的一个点。所以在本书中我会在个人效能方面多花一些笔墨,介绍如何从指导思想、工具、沟通等方面提高个人效能,往10x 程序员的方向努力。
研发效能和软件开发一样,都具有很大的灵活性,提高研发效能不是生搬硬套就能做好的。所以我会着重讲解目标,带你深入了解效能实践背后的原理,然后才是具体的实践。因为只有深刻理解原理,才能灵活运用。
同时,我会分享大量成功的案例,带读者一起了解国内外公司的优秀做法,分析它们成功的经验。当然,我也会分享失败的案例,分析其背后的原因。不过更重要的是,我希望读者能够跟着我一起分析,通过对比思考,找到真正适合团队和自身的实践。这正是我写作本书的真正初衷。
致谢
首先要感谢我的家人。家里刚添了老二,非常忙碌,而图书创作又非常耗时,我的整个家庭都对我写书非常支持,让我腾出时间专心进行创作。尤其是我妻子,承担了很多的家务。没有她的辛苦付出,本书就不可能产生。
其次要感谢机械工业出版社华章分社提供这样的一个平台,让我能够把这些年的经验分享出来。
最后要感谢极客时间,这本书是极客时间的“研发效率破局之道”专栏的扩展。感谢极客时间团队在我创作专栏时给予的鼎力相助。

上架指导

计算机\程序设计

封底文字

数字化时代,提升研发效能是组织的共同期望和挑战,而这需要系统方法的支持。
葛俊是软件技术研发和团队管理的资深实践者,他既有在硅谷长期深入的工作经验,也了解国内的技术、工程和管理现状。在本书中,他带领我们回到本源,从研发效能的根本问题出发,层层推进,从个人效能、流程优化、团队效能以及管理和文化角度,为我们提供了系统的指导原则和可操作的落地实践指南。
——何勉 阿里巴巴资深技术专家/《精益产品开发:原则、方法和实施》作者

葛俊老师十七年磨一剑,结合他在国内外一线公司推进研发效能的成功经验与失败经历,给技术人带来一套能够落地的研发效能工作法。在这本书中,你不但能找到适合一线技术负责人的系统性方法和理念,而且能找到实操性强的优秀工程师技能养成方法,这本书可以说是一本研发效能从组织到个人实战经验的百科全书,非常值得阅读和收藏。
——李倩 KodeRover 创始人兼CEO/CTO

葛俊老师有着硅谷和国内大厂的工作经历,他既能“下得厨房”,作为 Phabricator 核心开发者工作在研发效能一线,又能“上得厅堂”,通过布道系统地介绍硅谷软件工程实践和企业文化,做硅谷和国内的桥梁。有幸曾和葛俊老师共事,看到他在激发团队生产力上的热情和成效。它山之石,可以攻玉,国内的软件从业者一定可以从这本书中汲取营养,让研发效能更上一层楼。
——蒋鑫 Git项目贡献者/阿里巴巴资深技术专家

作者简介

葛俊 著:作者介绍
葛俊
资深研发效能专家,17年技术研发和管理经验。曾任职于微软、Facebook、华为,以及硅谷和国内的两家创业公司,担任研发效能团队负责人及CTO等角色。
在Facebook(Meta)任职期间,担任内部工具团队Tech Lead,负责知名开源开发工具集Phabricator。在华为任职期间,担任华为内部工具团队的首席架构师,高级产品总监兼执行总监。在研发团队有丰富的工作经验和带团队的经验,有主导推进研发效能的丰富经历。
曾多次被“全球架构师峰会”等大型会议邀请,做互联?技术研发效能方面的专题报告。

图书目录

前言 什么是研发效能,为什么要关注研发效能
第一部分 研发效能综述
第1章 高效学习、实践方法论3
1.1 使用黄金圈原则3
1.2 如何有效落地实践4
小测试7
第2章 研发效能定义及模型8
2.1 为什么要关注研发效能8
2.2 研发效能定义9
2.3 提高研发效能的“坑”9
2.4 研发活动的本质10
2.4.1 软件研发本质之一:流水线11
2.4.2 软件研发本质之二:灵活性12
2.5 研发效能模型12
小测试14
第3章 效能度量谜题15
3.1 研发效能度量的定义和作用16
3.2 效能度量的三个失败案例16
3.3 效能难以度量的三大原因18
3.4 效能度量的正面案例19
3.5 使用效能度量的根本原则20
3.6 正确使用效能度量的方法21
小测试27
第二部分 个人高效研发实践
第4章 精准打击目标:通过提高准确性来提高投入产出比32
4.1 以终为始,寻找最重要的任务33
4.1.1 自己定义任务33
4.1.2 聚焦目标,以终为始33
4.1.3 无情的筛选,少即是多34
4.2 追根究底,寻找最高效的解决方案34
4.3 高效沟通,利用信息的准确传递来寻找、调整目标35
4.3.1 同理心原则36
4.3.2 外在与内在同样重要36
4.3.3 冰山原则37
4.3.4 建设性冲突37
4.4 管理者视角38
第5章 唯快不破:如何利用速度提高个人研发效能39
5.1 应用高效实践提高完成任务的速度39
5.2 应用快速迭代的思路获取快速反馈40
5.2.1 完成比完美更重要40
5.2.2 让代码尽快运行起来41
5.2.3 设置本地代码检验机制42
5.2.4 尽早解决合并冲突43
5.3 管理者视角43
第6章 不仅是当下的成功:持续地提高个人研发效能45
6.1 精力管理45
6.1.1 拥抱无聊,控制手机依赖46
6.1.2 用反向行事日历来确保休息和高效工作46
6.2 使用80/20原则寻找研发活动中的关键因素47
6.3 对关键活动进行优化48
6.3.1 研发活动中长期有效的原则48
6.3.2 高频发生的活动49
6.4 目标驱动和兴趣驱动相结合51
6.5 管理者视角52
第7章 高效选用工具提高研发速度54
第8章 工程师常见工作任务的系统性工具优化56
8.1 第一个任务类别:操作系统上的通用操作56
8.2 第二个任务类别:输入和编辑59
8.3 第三个任务类别:知识管理62
8.4 第四个任务类别:浏览网页64
8.5 第五个任务类别:编程65
8.6 小结65
第9章 高效Git基本操作66
9.1 Git和代码原子性66
9.2 Git支持原子性的五种基本操作67
9.3 小结80
第10章 实现代码提交的原子性的Git工作流81
10.1 工作流一:使用一个分支完成所有需求的开发81
10.2 工作流二:使用多个分支完成所有需求的开发97
10.3 小结101
第11章 每个开发人员都应该学一些Vim104
11.1 Vim简介104
11.2 Vim的前世今生105
11.3 Vim的两大特点105
11.4 小结108
第12章 高效学习Vim的实用技巧110
12.1 学习Vim的命令模式和命令组合方式110
12.2 学习Vim最常用的命令113
12.3 在更广泛的工作场景中应用Vim技能118
12.4 小结120
第13章 高效命令行环境选择和设置122
13.1 为什么要使用命令行122
13.2 命令行配置的四个步骤124
13.3 小结133
第14章 研发场景的有效命令行工具134
14.1 日常操作中的工具和技巧134
14.2 开发中的常见工作143
14.3 小结146
第15章 工具的高效集成147
15.1 工具集成147
15.1.1 使用管道对命令行工具进行集成147
15.1.2 IDE和周边工具集成150
15.2 提高工具一致性151
15.3 小结153
第三部分 研发流程优化
第16章 研发流程优化的基本目标和原则157
16.1 寻找用户价值157
16.2 提高用户价值的流动效率158
16.3 小结162
第17章 代码入库之前的流程优化163
17.1 规范化、自动化核心步骤163
17.2 提供快速反馈,促进增量开发166
17.3 小结168
第18章 代码入库之后的流程优化169
18.1 三个“持续”的定义和作用169
18.2 CI/CD流水线的原则及具体实践171
18.3 案例:Facebook如何落地CI/CD来提高效能172
18.4 小结174
第19章 选择适当的分支管理策略提高流程和产品质量175
19.1 共主干分支管理和发布策略175
19.2 共分支管理策略的优点178
19.3 其他主要分支方式180
19.4 如何选择、应用分支管理策略181
19.5 小结182
第20章 使用全栈思路打通开发和运维184
20.1 DevOps和SRE的异同184
20.2 DevOps和SRE的目标、原则185
20.3 落地实践187
20.4 小结189
第21章 研发流程中的高效信息流通190
21.1 团队成员愿意共享是有效沟通的前提191
21.2 设计流程和使用工具,推动研发信息高效沟通192
21.3 沟通工具的选用技巧194
21.4 小结195
第四部分 团队高效研发实践
第22章 研发环境:让开发人员不再操心环境199
22.1 开发机器200
22.2 IDE200
22.3 本地环境与联调环境201
22.4 开发过程中使用的各种工具、数据和配置203
22.5 测试环境与类生产环境203
22.6 提供高效研发环境的原则204
22.7 小结204
第23章 代码审查:高效代码审查实践206
23.1 代码审查的作用206
23.2 代码审查方法的分类207
23.3 代码审查方法选择的三个成功案例210
23.4 小结212
第24章 代码审查:如何有效引入、执行代码审查213
24.1 引入代码审查的步骤和方法213
24.2 推进代码审查的两个关键操作216
24.3 推行代码审查的两个关键原则218
24.4 小结220
第25章 合理处理技术债:让快速研发可持续222
25.1 技术债的成因223
25.2 技术债的影响223
25.3 处理技术债的两个基本原则223
25.4 控制技术债的四个步骤224
25.5 小结226
第26章 开源:从Phabricator的开源历程看开源利弊228
26.1 Phabricator开源过程的关键步骤229
26.2 开源对公司的利弊233
26.3 小结234
第27章 高效上云:运用云计算提高效能235
27.1 云计算的优势235
27.2 云计算的挑战及解决方法238
27.3 小结239
第28章 测试左移:测试如何应对新的开发模式240
28.1 测试左移的定义240
28.2 测试左移的四个原则241
28.3 小结243
第29章 测试右移与高效部署:应对频繁发布带来的挑战244
29.1 三种部署方式的定义244
29.2 目标246
29.3 原则247
29.4 具体实践247
29.4.1 部署阶段的实践247
29.4.2 发布阶段的实践249
29.4.3 发布后阶段的实践249
29.5 小结250
第30章 持续进步:研发流程、工程方法趋势解读和展望251
30.1 协作方式的发展趋势251
30.2 云计算平台的发展趋势252
30.3 应用开发的发展趋势254
30.4 AI方面的发展趋势255
30.5 小结256
第五部分 管理和文化
第31章 业务目标和技术目标两手抓:打造高效团队的三个步骤259
31.1 寻找目标259
31.2 目标管理260
31.3 任务执行261
31.4 小结263
第32章 从奈飞的著名PPT谈硅谷公司文化264
32.1 定义核心价值观265
32.2 在招聘、流程方面设计方案推动文化建设266
32.3 持续推动文化建设267
32.4 关于奈飞公司文化的思考268
32.5 小结268
第33章 Facebook创造力引擎:工程师文化270
33.1 Facebook的工程师文化270
33.2 Facebook推行工程师文化的具体实践271
33.3 个人角度感受Facebook工程师文化带来的效果272
33.4 小结273
第34章 Facebook工程师文化实践三大原则之一:让员工做感兴趣的事274
34.1 Facebook工程师文化落地的三大原则274
34.2 让员工做感兴趣的事275
34.3 Hackathon落地经验277
34.4 小结278
第35章 Facebook工程师文化实践三大原则之二:让员工拥有信息和权限279
35.1 让员工拥有信息279
35.2 让员工拥有权限281
35.3 Facebook之外的落地经验282
35.4 小结283
第36章 Facebook工程师文化实践三大原则之三:绩效调节284
36.1 360度绩效考评系统285
36.2 360度绩效考评系统的两个原则286
36.3 360度绩效考评系统的问题287
36.4 绩效考评落地实践287
36.5 小结288
结束语 超越昨天的自己,享受成长的快乐289

教学资源推荐
作者: [美]德洛莉丝 M. 埃特尔(Delores M. Etter) 著
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
作者: 【美】梁勇(Y.Daniel Liang) 著
参考读物推荐