Skip to content

Commit f7e3337

Browse files
ying.liuying.liu
authored andcommitted
revise
1 parent f1702d5 commit f7e3337

File tree

1 file changed

+30
-36
lines changed

1 file changed

+30
-36
lines changed

developer-working-guide.md

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
11
# 程序员工作指南
22

3-
用软件创造未来的程序员,勤劳快乐,责任重大。环顾四周,多数软件团队的研发能力相对计算机的巨大潜力和广泛的业务需求有巨大鸿沟,开发效率和软件的质量令人忧伤。稍感安慰的是半个多世纪的编程历史积累了一些最佳实践(best practices)。遵守基于这些最佳实践的规则能大大改善程序员的工作效率。
4-
5-
持续的、高质效的软件开发能力是现代企业的核心竞争力,可以带来企业业务和个人生活质量的指数提高。JUST DO IT! 何乐不为?
3+
持续的、高质效的软件开发能力是现代企业的核心竞争力。用软件创造未来的程序员责任重大,任劳任怨。可是环顾四周,多数软件团队的研发能力相对计算机的巨大潜力和广泛的业务需求有巨大鸿沟,开发效率低,软件的质量令人忧伤。稍感安慰的是半个多世纪的编程历史积累了一些最佳实践(best practices)。遵守基于这些最佳实践的规则能大大改善程序员的工作效率。
64

75
## 1 前提
86

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

119
1. 真实和持久的幸福源于和一群优秀的同事接受挑战、创造和分享非凡价值。
1210

13-
1. 程序员是务实的(pragmatic)成年人,肩负责任,值得信任。
11+
1. 程序员是务实的(pragmatic)成年人,值得信任。
1412

1513
1. 规则是用来打破的,但需要足够的事实理由。
1614

17-
1. 所有规则都是明确可执行的。
18-
19-
1. 软件就是业务,软件开发是不间断的连续过程,直到企业/程序员/用户的生命尽头。
15+
1. 软件就是业务,软件开发是不间断的连续过程,直到企业/程序员/用户的生命尽头。在心智和身体上都需要有长远准备。
2016

21-
1. 每一行语句都会有 10 次以上的修改,可维护性仅次于正确性
17+
1. 每一行语句都会有 10 次以上的修改,可维护性是根本
2218

2319
1. 有自动测试的软件功能才算完成。
2420

@@ -28,9 +24,7 @@
2824

2925
1. 小就是美。便于理解和重用。
3026

31-
1. 程序员拥有工作需要的所有资源,尤其是项目相关信息。
32-
33-
1. 技术的目的是为了业务。程序员必须是相关业务领域的专家。
27+
1. 程序员拥有工作需要的所有资源,尤其是全局信息。
3428

3529
## 2 基本规则
3630

@@ -46,61 +40,61 @@
4640

4741
体魄健康,头脑才灵。
4842

49-
### 2.4 一次完成一个任务。
43+
### 2.4 程序员是业务专家
5044

51-
避免上下文切换带来高效率。一个完成的任务好过三个未完成的任务。过程高效而且结果可用。
45+
技术的目的是为了业务。熟悉业务和市场趋势才能创造最大价值。
46+
47+
### 2.5 一次完成一个任务。
48+
49+
一个完成的任务好过三个未完成的任务。避免了上下文切换,过程高效而且结果可用。
5250

5351
## 3 团队规则
5452

55-
### 3.1 非常认真的审核设计文档与代码。
53+
### 3.1 分享团队管理职责
54+
55+
团队的沟通、进度更新、不重犯错的方法、业务的改善等等,都是每个人的责任。大家分享团队管理职责,轮流主持各种会议。团队的每个问题都是我的问题。
56+
57+
### 3.2 认真的审核。
5658

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

59-
### 3.2 程序员参与产品设计并计划开发进度。
61+
### 3.3 程序员参与产品设计并计划开发进度。
6062

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

63-
### 3.3 持续编写相关技术文档。
65+
### 3.4 持续编写相关技术文档。
6466

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

67-
### 3.4 所有 bug 都在代码库管理。
68-
69-
相关的讨论和解决方案都有历史记录。
70-
7169
### 3.5 提倡异步通信。
7270

73-
程序员被打断一次平均需要 20 分钟才能恢复高效工作状态。尽量采用短信、邮件、代码库事件等异步通信方式沟通或约定面对面交流时间。
74-
75-
### 3.6 分享团队管理职责
76-
77-
团队的沟通、进度更新、不重犯错的方法、业务的改善等等,都是每个人的责任。大家分享团队管理职责,轮流主持各种会议。团队的每个问题都是我的问题。
71+
程序员被打断一次平均需要 20 分钟才能恢复高效工作状态。尽量采用短信、邮件、Bug 库、代码库事件等异步通信方式沟通或约定面对面交流时间。
7872

7973
## 4 编码规则
8074

8175
### 4.1 自动化的测试是开发编码的一部分。
8276

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

85-
### 4.2 大的功能需要先设计再编码
79+
### 4.2 持续重构
8680

87-
对于稍微复杂的、费时超过一个工作日的功能,先写设计文档。这样通常更快而且质量更好
81+
看到需要改进的代码就立刻重构,目的是保持代码结构的清晰。大概编码的 20% 时间是用于重构的。反之,如果不良代码持续累积,系统变大之后发生质变,很可能无法正常工作或难以修改。同样的修复,后期维护成本是前期的数倍,而且影响更大更难控制
8882

89-
### 4.3 重复一次以后再抽象
83+
### 4.3 每个函数不要超过 10 条语句
9084

91-
不要一开始就预想各种使用场景来做抽象,低效而且误导。重复一次以后再抽象会更高效
85+
便于理解和重用。不超过 10 的规则也适用于一个目录不超过 10 个文件或其他类似可拆分的场合
9286

93-
### 4.4 持续重构
87+
### 4.4 大的功能需要先设计再编码
9488

95-
看到需要改进的代码就立刻重构,目的是保持代码结构的清晰。大概编码的 20% 时间是用于重构的。反之,如果不良代码持续累积,系统变大之后发生质变,很可能无法正常工作或难以修改。同样的修复,后期维护成本是前期的数倍,而且影响更大更难控制
89+
对于稍微复杂的、费时超过一个工作日的功能,先写设计文档。这样通常更快而且质量更好
9690

97-
### 4.5 每个函数不要超过 10 条语句
91+
### 4.5 一个函数的所有语句都在单一抽象层(Single Level Abstraction)
9892

99-
便于理解和重用。不超过 10 的规则也适用于一个目录不超过 10 个文件或其他类似可拆分的场合
93+
保持程序的结构清晰,而且也容易理解
10094

101-
### 4.6 一个函数的所有语句都在单一抽象层(Single Level Abstraction)
95+
### 4.6 重复一次以后再抽象
10296

103-
保持程序的结构清晰,而且也容易理解
97+
不要一开始就预想各种使用场景来做抽象,低效而且误导。重复一次以后再抽象会更高效
10498

10599
### 4.7 软件文档和注释。
106100

0 commit comments

Comments
 (0)