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

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

前言

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

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

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

image.png

文档问题与期望

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

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

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

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

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

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

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

image.png

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

文档编写的是知识

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

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

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

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

image.png

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

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

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

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

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

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

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

image.png

存储后还要传递

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

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

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

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

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

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

小结

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

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

image.png

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

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

相关文章

Spring Event如何优雅实现系统业务解耦

Spring Event如何优雅实现系统业务解耦 一、介绍 Spring事件(Spring Event)是Spring框架的一项功能,它允许不同组件之间通过发布-订阅机制进行解耦的通信。在Spring中,事件是表示应用程序中特定事件的对象,例如用户注…

在win11系统上安装启动Hyper-V

Hyper-V 是微软公司开发的一种虚拟化技术,它允许一台物理计算机运行多个操作系统和应用程序,从而提供更好的资源利用率和系统灵活性。 win系统的linux子系统开启、android studio的虚拟环境都需要这个东西,而在初始的win11系统上可能没有这个…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:电力巡检智能机器人

聚焦数字经济与双碳经济赛道,专注于提供集中式新能源场站与分布式综合能源数智化整体解决方案,坚持以场站数字化、综合能源数字化双轮驱动发展。依靠专业化人才队伍与丰富的实证基地研究经验,打造成熟、先进的数智新能源研发平台。 在集中式新…

Docker Swarm集群部署管理

Docker Swarm集群管理 文章目录 Docker Swarm集群管理资源列表基础环境一、安装Docker二、部署Docker Swarm集群2.1、创建Docker Swarm集群2.2、添加Worker节点到Swarm集群2.3、查看Swarm集群中Node节点的详细状态信息 三、Docker Swarm管理3.1、案例概述3.2、Docker Swarm中的…

【Web世界探险家】3. CSS美学(二)文本样式

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

基于深度学习的中文语音识别模型(支持wav、mp4、m4a等所有格式音频上传)【已开源】

基于深度学习的中文语音识别模型(支持wav、mp4、m4a等所有格式音频上传) 前言 该开源项目旨在提供一个能够自动检测并识别中文语音的模型,支持wav、mp4、m4a等格式的音频文件上传。无论是从录音设备中获取的wav文件,还是从视频中…

外部排序快速入门详解:基本原理,败者树,置换-选择排序,最佳归并树

文章目录 外部排序1.最基本的外部排序原理2.外部排序的优化2.1 败者树优化方法2.2 置换-选择排序优化方法2.3 最佳归并树 外部排序 为什么要学习外部排序? 答: 在处理数据的过程中,我们需要把磁盘(外存)中存储的数据拿到内存中处理…

ue5创建地图瓦片

先在虚幻商城下载免费的paperzd插件,并启用。 导入资源后,先通过应用paper2d纹理资源,将去掉导入ue时产生的边缘模糊,再点击下面的创建瓦片集, 打开瓦片集,发现选中不对, 改变瓦片大小为16*…

ChatGPT对话基本原则和玩法

一、使用三个准备 1.1 认知上 超级学霸,几乎所有的工作/生活场景,都可以找它帮忙 ChatGPT作为一个人工智能语言模型,具有强大的知识储备和处理能力。这意味着在许多工作和生活场景中,你都可以向它请教问题或寻求帮助。无论是科…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件;若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除&#xff0…

Python第二语言(七、Python模块)

目录 1. 什么是模块 2. 基本语法 2.1 模块的导入方式 2.2 基本语法 import 模块名 2.3 基本语法 from 模块名 import 功能名 2.4 基本语法as 别名 3. 自定义模块 4. 调用自定义模块时,如何让其模块中的函数不被调用(__name__) 5. 调…

基于SSM+Jsp的家用电器销售网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

微信小程序获取 OpenId 和 UnionId

文章目录 1.什么是 OpenId 和 UnionId?2.获取 OpenId 和 UnionId 的办法3.备注 前言:最近开发小程序,需要通过用户登录的唯一值存储数据,查看手册发现要使用的是 “OpenId” 和 “UnionId” 1.什么是 OpenId 和 UnionId&#xff1…

仓储系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,试剂管理,安全管理,存储管理 用户账户功能包括:系统首页,个人中心,试剂管理,安全管…

快速搭建rtsp server(Ubuntu)

在现代视频监控和实时视频流媒体应用中,实时流协议(RTSP)服务器扮演着至关重要的角色。无论是家庭安防系统、企业级监控还是流媒体服务,RTSP服务器都能提供高效、稳定的解决方案。然而,对于许多初学者或开发者来说&…

机器学习--生成式模型和判别式模型的具体分析

文章目录 生成式模型和判别式模型的具体分析生成式模型定义工作原理优点缺点常见模型 判别式模型 总结生成式模型判别式模型 生成式模型和判别式模型的具体分析 生成式模型和判别式模型在机器学习中有着不同的目标、应用场景和性能特点。以下将详细分析它们的定义、工作原理、…

【qt】绘图

绘图 一.画家二.绘图事件三.坐标体系四.画笔1.setColor2.setWidth3.setStyle4.setCapStyle5.setJoinStyle6.给画家配置笔 五.画刷1.setColor2.setStyle3.给画家设置刷子 六.用到的类汇总1.QRect 矩形2.QPoint 点3.QImage 图片4.QPixmap 图片5.QLine 线6.QPainterPath 路径 七.开…

aabb c++

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

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码(两个都要用到) github官方下载地址:https://github.com/AntSwordProject/ 参考文档:antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…

Golang-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…