我们很多同学拿到需求,习惯上手就撸代码,业务记在脑子里,设计记在脑子里,踌躇满志要一口气就写完,吭哧吭哧干得热火朝天。三层架构、设计模式、DDD 先架构一波,代码写得差不多了:我CA,业务链过长脑子里的设计错了,改设计。 怎么改全在脑子里改,改完了继续直接撸代码,以此往复累得不行。
有次给个需求给个兄弟,我说这个需求只有一周时间,细节点多比较复杂,你可以写个详细设计不容易出错。兄弟给我讲:时间这么少哪有时间写文档?我当时有点愣。
其实我发现这个现象不仅是少数,大多数技术同学都忘记了软件工程中,讲开发一个项目的主要过程:
1. 需求调研
2. 可行性分析
3. 立项
4. 组建项目组,指定项目经理(负责人)
5. 需求分析
6. 概要设计
7. 创建WBS
8. 详细设计
9. .……
大家不用全部都看重点看看 5.6.7.8 , 这四个节点,都是要输出文档的,为什么?文档究竟有什么作用?讲讲我的理解,如下 :
文档除了项目管理上讲的那些组织过程资产啊,交流之用啊、契约等之外,还有一个很大的作用,就是帮助我们技术同学自己。曾经有一位前辈跟我说,写文档是写给自己看的,这句话我记住了并且它成为了我的财富。 我其实也是过来人刚开始的时候不写文档不写设计,后来我发现写文档真香。我将这个经验总结成《532 法则》:50 % 的时间用来写文档, 30% 的时间写逻辑,20%的时间写单测。可能会有所偏颇但不影响,我们不妨以详细设计为案例来拆解下:
=> 写详细设计文档的时候我们用的是通用语言来描述业务,包含了:理解业务、思考逻辑、逻辑转换成通用语言
=> 直接写代码我们用的是编程语言,包含了:理解业务、思考逻辑、逻辑转换成通用语言,通用语言转成编程语言
这两个基本上差不多,但是前者并发的只有三件事, 后者并发的却有四件事,我们的大脑在相同的时间内压力增加了。所以负面情绪更容易滋生。而且一旦出现设计错误,要按“理解业务、思考逻辑、逻辑转换成通用语言,通用语言转成编程语言” 这个模型再来一遍, 来得越多消耗越大。这就是为什么我鼓励写文档的原因,很多同学觉得写文档是写给别人看的,是额外的工作量,其实不完全是,文档就象是小黄鸭,也是帮助我们自己理清思路,降低成本的。
计算机为什么在数据处理上比人要快,一是因为它是机器不知道累,二是因为它分内存+磁盘,它将次要信息存储在磁盘,需要用它的时候才加载到内存,内存就象我们的大脑,磁盘就象我们的文档。写在那它就持久化了不用的时候不需要担心它会丢失记不住,内存用于高效运算是宝贵的资源,要善于利用,这也是我鼓励写文档的一个终极原因。
最后总结下:
写详细设计不只是为了公司,也是为了自己
写详细设计有助于理清思路,文档相当于一个小黄鸭
对一个成熟的程序员来说,写好详细设计了开发工作基本上就完成 50%了
文档还是有用的,加油