十多年的程序员生涯中,我写过大量的文档,肯定不是不写文档。
文档类型大概分为三类,写的最多的是功能/模块设计文档,这个文档是对应产品提供的需求文档,把产品需求拆解成功能点,以及各功能点的实现方案。
偶尔也会写系统设计文档,但是这类文档有模板,这种要求比较高的文档写作难度反而不大。
第二类是面向老板的宣传文档,这类文档源于老板的临时性需求,比如要求参加某某展会,需要体验技术优势,这种文档属于命题作文,如果真有技术亮点那还好办。如果本身没有亮点,那就比较头疼了,只能胡扯一些竞品的优势,然后说自己的产品跟竞品是相似的。
第三类是面向程序员的算法/代码描述文档,对于比较复杂的算法需要做很详细的描述,否则接手的人根本没有办法理解你的代码。这类文档没有固定格式,有的人用word,有的人用PPT。
我最喜欢将这类文档直接写在代码里。有人说,这不就是注释吗?
这类文档很长的时候,我会单独添加一个markdown格式的文本文件到代码库,因为我发现几乎每一次我看到别人写的比较复杂的代码,而不得不去寻找对应的说明文档时,都要付出极大的精力,因为文档总是因为各种原因“丢失”。所以,我习惯将文档直接跟代码放在一起。
最后,每个公司对于文档的要求差别非常大,比如外企对文档的格式要求严格,但是对于内容则无人审查,也就是说你只要按时提交了文档就行,几乎没有第二个人会去检查。有的公司管理比较粗放,只对第二类文档有需求。
但是,不论在哪里,最能提现程序员专业性的第一类功能设计文档都是最不受重视的,文档的作者往往就是文档最后的阅读者。一方面是需求变化很快,产品经理也不会每次都更新需求文档,而产品也“看不懂”设计文档。另一方面,同是程序员我也不看设计文档,看文档不如直接看代码结构来得快,而且文档经常跟代码有出入,最终还是要以代码为准,只看文档反而会被误导。
其余两类文档,我都比较重视,因为老板的炫技文档是有可能影响晋升的,自然要重视,但是这类文档往往是程序员不太擅长的类型,写起来真的很痛苦。
写在代码中的文档我也比较重视,因为这是同行们要看到东西,而且往往也是最有用的文档,不希望被人骂,所以这个文档也要认真对待。
所以,很多程序员所谓的不写文档,其实可以理解为这类文档根本就没人看,对于写惯了代码的人来说,写没人看又不能自动执行的东西,真是不大情愿的一件事。