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

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

前言

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

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

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

image.png

文档问题与期望

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

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

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

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

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

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

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

image.png

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

文档编写的是知识

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

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

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

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

image.png

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

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

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

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

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

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

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

image.png

存储后还要传递

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

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

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

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

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

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

小结

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

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

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搭建Electron项目之运行例程

最好的学习方式就是:给一段能够运行的代码示例。 本文给出了例程资源,以及运行的步骤。 在国内开发electron有一点特别不好,就是如果不爬梯子,下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度

基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 一.曲线1.train_acc2.val_acc3.train_loss4.lr 二.代码 本文介绍了如何基于pytorch_lightning测试resnet18不同激活方式在CIFAR10数据集上的精度 特别说明: 1.NoActive:没有任何激活函数 2.SparseActiva…

机器学习--线性模型和非线性模型的区别?哪些模型是线性模型,哪些模型是非线性模型?

文章目录 引言线性模型和非线性模型的区别线性模型非线性模型 总结线性模型非线性模型 引言 在机器学习和统计学领域,模型的选择直接影响到预测的准确性和计算的效率。根据输入特征与输出变量之间关系的复杂程度,模型可以分为线性模型和非线性模型。线性…

C语言 | Leetcode C语言题解之第142题环形链表II

题目: 题解: struct ListNode* detectCycle(struct ListNode* head) {struct ListNode *slow head, *fast head;while (fast ! NULL) {slow slow->next;if (fast->next NULL) {return NULL;}fast fast->next->next;if (fast slow) {s…

Linux网络命令——tcpdump

tcpdump是Linux下的一个网络数据采集分析工具,也就是常说的抓包工具 tcpdump 核心参数 tcpdump [option] [proto] [dir] [type] 例如:$ tcpdump -i eth0 -nn -s0 -v port 80 option 可选参数: -i : 选择要捕获的接口,通常是以太…

插卡式仪器模块:音频分析模块(插卡式)

• 24 位分辨率 • 192 KHz 采样率 • 支持多种模拟音频信号的输入/输出 应用场景 • 音频信号分析:幅值、频率、信噪比、THD、THDN 等指标 • 模拟音频测试:耳机、麦克风、扬声器测试,串扰测 音频分析仪 输入阻抗10 TΩ10 TΩ输入范围3…

【C语言】宏详解(下卷)

前言 紧接上卷,我们继续来了解宏。 宏替换的规则 1.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。 2.替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他…

C++类与对象(拷贝与类的内存管理)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.对象的动态建立和释放二.多个对象的构造和析构三.深拷贝与浅拷贝四.C类的内存管理总结 前言 …

⌈ 传知代码 ⌋ 以思维链为线索推理隐含情感

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

基于改进YOLOv5的小目标检测 | 添加CBAM注意机制 + 更换Neck网络之BiFPN + 增加高分辨率检测头

前言:Hello大家好,我是小哥谈。本文针对图像中小目标难以检测的问题,提出了一种基于YOLOv5的改进模型。在主干网络中,加入CBAM注意力模块增强网络特征提取能力;在颈部网络部分,使用BiFPN结构替换PANet结构&…

Linux驱动应用编程(三)UART串口

本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程●线程优化●poll优化●select优化(功能和poll一样) 前述 在开始实验前,请一定要检查测试…

【RabbitMQ】RabbitMQ配置与交换机学习

【RabbitMQ】RabbitMQ配置与交换机学习 文章目录 【RabbitMQ】RabbitMQ配置与交换机学习简介安装和部署1. 安装RabbitMQ2.创建virtual-host3. 添加依赖4.修改配置文件 WorkQueues模型1.编写消息发送测试类2.编写消息接收(监听)类3. 实现能者多劳 交换机F…

【深度学习】—— 神经网络介绍

神经网络介绍 本系列主要是吴恩达深度学习系列视频的笔记,传送门:https://www.coursera.org/deeplearning-ai 目录 神经网络介绍神经网络的应用深度学习兴起的原因 神经网络,全称人工神经网络(Artificial Neural Network&#xf…

25.逢七必过

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/363 题目描述 逢七必过的游戏规则如下:对一…

Linux安装Docker | 使用国内镜像

环境 CentOS7 先确认能够上网 curl www.baidu.com返回该输出说明网络OK 步骤一:安装gcc 和 gcc-c yum -y install gccyum -y install gcc-c步骤二:安装Docker仓库 yum install -y yum-utils接下来配置yum的国内镜像 yum-config-manager --add-re…

激活乡村振兴新动能:推动农村产业融合发展,打造具有地方特色的美丽乡村,实现乡村全面振兴

目录 一、推动农村产业融合发展 1、农业产业链条的延伸 2、农业与旅游业的结合 二、挖掘地方特色,打造美丽乡村 1、保护和传承乡村文化 2、发展特色农业 三、加强基础设施建设,提升乡村品质 1、改善农村交通条件 2、提升农村水利设施 四、促进…

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍: 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台,实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点,能够为企业数字化…

水滴型锤片粉碎机:多功能粉碎利器

在现代工业生产中,粉碎机作为一种重要的机械设备,广泛应用于饲料、化工、木材等多个领域。其中,水滴型锤片粉碎机凭借其设计和粉碎能力,成为市场上的热门产品。 水滴型锤片粉碎机其设计灵感来源于水滴的形态。这种设计使得机器在…

vmware-17虚拟机安装教程,安装linux centos系统

下载VMware 1.进入VMware官网:https://www.vmware.com/sg/products/workstation-pro.html 2.向下翻找到,如下界面并点击“现在安装” 因官网更新页面出现误差,现提供vmware17安装包网盘链接如下: 链接:https://pan.b…

【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)

【SpringBoot Vue 尚庭公寓实战】基本属性接口实现(七) 文章目录 【SpringBoot Vue 尚庭公寓实战】基本属性接口实现(七)1、保存或更新属性名称2、保存或更新属性值3、查询全部属性名称和属性值列表4、根据ID删除属性名称5、根据…