[图解]软件开发中的糊涂用语-03-文档

0
00:00:00,280 --> 00:00:04,550
今天呢,我们来看一个糊涂用语,文档

1
00:00:07,810 --> 00:00:10,106
我们经常听到这样的话

2
00:00:10,106 --> 00:00:10,566


3
00:00:10,566 --> 00:00:13,322
你们怎么一上手就写代码

4
00:00:13,322 --> 00:00:14,930
连个文档都没有

5
00:00:16,130 --> 00:00:17,460
或者问一个人

6
00:00:17,770 --> 00:00:19,530
你现在在做什么呀

7
00:00:20,060 --> 00:00:21,970
他说,我在写文档

8
00:00:23,150 --> 00:00:23,466


9
00:00:23,466 --> 00:00:26,310
或者有的人说,代码就是文档

10
00:00:27,690 --> 00:00:31,400
你看,这个文档就出现在类似这样的场合

11
00:00:35,840 --> 00:00:36,690
那么

12
00:00:37,250 --> 00:00:40,110
当前面这些,他说到文档的时候

13
00:00:40,510 --> 00:00:42,070
这个文档是什么呢

14
00:00:42,620 --> 00:00:43,440


15
00:00:43,970 --> 00:00:45,430
可能是这样的

16
00:00:46,590 --> 00:00:51,590
他把所做的工作分成两块

17
00:00:52,180 --> 00:00:54,300
一块是代码

18
00:00:55,920 --> 00:00:57,470
也就是最终

19
00:00:57,790 --> 00:01:01,700
交给计算机来编译运行的那个介质

20
00:01:01,980 --> 00:01:03,820
也就是人跟计算机接口的

21
00:01:04,920 --> 00:01:10,230
最终的介质,给计算机发命令那个介质

22
00:01:12,200 --> 00:01:13,270
这是代码

23
00:01:16,330 --> 00:01:17,610
而剩下的

24
00:01:18,630 --> 00:01:20,340
他通通叫文档

25
00:01:20,730 --> 00:01:22,600
所以文档的意思是

26
00:01:22,880 --> 00:01:25,530
代码之外的所有东西

27
00:01:27,170 --> 00:01:28,830
或者说,他把那个

28
00:01:30,350 --> 00:01:32,760
他用编码工具写的东西

29
00:01:33,210 --> 00:01:35,220
就是代码

30
00:01:36,120 --> 00:01:37,791
用编码工具之外的

31
00:01:37,791 --> 00:01:38,000


32
00:01:38,000 --> 00:01:39,671
比如说他用Word写的

33
00:01:39,671 --> 00:01:41,970
或者用别的什么工具写的

34
00:01:42,490 --> 00:01:42,694


35
00:01:42,694 --> 00:01:45,550
比如说用EA画图什么之类的

36
00:01:46,640 --> 00:01:48,000
那这叫文档

37
00:01:49,600 --> 00:01:51,600
编码之外的所有工作

38
00:01:51,600 --> 00:01:54,200
或者非编码工具产出的东西

39
00:01:55,660 --> 00:01:58,210
但是这个是不对的

40
00:02:02,860 --> 00:02:04,250
那另外一种

41
00:02:04,870 --> 00:02:06,830
或者刚才这一种

42
00:02:07,860 --> 00:02:09,620
这样的一种想法

43
00:02:10,340 --> 00:02:11,720
它本质上

44
00:02:12,500 --> 00:02:13,930
是把代码

45
00:02:14,430 --> 00:02:16,710
放在了最核心的位置

46
00:02:20,080 --> 00:02:21,365
然后呢

47
00:02:21,365 --> 00:02:22,650
把文档

48
00:02:23,310 --> 00:02:25,020
看作是代码的

49
00:02:25,310 --> 00:02:27,430
某些概要视图

50
00:02:28,920 --> 00:02:30,985
所以呢,在他的大脑里面

51
00:02:30,985 --> 00:02:34,910
这个文档那个文档无非是什么

52
00:02:35,820 --> 00:02:39,040
不同级别的代码的视图而已

53
00:02:40,220 --> 00:02:41,580
不同角度

54
00:02:41,860 --> 00:02:43,820
不同级别的代码视图

55
00:02:44,760 --> 00:02:45,920
那很多人

56
00:02:46,740 --> 00:02:51,095
在他大脑里面,文档扮演的是这样一个角色

57
00:02:51,095 --> 00:02:52,930
但是这个是错的

58
00:02:54,370 --> 00:02:56,250
那像这样的误解

59
00:02:56,250 --> 00:02:59,305
不只是一般的开发人员会有

60
00:02:59,305 --> 00:03:01,655
包括一些有名的名人

61
00:03:01,655 --> 00:03:02,830
比如Martin Fowler

62
00:03:04,520 --> 00:03:06,830
他也会有这样误解

63
00:03:06,830 --> 00:03:10,681
你看他在《UML精粹》这个书里面

64
00:03:10,681 --> 00:03:11,708
他说了

65
00:03:11,708 --> 00:03:14,789
UML有三种使用的方式

66
00:03:14,789 --> 00:03:16,072
有草稿的

67
00:03:16,072 --> 00:03:18,640
蓝图的、编程语言的

68
00:03:21,600 --> 00:03:23,590
实际上是把它看作是什么

69
00:03:23,920 --> 00:03:25,279
把UML也好

70
00:03:25,279 --> 00:03:26,185
什么也好

71
00:03:26,185 --> 00:03:28,451
看作是代码的一个视图而已

72
00:03:28,451 --> 00:03:30,264
代码是核心

73
00:03:30,264 --> 00:03:30,490


74
00:03:30,490 --> 00:03:32,530
其他的就是它的视图

75
00:03:32,810 --> 00:03:34,552
无非是粗糙一点的

76
00:03:34,552 --> 00:03:36,076
精细一点的视图

77
00:03:36,076 --> 00:03:36,730
对不对

78
00:03:38,200 --> 00:03:38,417


79
00:03:38,417 --> 00:03:39,720
但这个是错的

80
00:03:40,000 --> 00:03:42,425
Fowler他擅长的是什么

81
00:03:42,425 --> 00:03:46,064
C和D,我们说ABCD嘛

82
00:03:46,064 --> 00:03:47,520
业务建模、需求、分析、设计

83
00:03:47,890 --> 00:03:49,760
他擅长分析和设计

84
00:03:51,210 --> 00:03:52,330
A和B

85
00:03:52,680 --> 00:03:53,801
擅长不擅长

86
00:03:53,801 --> 00:03:54,473
不知道

87
00:03:54,473 --> 00:03:56,940
但我没有见过他写的那些

88
00:03:57,350 --> 00:03:59,124
怎么做业务建模

89
00:03:59,124 --> 00:04:01,119
做需求的文章没有

90
00:04:01,119 --> 00:04:02,893
书也没有

91
00:04:02,893 --> 00:04:04,002
都是说什么

92
00:04:04,002 --> 00:04:05,998
我要做一个什么系统

93
00:04:05,998 --> 00:04:09,990
然后就开始,里面有哪些类什么之类的

94
00:04:11,540 --> 00:04:13,453
这系统怎么样好卖

95
00:04:13,453 --> 00:04:15,791
怎么样去描述这个需求

96
00:04:15,791 --> 00:04:17,280
怎么样怎么样

97
00:04:18,190 --> 00:04:24,300
Fowler应该是很少看到他有这方面的阐述

98
00:04:26,720 --> 00:04:26,977


99
00:04:26,977 --> 00:04:28,525
不只是Fowler了

100
00:04:28,525 --> 00:04:28,782


101
00:04:28,782 --> 00:04:30,330
其他的像那个

102
00:04:30,660 --> 00:04:32,873
一些著名的敏捷的书也是

103
00:04:32,873 --> 00:04:35,938
一开始就说我要做一个什么系统

104
00:04:35,938 --> 00:04:36,790
功能是这个

105
00:04:37,070 --> 00:04:39,040
也就是说,需求都已经确定了

106
00:04:39,040 --> 00:04:40,830
然后再说我打算怎么做

107
00:04:40,830 --> 00:04:41,010


108
00:04:42,820 --> 00:04:44,970
那就已经到C和D了

109
00:04:45,570 --> 00:04:47,270
AB不擅长

110
00:04:49,060 --> 00:04:52,070
那像这样的误解有什么危害呢

111
00:04:53,300 --> 00:04:54,460
危害就是

112
00:04:54,790 --> 00:04:56,170
思维颠倒

113
00:04:58,760 --> 00:05:01,290
会让开发人员,他会怎么做

114
00:05:01,290 --> 00:05:02,440
他先拍脑袋

115
00:05:02,440 --> 00:05:03,360
先写代码

116
00:05:04,660 --> 00:05:05,446
然后呢

117
00:05:05,446 --> 00:05:09,380
再从实现去反推其他工作流的内容

118
00:05:11,130 --> 00:05:13,890
那这种我经常碰到的

119
00:05:14,170 --> 00:05:15,880
像右边这个场景

120
00:05:15,880 --> 00:05:18,445
就是我经常碰到的一种情况

121
00:05:18,445 --> 00:05:21,010
比如说,我跟那个开发人员说

122
00:05:21,750 --> 00:05:23,026
根据愿景什么的

123
00:05:23,026 --> 00:05:25,260
你这个系统不需要有这个用例的

124
00:05:25,650 --> 00:05:27,500
或者说不需要有这个功能的

125
00:05:27,790 --> 00:05:28,014
开发人员说

126
00:05:28,014 --> 00:05:28,462


127
00:05:28,462 --> 00:05:28,910


128
00:05:29,190 --> 00:05:30,627
有的,我都写好了

129
00:05:30,627 --> 00:05:34,118
你看,我运行给你看,系统就有这个功能

130
00:05:34,118 --> 00:05:35,350
就有这个用例

131
00:05:37,440 --> 00:05:40,034
系统应不应该有这个用例

132
00:05:40,034 --> 00:05:42,157
应该从什么来看

133
00:05:42,157 --> 00:05:43,808
从卖的角度来看

134
00:05:43,808 --> 00:05:44,280
你从

135
00:05:44,790 --> 00:05:46,892
业务流程的角度看

136
00:05:46,892 --> 00:05:48,995
系统提供这个功能

137
00:05:48,995 --> 00:05:50,310
提供这个用例

138
00:05:50,640 --> 00:05:53,660
到底有没有给我们的组织带来好处

139
00:05:54,480 --> 00:05:58,210
涉众的利益有没有得到改善

140
00:05:58,950 --> 00:06:01,510
从这个角度,该有就有,没有就没有

141
00:06:01,510 --> 00:06:02,059
对不对

142
00:06:02,059 --> 00:06:04,436
不是说你写好了代码,能运行了

143
00:06:04,436 --> 00:06:06,082
所以它就有这个功能

144
00:06:06,082 --> 00:06:07,180
不是这样的

145
00:06:10,660 --> 00:06:13,244
那另外一种就是这个

146
00:06:13,244 --> 00:06:15,570
比如说,我评审那个

147
00:06:15,850 --> 00:06:17,610
开发人员的

148
00:06:18,430 --> 00:06:21,271
类的设计

149
00:06:21,271 --> 00:06:22,850
然后呢

150
00:06:23,130 --> 00:06:25,910
我就说,这两个类关系不应该是泛化

151
00:06:25,910 --> 00:06:27,300
应该是关联才对的

152
00:06:29,090 --> 00:06:31,015
然后开发人员就说,是泛化的

153
00:06:31,015 --> 00:06:32,940
你不信,我打开代码给你看

154
00:06:32,940 --> 00:06:34,690
代码,你看我都写了

155
00:06:35,140 --> 00:06:37,198
A扩展B

156
00:06:37,198 --> 00:06:38,570
A继承B

157
00:06:39,110 --> 00:06:40,750
你看,不是泛化吗

158
00:06:41,900 --> 00:06:42,573
你再不信

159
00:06:42,573 --> 00:06:44,930
我把它逆转成UML类图给你看

160
00:06:45,400 --> 00:06:47,846
你都先写好代码了

161
00:06:47,846 --> 00:06:49,750
说人是猪的一种

162
00:06:50,990 --> 00:06:51,715
写好了

163
00:06:51,715 --> 00:06:53,650
而且编译运行了

164
00:06:54,060 --> 00:06:54,612
然后呢

165
00:06:54,612 --> 00:06:55,716
再从这个反推

166
00:06:55,716 --> 00:06:57,189
你看,我代码都写了

167
00:06:57,189 --> 00:06:58,478
人是猪的一种嘛

168
00:06:58,478 --> 00:07:01,240
所以呢,我图里面画,人是猪的一种

169
00:07:02,540 --> 00:07:03,760
那是没错的

170
00:07:06,560 --> 00:07:06,770


171
00:07:06,770 --> 00:07:08,450
很多人会这样想

172
00:07:08,450 --> 00:07:09,290
包括你看

173
00:07:09,920 --> 00:07:13,970
我们现在经常看到一些领域系统设计的文章

174
00:07:14,690 --> 00:07:16,583
整篇文章就是泛泛而谈

175
00:07:16,583 --> 00:07:17,530
胡说八道的

176
00:07:17,820 --> 00:07:19,050
什么也没说

177
00:07:20,130 --> 00:07:21,684
但你不服不行哦

178
00:07:21,684 --> 00:07:22,794
人家有代码

179
00:07:22,794 --> 00:07:25,680
一开始就给你一个代码的链接

180
00:07:26,040 --> 00:07:26,790


181
00:07:27,070 --> 00:07:29,220
他有代码哦

182
00:07:30,450 --> 00:07:32,290
你看,我代码都写好了

183
00:07:32,650 --> 00:07:34,275
你代码写好能运行了

184
00:07:34,275 --> 00:07:35,720
能说明什么问题

185
00:07:36,060 --> 00:07:39,670
能说明你这里面逻辑的组织是合理的吗

186
00:07:40,220 --> 00:07:42,040
能说明你这个需求

187
00:07:42,750 --> 00:07:44,366
的推导是正确的吗

188
00:07:44,366 --> 00:07:45,174
不能的

189
00:07:45,174 --> 00:07:45,780
对不对

190
00:07:45,780 --> 00:07:46,992
那我们很多人

191
00:07:46,992 --> 00:07:48,810
因为他只会写代码

192
00:07:50,420 --> 00:07:51,053
然后呢

193
00:07:51,053 --> 00:07:52,531
随便拍脑袋

194
00:07:52,531 --> 00:07:54,220
写一段代码,能运行了

195
00:07:54,220 --> 00:07:55,910
他就以这个来证明

196
00:07:56,540 --> 00:07:59,084
他前面的工作都是对的

197
00:07:59,084 --> 00:08:00,010
不行的

198
00:08:03,390 --> 00:08:06,306
所以呢,这里面的区别在于什么

199
00:08:06,306 --> 00:08:08,550
我们要学会从ABCD

200
00:08:09,460 --> 00:08:10,613
这样来判断

201
00:08:10,613 --> 00:08:12,460
我们思考的内容

202
00:08:12,740 --> 00:08:13,522
业务建模

203
00:08:13,522 --> 00:08:14,696
需求、分析、设计

204
00:08:14,696 --> 00:08:17,630
这样来思考我们的内容,不要看形式

205
00:08:18,800 --> 00:08:20,619
不能说,我正在编码

206
00:08:20,619 --> 00:08:21,983
我正在敲代码

207
00:08:21,983 --> 00:08:24,030
所以呢,我做的就是D

208
00:08:24,500 --> 00:08:24,715


209
00:08:24,715 --> 00:08:26,006
设计,不一定的

210
00:08:26,006 --> 00:08:28,589
很可能你这时候想的是需求

211
00:08:28,589 --> 00:08:29,020
对吧

212
00:08:29,340 --> 00:08:30,626
可能想的是分析

213
00:08:30,626 --> 00:08:32,280
可能甚至是业务建模

214
00:08:35,840 --> 00:08:37,130
而且怎么样

215
00:08:37,410 --> 00:08:39,390
即使你唯一的工具

216
00:08:40,410 --> 00:08:42,010
是编码的工具

217
00:08:42,490 --> 00:08:45,932
并不代表说你不能用编码工具来写需求

218
00:08:45,932 --> 00:08:46,540
对不对

219
00:08:46,540 --> 00:08:48,970
你把整个系统作为研究对象

220
00:08:49,470 --> 00:08:50,070


221
00:08:50,490 --> 00:08:51,613
那什么是需求

222
00:08:51,613 --> 00:08:53,299
需求就是系统的功能嘛

223
00:08:53,299 --> 00:08:57,420
系统的责任,你把整个系统作为研究对象来写代码

224
00:08:57,700 --> 00:08:59,620
那它暴露的那个

225
00:09:00,340 --> 00:09:00,911
服务

226
00:09:00,911 --> 00:09:03,198
暴露的接口不就是系统的需求吗

227
00:09:03,198 --> 00:09:03,770
对不对

228
00:09:05,910 --> 00:09:08,487
如果你只有代码工具

229
00:09:08,487 --> 00:09:10,550
你也可以在代码里面表达需求

230
00:09:11,660 --> 00:09:14,460
只要你研究或者思考的问题

231
00:09:14,760 --> 00:09:16,830
是需求的问题就可以

232
00:09:17,570 --> 00:09:18,430
同样

233
00:09:19,270 --> 00:09:21,500
你看到有人在画UML图

234
00:09:21,780 --> 00:09:22,430


235
00:09:23,090 --> 00:09:24,630
那他一定就是做分析

236
00:09:25,490 --> 00:09:27,241
做需求,做什么吗

237
00:09:27,241 --> 00:09:28,020
不一定的

238
00:09:28,300 --> 00:09:32,500
很可能这个UML图就是它的代码

239
00:09:32,780 --> 00:09:32,974


240
00:09:32,974 --> 00:09:34,530
比如说,他用Rhapsody

241
00:09:34,810 --> 00:09:36,470
来画状态机图

242
00:09:36,470 --> 00:09:37,300
画完了

243
00:09:38,040 --> 00:09:40,320
然后仿真

244
00:09:40,600 --> 00:09:41,550
没问题了

245
00:09:41,830 --> 00:09:44,083
他就直接运行了

246
00:09:44,083 --> 00:09:44,760
对不对

247
00:09:45,330 --> 00:09:47,480
他不用去写那个文本的代码

248
00:09:47,480 --> 00:09:49,810
文本代码都已经隐藏在后面了

249
00:09:49,810 --> 00:09:49,989


250
00:09:49,989 --> 00:09:53,752
背后的C/C++代码都隐藏在状态机后面了

251
00:09:53,752 --> 00:09:56,978
他所有的逻辑都在状态机上表达的嘛

252
00:09:56,978 --> 00:09:58,950
这个时候,所谓的状态机图

253
00:09:59,330 --> 00:10:00,900
就已经是代码了

254
00:10:00,900 --> 00:10:02,470
因为它是这个人

255
00:10:02,750 --> 00:10:03,650

256
00:10:04,030 --> 00:10:05,150
计算机

257
00:10:05,500 --> 00:10:06,630
交接的

258
00:10:07,060 --> 00:10:08,131
那个介质了

259
00:10:08,131 --> 00:10:14,560
最终的介质,因为人并不需要再去编辑C/C++文本

260
00:10:15,460 --> 00:10:16,570


261
00:10:19,790 --> 00:10:22,331
所以呢,我们了解了这个之后

262
00:10:22,331 --> 00:10:25,460
就不要再说我在写文档这种废话了

263
00:10:26,020 --> 00:10:26,900


264
00:10:27,180 --> 00:10:28,433
这种意思是

265
00:10:28,433 --> 00:10:30,939
我正在用Word来工作而已

266
00:10:30,939 --> 00:10:31,190


267
00:10:31,470 --> 00:10:33,188
你要说内容

268
00:10:33,188 --> 00:10:34,692
我在做业务建模

269
00:10:34,692 --> 00:10:38,130
我在思考需求问题,要这样说

270
00:10:38,410 --> 00:10:38,944
然后呢

271
00:10:38,944 --> 00:10:41,258
你在上面加一些废话也可以的

272
00:10:41,258 --> 00:10:42,860
我在写业务建模文档

273
00:10:43,140 --> 00:10:43,487


274
00:10:43,487 --> 00:10:45,570
这也可以对吧

275
00:10:45,850 --> 00:10:47,565
或者你加多点废话

276
00:10:47,565 --> 00:10:51,211
我在写需求文档规约说明书,都可以

277
00:10:51,211 --> 00:10:53,355
至少内容这个要有

278
00:10:53,355 --> 00:10:54,427
这个下划线

279
00:10:54,427 --> 00:10:55,500
这个要有,你在干嘛

280
00:10:55,780 --> 00:10:56,044


281
00:10:56,044 --> 00:10:58,690
要有内容在里面

282
00:10:59,010 --> 00:10:59,197


283
00:10:59,197 --> 00:11:00,880
你这个形式什么

284
00:11:02,090 --> 00:11:02,891
都好说

285
00:11:02,891 --> 00:11:03,493
内容

286
00:11:03,493 --> 00:11:05,498
你难道你不写文档不行吗

287
00:11:05,498 --> 00:11:06,901
我嘴巴说不行吗

288
00:11:06,901 --> 00:11:09,708
我嘴巴描述一下我们组织的流程

289
00:11:09,708 --> 00:11:10,910
那也是建模

290
00:11:10,910 --> 00:11:11,512
对不对

291
00:11:11,512 --> 00:11:13,316
那也是在做业务建模

292
00:11:13,316 --> 00:11:15,922
我嘴巴说一下系统有什么功能

293
00:11:15,922 --> 00:11:17,727
那也是在做需求的

294
00:11:17,727 --> 00:11:20,734
不一定要写一个文档或者画一个图

295
00:11:20,734 --> 00:11:20,934


296
00:11:20,934 --> 00:11:23,140
关键你讲的内容是什么

297
00:11:23,560 --> 00:11:24,968
把内容加上

298
00:11:24,968 --> 00:11:26,780
不要说那个形式

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值