软件心学格物致知篇(7)软件开发文档写什么

软件心学格物致知篇(7)软件开发文档写什么

前言

当今约束大家生产力的有哪些因素?是编程语言?开发框架?开发IDE?还是自身迫切需要更高水平的技能?

好像上面的每一项技术都在不断发展,也在不断的为我们生产了提高做贡献,其中还孕育出了几家很不错的公司。

但是关于写文档这块好像这么多年从未有所大的变化,上一次关于文档话题的激烈争辩貌似还是雪鸟会议上提出的敏捷宣言。

image.png

文档问题与期望

在大多数的项目中,文档的编写本身都是作为一项独立的活动进行的。或是在其他活动之前,或是在其他活动之后。总之它无法根据其他活动的变更而进行自动变更。

文档依赖手工编写,不同的人由于文字表达能力、习惯等不同吗,写出的文档形式和内容都有差异。同样会给不同的阅读者带来不同的体验。

很多人不喜欢写文档,其中一个原因是因为文档本身就是知识的冗余。文档中表达的知识特,特别是业务逻辑会使用代码在软件中再表达一次。有的甚至在不同文档中还要多次表达相同的知识。

文档通常被当作其他活动的附属物,主要是为了应付某些工作,早已失去了其真实价值。长此以往造成恶性循环。

此外错误的文档有时候不仅仅无法带来帮助,可能还会带来误导性帮助。一些错误的知识会引发比没有文档还严重的问题。

所以你要维护高质量的文档,你或组织必须投入非常多的资源。组织和我们每个人一样,很多时候不愿意付出这些资源。

说了这么多编写好文档的困难和问题,那么大家心目中理想的文档也呼之欲出了,我们期望中的好文档应该具备:实用、最新、成本低、有趣的特征。

image.png

这篇文章并不谈如何写出具备这几个特征的好文档,而是先谈谈文档里值得被写入的是什么。只有先理解什么东西是应该存储进文档。文档的价值是什么,我们下一步再考虑如果写好他它。

文档编写的是知识

软件开发过程需要文档,确切的说,工程师需要的是记录在文档里的知识而并非信息。如果文档里只有信息,那么信息还需要被进一步加工成知识,然后工程师们根据知识来进行决策。

那么问题来了,如果文档里只有信息,不同的人对信息进行加工的能力是不同的。这个过程会受到加工人的知识体系、职业背景、思维偏好等影响。

所以软件需求规格说明书或产品规格说明书中记录的是关于产品的知识,概要设计文档或详细设计文档中记录的是关于软件架构、接口、数据库等如何设计系统的知识。

在编写文档的知识,我们应该尽量让大脑中的知识输出到文档里,而不是在文档里堆砌信息。否则一旦旧的人员离开了,他们就会带着知识一并离开。而新成员只能捧着一堆包含信息的文档,组织将永远失去那些对做决策有重大作用的知识。

image.png

软件开发的源代码也是一类文档,如果源代码是给机器看的,那么源代码只要作到信息这个程度就够了,因为机器只会按照预先设定好的逻辑(各种功能不同寄存器各司其职来完成)去执行。

但是源代码的受众其实是开发者,是人,所以源代码应该以知识的方式呈现,需要遵循一定的规范、设计、注释等。源代码的知识是为了让其他人了解已经完成的工作,以便他们更好、更快地完成之后的工作。

当源代码文档缺失知识时,就会导致两种后果:浪费时间和次优决策。

我们需要花费时间去寻找丢失的知识,还不一定找的回,本来这个时间可以更好的投入到其他方面的改进上。

我们每次做的决策因为缺乏足够正确的知识,就会变成次优决策,本来我们可以有更好的决策,让系统更好,成本更低。

随着系统开发时间的推移,浪费时间和次优决策的影响会不断叠加。系统上每一次决策都劣于前一次,最终我们的系统积重难返,开发者们别无选择,只能选择不再维护并重新开发。

从某种意义上讲,源代码其实是开发者头脑中的心智模型。

image.png

存储后还要传递

既然文档中记录的是知识,是不是就够了?

当然不是!如果文档只记录知识,那么只要书写人自己看懂就行了。

文档更重要价值体现在把存储的知识传递出去!

那么哪些知识值得被记录到文档里进行传递呢?大概有以下三种:

  • 很多人感兴趣的知识
  • 长期令人感兴趣的知识
  • 有价值或重要的知识

另外为了将文档中存储的知识更好的传递出去,我们为此还发明了各种把文档写得更方便阅读以便于更有效传播的方法:MECE法则、总分总结构、图文并茂、逻辑清晰无歧义等等。

小结

请记住文档里应该记录存储的是知识而不是信息。

人类文明的传承依赖的就是知识的传递,文档是其中一个很重要载体。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

error while loading shared libraries 找不到动态库问题如何解决

在使用 c 或 c 开发应用时,在启动程序时,有时会遇到这个错误,找不到动态库。这个时候,我们使用 ldd 来查看,发现可执行文件依赖的动态库显示为 not found。 1 实验代码 使用如下 3 个文件做实验。 hello.h 中声明了函…

基于51单片机俄罗斯方块小游戏

基于51单片机俄罗斯方块游戏 (仿真+程序) 功能介绍 具体功能: 1.用LCD12864显示游戏界面; 2.用四个按键控制游戏(左、右移、下移、翻转); 3.游戏规则和平时玩的俄罗斯方块一样&a…

基于vue的音乐播放器的设计与实现(论文+源码)_kaic

摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮或者怕火,不容易备份,需要花费大量的人员和资金来管理用纸质文…

C51学习归纳9 --- I2C通讯学习(重点)

首先,我自己学习过以后的直观感觉,通信协议是单片机的灵魂之一,只有规定好了通信协议我们才能够正确的接收到信息,才能实现更加深入的研究。所以这一部分是需要好好学习的。 本节借助一个可存储的芯片AT24C02,进行在I2…

C++网络编程基础

文章目录 协议局域网通信IP 地址网络通信的本质tcp 和 udp 协议网络字节序网络主机数据转化接口 协议 协议:收到数据后,多出来的那一部分,也叫一种 “约定”,一整套的自硬件到软件,都有协议,需要有人定制&a…

【清华大学】《自然语言处理》(刘知远)课程笔记 ——NLP Basics

自然语言处理基础(Natural Language Processing Basics, NLP Basics) 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言…

关于Latitude5490的问题Bios引导问题

关于Latitude5490的问题Bios引导问题 一、问题描述1、第一次维修:2、第二次维修: 二、捣鼓过程1、Latitude 5490的Bios引导2、捣鼓硬盘分区格式3、使用PE修复引导4、处理方法 三、参考链接 一、问题描述 本人原本电脑型号为Latitude 5480,电…

归并排序——逆序数对的统计

逆序数对的统计 题目描述 运行代码 #include <iostream> using namespace std; #define LL long long const int N 1e5 5; int a[N], tmp[N]; LL merge_sort(int q[], int l, int r) {if (l > r)return 0; int mid l r >> 1; LL res merge_sort(q, l,…

OPPO高级项目经理曹帆受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 OPPO互联网服务系统内容生态中心高级互联网项目经理曹帆先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“加、减、乘、除——激活项目团队效能”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议…

初中英语优秀作文分析-004My favorite Chinese traditional story-我最喜欢的中国传统故事

PDF格式公众号回复关键字:SHCZYF004 记忆树 1 There are many traditional stories in China. 翻译 中国有很多传统故事 简化记忆 传统故事 句子结构 There be句型 many traditional stories 名词短语 很多传统故事&#xff0c;in China 介词短语&#xff0c;在中国 …

Docker:利用Docker搭建一个nginx服务

文章目录 搭建一个nginx服务认识nginx服务Web服务器反向代理服务器高性能特点 安装nginx启动nginx停止nginx查找nginx镜像拉取nginx镜像&#xff0c;启动nginx站点其他方式拉取nginx镜像信息通过 DIGEST 拉取镜像 搭建一个nginx服务 首先先认识一下nginx服务&#xff1a; NGI…

【Linux】进程6——环境变量

1.什么是环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 比如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可以链接成功&…

什么是档案数字化管理

档案数字化管理指的是将传统的纸质档案转换为数字形式&#xff0c;并通过电子设备、软件和网络技术进行管理和存储的过程。 档案数字化管理包括以下几个步骤&#xff1a; 1. 扫描和数字化&#xff1a;将纸质档案通过扫描仪转换为数字图像或文档。可以使用OCR&#xff08;光学字…

使用C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

Java 期末复习 习题集

&#x1f496; 单选题 &#x1f496; 填空题 &#x1f496; 判断题 &#x1f496; 程序阅读题 1. 读代码写结果 class A {int m 5;void zengA(int x){m m x;}int jianA(int y){return m - y;} }class B extends A {int m 3;int jianA(int z){return super.jianA(z) m;} …

笔记本充电出现了问题。

不知道为什么。电池充电图片一直显示的空。谁能救救我&#xff01;

[图解]建模相关的基础知识-07

1 00:00:04,710 --> 00:00:08,900 这是划分&#xff0c;下一个是有序对的概念 2 00:00:11,720 --> 00:00:13,800 我们知道集合是不分顺序的 3 00:00:15,090 --> 00:00:18,200 我们花括号来代表集合的话 4 00:00:18,210 --> 00:00:21,000 AB花括号等于BA花括号 …

【python报错】关于 xlrd.biffh.XLRDError: Excel xlsx file; not supported 解决方法【已解决】

【Python报错】关于xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方法【已解决】 在使用Python进行数据分析时&#xff0c;经常需要处理Excel文件。xlrd库是一个流行的用于读取Excel文件的库&#xff0c;但如果你在使用xlrd打开.xlsx文件时遇到了xlrd.biffh.XLRDE…

aabb c++

题目描述 查找形如"aabb"的四位完全平方数&#xff0c;也即前两位数字相同&#xff0c;后两位数字也相同。 输入 无 输出 若干行&#xff0c;每行一个符合条件的四位数&#xff08;从小到大&#xff09;。 分析&#xff1a; 完全平方数&#xff1a; &#xff…

两款好用的IOS、Android图片处理应用

GIF 小助手 GIF工具包是一个简单实用的GIF动画编辑器&#xff0c;目前仅支持IOS平台。 使用该软件&#xff0c;可以将多个图像、视频和现场照片创建为gif。 主要功能&#xff1a; 多种输入源&#xff1a;用户可以将多个图片、视频或Livephoto转换成GIF动图。 编辑功能&#…