Skip to content

Commit cd5e6c5

Browse files
author
ying.liu
committed
revise working guide
1 parent f7e3337 commit cd5e6c5

File tree

1 file changed

+32
-30
lines changed

1 file changed

+32
-30
lines changed

developer-working-guide.md

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,100 +6,102 @@
66

77
程序员的工作规则是基于如下的前提:
88

9-
1. 真实和持久的幸福源于和一群优秀的同事接受挑战、创造和分享非凡价值。
9+
1. 真实和持久的幸福源于和一群优秀的同事达成共识、接受挑战、创造和分享非凡价值。
1010

11-
1. 程序员是务实的(pragmatic)成年人,值得信任
11+
1. 软件就是业务,软件开发是不间断的持续过程,直到企业/程序员/用户的生命尽头。在心智和身体上都需要有长远准备
1212

13-
1. 规则是用来打破的,但需要足够的事实理由。
14-
15-
1. 软件就是业务,软件开发是不间断的连续过程,直到企业/程序员/用户的生命尽头。在心智和身体上都需要有长远准备。
13+
1. 每个程序员都是业务的驱动者,拥有推动业务需要的所有知情权、资源和权利。
1614

1715
1. 每一行语句都会有 10 次以上的修改,可维护性是根本。
1816

19-
1. 有自动测试的软件功能才算完成。
20-
2117
1. Bug 不可避免,但是很丢人,严重的错误是灾难性的。
2218

23-
1. 沟通合作比想象的困难和必要,需要明确要求和保证机制。
24-
25-
1. 小就是美。便于理解和重用。
19+
1. 沟通合作、达成共识比想象的困难和必要,需要学习和建立机制。
2620

27-
1. 程序员拥有工作需要的所有资源,尤其是全局信息
21+
1. 小就是美,便于理解和重用
2822

2923
## 2 基本规则
3024

3125
### 2.1 对每个错误需要回答怎么不再犯
3226

3327
不再犯同样的错误是最有效的工作方法。
3428

35-
### 2.2 每周 40 小时工作,20 小时学习
29+
### 2.2 每周 40 小时工作,20 小时学习
3630

3731
清醒的头脑和不断学习是持续高效的基本保证。偶尔的冲刺可以用 20 小时的学习时间来工作,但是不应该成为常态。不鼓励熬夜,禁止每周工作超过 60 个小时。
3832

39-
### 2.3 每周锻炼 4 次,每次 1 个小时以上
33+
### 2.3 每周锻炼 4 次,每次 1 个小时以上
4034

4135
体魄健康,头脑才灵。
4236

43-
### 2.4 程序员是业务专家
37+
### 2.4 达成共识
4438

45-
技术的目的是为了业务。熟悉业务和市场趋势才能创造最大价值
39+
在业务和技术领域的决策、设计、代码等都有审查(review)。事关重要的都要达成共识 -- 经过大家充分讨论和理解优劣点
4640

47-
### 2.5 一次完成一个任务。
41+
### 2.5 程序员是业务专家
4842

49-
一个完成的任务好过三个未完成的任务。避免了上下文切换,过程高效而且结果可用
43+
技术的目的是为了业务。熟悉业务和市场趋势才能创造最大价值
5044

5145
## 3 团队规则
5246

53-
### 3.1 分享团队管理职责
47+
### 3.1 赋能个人
48+
49+
每个人都可以看到做事所需要的业务和技术信息、代码、资源。可以参与所有层级的决策。必要时第一线可以调动全公司资源来达成目标。
50+
51+
### 3.2 达成共识
52+
53+
决策是集体智慧的结果。相关人员都有发言权并充分参与讨论,每个人都清晰理解决策的过程、利弊考量和结果。
54+
55+
### 3.3 分享团队管理职责
5456

5557
团队的沟通、进度更新、不重犯错的方法、业务的改善等等,都是每个人的责任。大家分享团队管理职责,轮流主持各种会议。团队的每个问题都是我的问题。
5658

57-
### 3.2 认真的审核
59+
### 3.4 认真的审核
5860

5961
设计文档与代码的审核是高效的质量保证。同时也是学习和沟通的好机会。
6062

61-
### 3.3 程序员参与产品设计并计划开发进度
63+
### 3.5 程序员参与产品设计并计划开发进度
6264

6365
程序员是业务专家和实现者。值得信赖和激发最大潜力。
6466

65-
### 3.4 持续编写相关技术文档
67+
### 3.5 持续编写相关技术文档
6668

6769
开发过程中随时编写相关技术文档,包括软件设计文档,技术选型,最佳实践,常见问题等。这样便于维护和分享。
6870

69-
### 3.5 提倡异步通信
71+
### 3.6 提倡异步通信
7072

7173
程序员被打断一次平均需要 20 分钟才能恢复高效工作状态。尽量采用短信、邮件、Bug 库、代码库事件等异步通信方式沟通或约定面对面交流时间。
7274

7375
## 4 编码规则
7476

75-
### 4.1 自动化的测试是开发编码的一部分
77+
### 4.1 自动化的测试是开发编码的一部分
7678

7779
没有自动测试的代码不算完成。自动化的测试为十次以上的重构带来至关重要的质量保证。
7880

79-
### 4.2 持续重构
81+
### 4.2 持续重构
8082

8183
看到需要改进的代码就立刻重构,目的是保持代码结构的清晰。大概编码的 20% 时间是用于重构的。反之,如果不良代码持续累积,系统变大之后发生质变,很可能无法正常工作或难以修改。同样的修复,后期维护成本是前期的数倍,而且影响更大更难控制。
8284

83-
### 4.3 每个函数不要超过 10 条语句
85+
### 4.3 每个函数不要超过 10 条语句
8486

8587
便于理解和重用。不超过 10 的规则也适用于一个目录不超过 10 个文件或其他类似可拆分的场合。
8688

87-
### 4.4 大的功能需要先设计再编码
89+
### 4.4 大的功能需要先设计再编码
8890

8991
对于稍微复杂的、费时超过一个工作日的功能,先写设计文档。这样通常更快而且质量更好。
9092

91-
### 4.5 一个函数的所有语句都在单一抽象层(Single Level Abstraction)
93+
### 4.5 一个函数的所有语句都在单一抽象层(Single Level Abstraction)
9294

9395
保持程序的结构清晰,而且也容易理解。
9496

95-
### 4.6 重复一次以后再抽象
97+
### 4.6 重复一次以后再抽象
9698

9799
不要一开始就预想各种使用场景来做抽象,低效而且误导。重复一次以后再抽象会更高效。
98100

99-
### 4.7 软件文档和注释
101+
### 4.7 软件文档和注释
100102

101103
每个共用函数和模块都应该有相应 API 文档。源代码有适当的注释。
102104

103-
### 4.8 软件运行日志(Log)是程序的一部份
105+
### 4.8 软件运行日志(Log)是程序的一部份
104106

105107
日志对运维和错误调试至关重要。其层级(Level)和相关信息需要仔细规划。

0 commit comments

Comments
 (0)