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

news2024/11/9 2:25:06

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

前言

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

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

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

image.png

文档问题与期望

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

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

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

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

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

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

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

image.png

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

文档编写的是知识

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

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

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

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

image.png

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

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

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

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

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

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

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

image.png

存储后还要传递

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

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

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

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

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

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

小结

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

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

image.png

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

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

相关文章

28.找零

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/744 题目描述 有一台自动售票机,每张票卖 …

synchronized 的底层实现

用户态与内核态 JDK 早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过 kernel(指大多数操作系统的核心部分),系统调用。 ;hello.asm ;write(int fd, const void *buffer, size_t nbytes)section datamsg db …

在iPhone上恢复删除Safari历史记录的方法[2024]

您是否正在寻找恢复 iPhone 上已删除的 Safari 历史记录的最佳方法?好吧,这篇文章提供了 4 种在有/无备份的情况下恢复 iPhone 上已删除的 Safari 历史记录的最佳方法。现在按照分步指南进行操作。 iPhone 上的 Safari 历史记录会被永久删除吗&#xff1…

关于stm32的复用和重映射问题

目录 需求IO口的复用和重映射使用复用复用加重映射 总结参考资料 需求 一开始使用stm32c8t6,想实现pwm输出,但是原电路固定在芯片的引脚PB10和PB11上,查看了下引脚的功能,需要使用到复用功能。让改引脚作为定时器PWM的输出IO口。…

SpringBoot的事务注解

SpringBoot的事务注解 在Spring Boot应用中,事务管理是一个关键的部分,尤其是当涉及到数据库操作时。Spring Boot提供了强大的事务管理支持,使得开发人员可以通过简单的注解来控制事务的边界和行为。本文将介绍如何在Spring Boot中使用事务注…

每日一题——Python实现PAT乙级1099 性感素数(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 综合点评 我要更强 优化点 …

docker部署redis实践

1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器,查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 概述 1.1 Redis 下载与安装 2.0 Redis 数据类型 3.0 Redis 常见五种类型的命令 3.1 字符串操作命令 3.2 哈希操作命令 3.3 列表操作命令 3.4 集合操作命令 …

DNS协议 | NAT技术 | 代理服务器

目录 一、DNS协议 1、DNS背景 2、DNS协议 域名 域名解析 二、NAT技术 1、NAT技术 2、NAPT技术 3、NAT技术的缺陷 三、代理服务器 1、正向代理服务器 2、反向代理服务器 一、DNS协议 域名系统(Domain Name System,缩写:DNS&#…

数据库索引压力测试

本实验测试数据库在有索引和五索引内容上的查询时间随着数据量级增长的变化 测试的表结构 使用一个菜单的数据库表,包括菜品的ID,菜品名和价格 CREATE TABLE Menu (dish_id int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,dish_name varchar(255)…

上位机图像处理和嵌入式模块部署(f407 mcu vs h750)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在目前工业控制上面,f103和f407是用的最多的两种stm32 mcu。前者频率低一点,功能少一点,一般用在低端的嵌入式设…

N32G45XVL-STB之移植LVGL(lvgl-8.2.0)

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…

探索国内大模型AIGC产品

​ 人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗…

单片机(STM32)与上位机传输浮点数

目录 单片机(STM32)与上位机传输数据的方法1. 传输整形数据2. 传输浮点数据3. 如何打包与解包 单片机(STM32)与上位机传输数据的方法 在进行单片机程序的开发时,常常需要与其他设备进行通信。一种情况是与其他电路板通信,比如STM32主机与STM32从机通信&…

Windows开始ssh服务+密钥登录+默认启用powershell

文章内所有的命令都在power shell内执行,使用右键单击Windows徽标,选择终端管理员即可打开 Windows下OpenSSH的安装 打开Windows power shell,检查SSH服务的安装状态。会返回SSH客户端和服务器的安装状态,一下是两个都安装成功的…

基于pytoch卷积神经网络水质图像分类实战

具体怎么学习pytorch,看b站刘二大人的视频。 完整代码: import numpy as np import os from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data…

springboot高校运动会信息管理系统设计与实现-计算机毕业设计源码92968

摘 要 本论文介绍了一个高校运动会信息管理系统的设计和实现过程。首先是高校运动会的需求分析和可行性分析,通过比较运动会的各个工作流程,确定了系统的数据流程和数据库结构,然后介绍了高校运动会信息管理系统开发所使用的软件开发工具&…

脖子以下是人机交互,脖子以上是人机融合智能

“脖子以下是人机交互,脖子以上是人机融合智能”这句话是当前人与人工智能配合技术发展的一种形象描述,一个是生理物理,一个是人脑电脑: 1、人机交互的重要性 脖子以下的人机交互在当前的人工智能系统中扮演着重要的角色。人机交互…

SpringBoot整合RabbitMQ (持续更新中)

RabbitMQ 官网地址:RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ 与 Erlang 版本兼容关系​ 3.13.0 26.0 26.2.x The 3.13 release series is compatible with Erlang 26. OpenSSL 3 support in Erlang is considered to be mature and ready for…

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

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