侵权投诉

软件工程师为什么要写文档

Linux阅码场 2021-09-09 11:26 次阅读

在大多数软件工程师对编写、使用和维护代码的抱怨中,一个常见的问题是缺乏高质量的文档。缺乏文档有什么副作用呢?当遇到一个bug时,这个缩写是什么意思?这份文件是最新的吗?在整个职业生涯中,每个软件工程师都抱怨过文档的质量、数量或者完全缺乏文档。

01

为什么需要写文档?

高质量文档对工程组织有巨大的好处。代码和api变得更容易理解。当他们的设计目标和团队目标被清楚地陈述时,项目团队会更加专注。当步骤被清晰地列出时,手动流程更容易遵循。如果过程被清楚地记录下来,那么让新成员进入团队或代码库所花费的精力就会少得多。但是,由于文档的好处有一定的滞后性,通常不会给作者带来直接的好处。不像测试,编写完测试用例,跑一遍就有结果。毕竟,你可能只编写了一个文档,但之后它将被阅读数百次,甚至数千次;它的初始成本将摊销给所有未来的读者。文档不仅可以随着时间的推移而扩展,而且它对组织的其他部分的扩展也很关键。它有助于回答以下的问题:

为什么会做出这些设计决策?

为什么要以这种方式实现这段代码?

为什么大多数工程师不喜欢写文档?

虽然文档可以带来不少好处,为什么工程师通常认为它是糟糕的?其中一个原因,正如我们提到的,是好处不是立竿见影的,特别是对作者来说。另外还有以下几点:

很多工程师习惯将写代码和写作割裂开,不仅仅是在工作上,而且在思想上就认为它们是完全不相关的两项工作,这就导致好多人重代码不重文档。

也有很多工程师认为自己不善写作,索性就不写了。这实际是个偷懒的借口,写文档不需要华丽的辞藻、生动的语言,你只需要将问题讲清楚即可。

有时候工具不好用也会影响的文档写作。如果没有一个很好的写作工具将写文档嵌入到开发工作流程中的话,写作确实会增加工作的负担。

大多数人将写文档看做是工作的额外负担。我代码都没时间写,哪有时间写文档!,这其实是错误的观念,文档虽然前期有投入,但能让你代码的后期维护成本大幅降低,磨刀不误砍柴工这个道理相信大家都还是能理解的。

02

写文档的重要性

另外一个原因是文档被视为需要维护的额外负担,而不是使现有代码的维护更容易的东西。写文档同样对作者也有非常大的好处:

它有助于审视API。编写文档是确定API是否有意义的最可靠的方法之一。通常,编写文档本身会使工程师重新评估设计决策。如果你不能解释它,不能定义它,那你可能还没有设计好它。

它提供了维护的历史记录。在任何情况下,代码中的技巧都应该避免,但是当你盯着两年前编写的代码,试图找出错误所在时,好的注释将提供很大的帮助。

它使你的代码看起来更专业。开发人员自然会认为文档完备的API就是设计得更好的API。虽然情况并非总是如此,但它们通常是高度相关的。虽然这个好处听起来像是表面文章,但事实并非如此:一个产品是否有良好的文档通常是一个很好的指标。

这将减少其他用户提出的问题。对于编写文档的人来说,随着时间的推移这可能是最大的好处。如果你必须向某人解释某件事不止一次,那么记录该过程通常是有意义的。

03

像管理代码一样管理文档

软件工程师使用单一的、主要的编程语言来编写程序,他们仍然经常使用不同的语言来解决特定的问题。工程师可能会编写shell脚本或c++fans.com/tags/python/' target='_blank' class='arckwlink_hide'>Python来运行命令行任务,或者他们可能会用c++编写大部分后端代码,但用Java编写一些中间件代码,等等。每种语言都是工具箱中的一种工具。文档也应该如此:它是一种工具,用不同的语言编写,以完成特定的任务。编写文档与编写代码没有多大区别。与编程语言一样,它有规则、特定的语法和样式决定,通常是为了实现与代码中类似的目的:加强一致性、提高清晰度和避免理解错误。文档通常与代码紧密耦合,因此应该尽可能地将其视为代码。也就是说,文档也应具有如下的属性:

有明确的责任人维护;

有统一的内部规范;

定期更新;

有变更和评审机制;

有问题反馈和更新机制;

明确文档的读者是谁

工程师在编写文档时犯的一个最重要的错误是只为自己编写文档。这样做是很自然的,并且为自己编写代码并非没有价值:毕竟,你可能需要在几年后查看这些代码,并试图弄清楚你曾经的想法。或者说在团队较小的时候,大家的工作交集很大,因此也能看懂你的文档,但是随着组织的发展,问题就逐渐凸显,新人会有这不同背景,团队大了以后,工作内容开始细化,交集减少,这时候之前写的文档对他们来说可能就很难理解了。

因此在开始写作之前,应该(正式或非正式地)确定文档需要满足的受众。设计文件可能需要说服决策者。教程可能需要为完全不熟悉代码库的人提供非常明确的说明。API可能需要为该API的任何用户(无论是专家还是新手)提供完整和准确的参考信息。好的文档不需要修饰或完善。工程师在编写文档时所犯的一个错误是认为他们需要成为更好的作者。按照这个标准,很少有软件工程师会写。记住,我们的观众站在你曾经站过的地方,但没有你新的领域知识。所以你不需要成为一个伟大的作家;你只需要找一个像你一样熟悉这个领域的人。

04

文档类型

作为工作的一部分,工程师会编写各种不同类型的文档:设计文档、代码注释、操作文档、项目页面等等。这些都可以算作文档。但重要的是要知道不同的类型,不要混合类型。一般来说,文档应该有一个单一的目的。正如API应该做一件事并且做好一样,避免在一个文档中做几件事。软件工程师经常需要编写几种主要类型的文档:

参考文档,包括注释

设计文档;

教程;

概念性文档;

1.参考文档参考文档是工程师最常编写的文档类型;事实上,他们经常需要每天写一些参考文档。代码注释是工程师必须维护的最常见的参考文档形式。这些注释可以分为两个基本阵营:API注释和实现注释。这两种用户之间的区别:API注释不需要讨论实现细节或设计决策,也不要假设用户和作者一样精通API。但是实现注释可以假定读者有更多的领域知识,但是要注意不要假设得太多。

2.设计文档

大多数公司在项目开始之前都需要有设计文档。软件工程师通常使用团队批准的特定设计文档模板来编写建议的设计文档。然后还需要在特定的团队会议上讨论或评论设计的细节。一个好的设计文档应该涵盖:

设计目标

实现策略

利弊权衡和具体决策

替代方案

各方案的优缺点

一份优秀的设计文件,一旦获得批准,不仅可以作为历史记录,还可以作为项目是否成功实现其目标的衡量标准。大多数团队会将他们的设计文档进行归档,以便在后续的时间查看。在产品发布前检查设计文档通常是很有用的,以确保编写设计文档时所陈述的目标在发布时仍然是所陈述的目标(如果不是,那么文件或产品都可以进行相应的调整)。

3.教程每个软件工程师,当他们加入一个新的团队时,都会想要尽可能快地跟上进度。拥有一个引导人们完成新项目设置的教程是非常有价值的。通常情况下,编写教程的最佳时机是你第一次加入一个团队的时候。拿个记事本或其他方法做笔记,写下一路上你需要做的所有事情,假设没有领域知识或特殊的设置限制;完成之后,可能会知道在这个过程中所犯的错误和原因,然后可以编辑你的步骤,以获得更精简的教程。重要的是,写下一路上你需要做的一切;尽量不要假定任何特定的设置、权限或领域知识。这类型的文档写作中,要求写作者尽可能站在用户的视角上思考,极力避免出现和用户的认知偏差,力争每个步骤做到明确无歧义,每两个步骤之间做到紧密衔接。

4.概念性文档有些代码需要更深入的解释或见解,而不是仅仅通过阅读参考文档就能得到的。在这些情况下,我们需要概念性文档来提供api或系统的概述。

概念性文档处理可能是API的库概述、描述服务器中数据生命周期的文档等。概念性文档是用来扩充而不是替换参考文档集的。有时候这和参考文档会有些内容重复,,但主要还是为了更深层次的说明某些问题、解释清楚某个概念。概念性文档没有必要涵盖所有边缘情况。在这种情况下,为了清晰度而牺牲一些准确性是可以接受的。概念性文件的要点在于传达理解。概念文档是最难编写的文档形式。因此,它们通常是软件工程师工具箱中最容易被忽视的文档类型。而且还有另外一个问题,没合适的地方放,参考文档可以写代码里,落地页可以写项目主页里,概念性文档似乎也只能在项目文档里找个不起眼的角落存放了。概念文档需要对广泛的受众有用:无论是专家还是新手。此外,它需要强调清晰性,所以它通常需要牺牲完整性(最好留作参考)和(有时)严格的准确性。这并不是说概念性文件应该故意不准确;这只是意味着它应该关注常见的用法,而将罕见的用法或副作用留作参考文档。

05

文档Review

在一个组织内,光靠个人去维护文档是不行的,必须得借助群体的智慧。在一个组织内部,文档的变更也应该像代码的变更一样,需要被其他人Review,以提前发现其中的问题并提升文档的质量。技术文档得益于三种不同类型的review,每种审查都强调不同的方面:

专业的视角来保证准确性:一般由团队里比较资深的人负责,他们关注的核心点是文档写的对不对,专不专业。如果Code Review做的好的话,文档的Review也属于Code Review的一部分。

读者视角保证简洁性:一般由不熟悉这个领域的人来Review,比如团队的新人,或者文档的使用者。这部分主要是关注文档是否容易被看懂。

写作者视角保证一致性:由写作经验丰富或者相关领域比较资深的人承担,主要是为了保证文档前后是否一致,比如对同一个专业术语的使用和理解是否有歧义。

06

文档写作的哲学

下面的部分更多地是关于技术写作最佳实践的论述。5W法则相信大家已经听的多了,分别是WHO, WHAT, WHEN, WHERE, WHY,这是一个广泛被用在各行各业的法则,写文档当然也不例外。WHO:正如前面所说,文档的针对对象是谁,读者是谁。

WHAT:明确文档写作的用途,通常仅需说明文档的用途和目的就能帮你搭建起整个文档的框架。

WHEN:明确文档的创建、Review和更新日期。因为文档也有时效性,明确相关日期可以避免阅读者踩坑。

WHERE:文档应该放在哪!建议一个组织或者团队有统一的永久文档存放地址,并且有版本控制。最好是方便查找、使用和分享。

WHY:为什么要写这篇文档, 你期望读者读完后从文档中获得什么!

1.三段式文档

所有文档,文档的所有部分都有开头、中间和结尾。尽管这听起来非常愚蠢,但大多数文件通常都应该有这三个部分。不要害怕在文档中添加章节;它们将流程分解为逻辑部分,并为读者提供文档所涵盖内容的路线图。

通常开头部分代表问题,中间部分介绍推荐的解决方案,结尾部分总结结论。但这也并不以为着文档应该有三个部分,如果文档内容比较多,可以将其做更细致的拆解,可以适当增加一些冗余的信息帮助读者理解文档内容。虽然很多工程师都讨厌冗余 极力追求简洁,但写文档和写代码不同,适当的冗余反而可以帮助读者理解。

2.好文档必备的属性

好的文档通常有三个方面:完整性、准确性和清晰度。很少在同一个文档中同时获得这三种信息;例如,当你试图使文档更完整时,清晰度就会开始受到影响。如果您试图记录API的每个可能的用例,您可能会得到一个难以理解的混乱。对于编程语言来说,在所有情况下都做到完全准确(并记录所有可能的副作用)也会影响清晰度。对于其他文件,试图明确一个复杂的主题可能会微妙地影响文件的准确性;例如,您可能决定忽略概念性文档中的一些罕见的副作用,因为文档的目的是让人们熟悉API的用法,而不是提供对所有预期行为的武断概述。

在每种情况下,一个好的文档都被定义为正在执行其预期工作的文档。因此,您很少希望文档执行一项以上的工作。对于每个文档(以及每个文档类型),确定其重点并适当调整编写,写概念性文档可能不需要涵盖API的每个部分,写一个参考可能想要这个完整,但可能必须牺牲一些清晰度等。所有这些加起来就是质量,不可否认的是,质量很难精确衡量。

07

结论

公平地说,对文档的处理与对测试的处理并不一定相同。对测试来讲可以进行原子测试(单元测试),并遵循规定的形式和功能。在大多数情况下,文件不能。测试可以自动化,但通常缺乏自动化文档的方案。文件必然是主观的;文档的质量不是由作者来衡量的,而是由读者来衡量的,而且通常是异步的。

最后总结下本文几个关键点:

随着时间推移,团队的壮大,文档会越来越重要;

文档应该是开发人员工作流程的一部分;

每篇文档专注于一个目的;

文档是给读者看的,而不是你自己写作。

责任编辑:haq

原文标题:如何写好技术文档?

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

快领取!新人注册享限时大礼包,N款工程师好物一键到位
数字万用表、电烙铁、PCB尺子........电子发烧友礼品库要捂不住啦!!为答谢电子发烧友用户们的支持与厚爱,即日起新注册电子...
发表于 10-15 10:51 749次 阅读
快领取!新人注册享限时大礼包,N款工程师好物一键到位
PCB的设计、打板和焊接
最近MicroPython在嵌入式系统领域受到大家的喜爱,攻城狮们都纷纷研究起来,就连我们Funpa....
的头像 电子森林 发表于 10-15 10:04 129次 阅读
怎样去解决耳机的电流声问题
怎样去解决耳机的电流声问题? 怎样去解决archlinux开关机啪啪响的问题? ...
发表于 10-15 07:26 0次 阅读
怎样通过读取电流节点的方式去获取电流呢
怎样通过读取电流节点的方式去获取电流呢?其实验代码是怎样的?...
发表于 10-15 06:48 0次 阅读
步进电机是如何实现正反转的
步进电机是如何实现正反转的?怎样去编写其代码?...
发表于 10-14 09:49 0次 阅读
PA_IK代码该如何去实现
PA_IK代码该如何去实现? PA_VMC算法的原理是什么?...
发表于 10-14 09:00 0次 阅读
STM32L151C8T6低功耗编程代码该如何去编写
STM32L151C8T6低功耗编程代码该如何去编写?
发表于 10-14 07:41 0次 阅读
怎样去定义一个结构体数组呢
数据结构的特点有哪些? 怎样去定义一个结构体数组呢? ...
发表于 10-14 07:25 0次 阅读
能快速找到代码运行最慢部分的编程神器
天下武功,唯快不破。 编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高。 今天分....
的头像 Linux爱好者 发表于 10-13 16:40 104次 阅读
动态内存分配的注意事项及本质是什么
C语言中比较重要的就是指针,它可以用来链表操作,谈到链表,很多时候为此分配内存采用动态分配而不是静态....
的头像 C语言编程学习基地 发表于 10-13 15:37 222次 阅读
动态内存分配的注意事项及本质是什么
用Python实现3D地图教程
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题....
的头像 马哥Linux运维 发表于 10-13 10:09 158次 阅读
用Python实现3D地图教程
关于Python对交通路口的红绿灯进行颜色检测
转自 |   Python联盟 1.视频读取 首先把视频读取进来,因为我测试的视频是4k的所以我用r....
的头像 新机器视觉 发表于 10-13 09:32 214次 阅读
关于Python对交通路口的红绿灯进行颜色检测
spring中声明式事务实现原理猜想
  @Transactional注解简介 @Transactional 是spring中声明式事务管....
的头像 Android编程精选 发表于 10-13 09:20 182次 阅读
stm32启动代码如何进行分析
stm32启动代码如何进行分析
发表于 10-13 06:44 0次 阅读
xv6的文件系统是如何实现的
文件系统 本文继续来看 的文件系统部分, 将文件系统的设计分为 7 层: ,磁盘、缓存区、日志三个部....
的头像 Linux阅码场 发表于 10-12 18:00 123次 阅读
 xv6的文件系统是如何实现的
Linux中匿名页的访问分析
Linux 中 有后备文件支持的页称为文件页,如属于进程的代码段、数据段的页,内存回收的时候这些页面....
的头像 Linux阅码场 发表于 10-12 17:52 151次 阅读
处理器中异常和中断解决
异常是能够引起程序流偏离正常流程的事件,当异常发生时,正在执行的程序就会被挂起,处理器转而执行一块与....
的头像 单片机匠人 发表于 10-12 17:14 268次 阅读
RUST的真实驱动案例
我们无法确定RUST在内核的最终趋势,有多少人愿意迁移,但是至少Linus愿意试水。 Wedson ....
的头像 Linux阅码场 发表于 10-12 15:59 81次 阅读
RUST的真实驱动案例
那些有着巨大影响力的代码盘点
2009 年,Facebook 推出了一份改变世界的代码——点「赞」按钮。「赞」是包括 Leah P....
的头像 strongerHuang 发表于 10-12 15:46 174次 阅读
那些有着巨大影响力的代码盘点
那些书本上都没有提到的C语言volatile用法
许多程序员都无法正确理解C语言关键字volatile,这并不奇怪。因为大多数C语言书籍通常都是一两句....
的头像 STM32嵌入式开发 发表于 10-12 14:47 864次 阅读
那些书本上都没有提到的C语言volatile用法
什么是MicroPython 它能做什么有什么局限
随着Python成为主流的编程语言,MicroPython在嵌入式系统领域也越来越热门起来,尤其是大....
的头像 电子森林 发表于 10-12 11:44 216次 阅读
PO VO DTO转换神器的思路
当然有的人喜欢写get set,或者用BeanUtils 进行复制,代码只是工具,本文只是提供一种思....
的头像 Linux爱好者 发表于 10-12 11:13 191次 阅读
如何在Colab中使用SQL
如今,编码测试在数据科学面试过程中几乎是标准的。 作为一名数据科学招聘经理,我发现一个20-30分钟....
的头像 智能感知与物联网技术研究所 发表于 10-12 09:39 158次 阅读
如何在Colab中使用SQL
命令行工具Kubectl的别样用法
  kubectl 是 K8s 官方附带的命令行工具,可以方便的操作 K8s 集群。这篇文章主要介绍....
的头像 马哥Linux运维 发表于 10-12 09:31 124次 阅读
一本教你怎么写出让同事无法维护的代码
‍对,你没看错,本文就是教你怎么写出让同事无法维护的代码。一、程序命名 容易输入的变量名 。比如:F....
的头像 Linux爱好者 发表于 10-11 15:45 166次 阅读
优秀的 Verilog/FPGA开源项目介绍(一)
优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信 今天开始会陆续介绍一些优秀的开源项....
的头像 OpenFPGA 发表于 10-11 15:31 239次 阅读
优秀的 Verilog/FPGA开源项目介绍(一)
鸿蒙的网络管理功能你们知道有多厉害吗
  本示例演示了如何使用网络管理模块相关接口,演示了以下功能: 功能 1: 使用默认网络,打开连接,....
的头像 HarmonyOS技术社区 发表于 10-11 14:26 259次 阅读
鸿蒙的网络管理功能你们知道有多厉害吗
开发一个鸿蒙版仿苹果计算器教程.附代码
众所周知鸿蒙 JS 框架是非常轻量级的 MVVM 模式。通过使用和 Vue2 相似的属性劫持技术实现....
的头像 HarmonyOS技术社区 发表于 10-11 14:17 218次 阅读
开发一个鸿蒙版仿苹果计算器教程.附代码
年薪40万也招不到,半导体人才招聘为何这么难?
电子发烧友网(文/黄山明)每年的9、10月,号称金九银十,是当年的招聘旺季,对于半导体行业同样如此。....
的头像 21克888 发表于 10-11 09:36 1800次 阅读
年薪40万也招不到,半导体人才招聘为何这么难?
怎样去搭建一种STM32代码生成模型
怎样去搭建一种STM32代码生成模型?要注意哪些问题?...
发表于 10-11 06:25 0次 阅读
剖析verilog2005的骚操作之对数函数
小技巧分享: verilog下取对数其实可用$clog2这个系统函数,和自己找代码里面写入funct....
的头像 玩儿转FPGA 发表于 10-09 15:29 196次 阅读
剖析verilog2005的骚操作之对数函数
Floyd如何求图的最短路径
前言 在 图论 中,在寻路最短路径中除了 Dijkstra 算法以外,还有 Floyd 算法也是非常....
的头像 算法与数据结构 发表于 10-09 14:38 133次 阅读
Floyd如何求图的最短路径
Python版test1实战说明
上一篇文章已经带着大家安装 DeepStream 的 Python 开发环境,并且执行最简单的 de....
的头像 NVIDIA英伟达企业解决方案 发表于 10-09 14:28 149次 阅读
教你们如何用 Python 快速制作海报级地图附代码
 1 简介 基于 Python 中诸如 matplotlib 等功能丰富、自由度极高的绘图库,我们可....
的头像 Linux爱好者 发表于 10-09 11:36 258次 阅读
如何用10行代码轻松在ZYNQ MP上实现图像识别
本文来自赛灵思高级产品应用工程师,张超。如今各种机器学习框架的普及使得个人搭建和训练一个机器学习模型....
的头像 XILINX开发者社区 发表于 10-09 10:47 1723次 阅读
如何用10行代码轻松在ZYNQ MP上实现图像识别
string与《string.h》有哪些区别
string与《string.h》的定义有何不同? string与《string.h》有哪些区别? ...
发表于 10-09 07:22 0次 阅读
LMK04821芯片项目代码详解
大侠好,阿Q来也,今天是第二次和各位见面,请各位大侠多多关照。今天给各位大侠带来一篇项目开发经验分享....
的头像 FPGA技术江湖 发表于 10-08 17:51 286次 阅读
LMK04821芯片项目代码详解
如何用List组件减小JS运行内存
每种编程语言都有它的内存管理机制,不同设备上可用内存不同,分配给JS引擎可用的内存范围也不同。例如运....
的头像 HarmonyOS开发者 发表于 10-08 17:46 184次 阅读
如何链接两个名字一样动态库
在Linux应用的开发过程中,直接利用现成的第三方库(俗称:轮子)来完成自己的业务功能,是很常见的事....
的头像 Linux阅码场 发表于 10-08 14:58 194次 阅读
log2在verilog中到底有什么用
很多小伙伴对上一篇文章讲的取对数没感觉,觉得这个没什么用。确实很多时候用不着,verilog本身不够....
的头像 玩儿转FPGA 发表于 10-08 11:23 234次 阅读
log2在verilog中到底有什么用
如何在没有正式培训的情况下学习编程
从编程小白到完成第一款 Web 应用,我只用了 90 天,而且大多数时间都是在苦恼自己是否能成为开发....
的头像 程序人生 发表于 10-08 10:22 155次 阅读
204B实战应用-LMK04821代码详解(二)
大侠好,阿Q来也,今天是第二次和各位见面,请各位大侠多多关照。今天给各位大侠带来一篇项目开发经验分享....
的头像 OpenFPGA 发表于 10-08 10:18 467次 阅读
204B实战应用-LMK04821代码详解(二)
简述Hive 数据倾斜问题定位排查及解决
多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例。当工作中遇到了倾斜问题,....
的头像 数据分析与开发 发表于 10-08 09:10 188次 阅读
简述Hive 数据倾斜问题定位排查及解决
如何用python实现贪吃蛇游戏
贪吃蛇 具体实现部分,大致分为三个模块来介绍:游戏初始化、游戏运行(蛇移动、吃掉食物)、游戏结束 1....
的头像 马哥Linux运维 发表于 09-29 18:05 453次 阅读
如何用python实现贪吃蛇游戏
如何用一行代码解决空指针问题
在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerExce....
的头像 Android编程精选 发表于 09-29 14:28 234次 阅读
导航对多返回栈的支持
欢迎来到第二个关于导航的 MAD Skill 系列的另一篇文章!本文我们将介绍一个呼声很高的功能,即....
的头像 谷歌开发者 发表于 09-29 11:21 287次 阅读
文件系统中的日志系统是如何实现的
日志 本文来聊聊文件系统中的日志系统,来看一个简单的日志系统是如何实现的。本文是接着前面的 xv6 ....
的头像 Linux阅码场 发表于 09-29 11:04 248次 阅读
文件系统中的日志系统是如何实现的
直流电机控制代码
直流电机控制代码(深圳市普德新星电源技术有限公司官网)- 直流机控制代码 可以控制直流机的转速以及正....
发表于 09-28 12:24 51次 阅读
直流电机控制代码
C语言中的“三字母词”是什么
某软件工程师接盘了前同事的项目,进度一拖再拖,最后发现问题出现在如下代码: // 注释语句 ??/2....
的头像 嵌入式ARM 发表于 09-26 14:46 252次 阅读
芯片开发语言为什么要用Chisel和Verilog
在最近召开的RISC-V中国峰会上,中科院计算所的包云岗研究员团队正式发布了名为“香山”的开源高性能....
的头像 FPGA技术江湖 发表于 09-26 11:00 1668次 阅读
芯片开发语言为什么要用Chisel和Verilog
剖析C语言中scanf函数常见问题
在写C代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。 空白符问题        ....
的头像 STM32嵌入式开发 发表于 09-24 16:45 278次 阅读
拓扑排序算法有什么作用
大家好,我是bigsai。 拓扑排序,很多人都可能听说但是不了解的一种算法。不知者大多会提出这样的疑....
的头像 算法与数据结构 发表于 09-24 10:53 256次 阅读
拓扑排序算法有什么作用
Vivado之VIO原理及应用
虚拟输入输出(Virtual Input Output,VIO)核是一个可定制的IP核,它可用于实时....
的头像 OpenFPGA 发表于 09-23 16:11 266次 阅读
Vivado之VIO原理及应用
简述Git的一些基础知识
  简单地说,Git 究竟是怎样的一个系统呢?请注意接下来的内容非常重要,若你理解了 Git 的思想....
的头像 马哥Linux运维 发表于 09-23 15:43 762次 阅读
简述Git的一些基础知识
让C++代码更加高效的几个小技巧
今天和大家介绍一下能让C++代码更加高效的几个小技巧,话不多说,以下为本文目录: 参数传递方式:值传....
的头像 嵌入式ARM 发表于 09-23 15:20 228次 阅读
让C++代码更加高效的几个小技巧
Python后端项目的协程是什么
最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 Linux爱好者 发表于 09-23 14:38 266次 阅读
STM32的ADC代码例程
STM32的ADC代码例程(普德新星电源技术有限公司怎么样)- STM32的ADC代码例程,有5个例....
发表于 09-23 09:53 45次 阅读
STM32的ADC代码例程
英特尔OpenVINO™将全力助力极视角AI推理加速
在模型开发和部署方面,极市平台集成了最新版本的OpenVINO工具,助力开发者在最小化代码修改的条件....
的头像 英特尔物联网 发表于 09-22 16:19 405次 阅读
英特尔OpenVINO™将全力助力极视角AI推理加速
OpenHarmony HDF HDI的IPC模式具体实现方法和驱动框架能力
HDI接口概述 回顾之前的文章,HDF 驱动框架的一个重要功能是为系统提供稳定的统一的硬件接口,这样....
的头像 HarmonyOS官方合作社区 发表于 09-22 14:55 254次 阅读
OpenHarmony HDF HDI的IPC模式具体实现方法和驱动框架能力
OpenCV新增描述子BEBLID
在前不久发布的OpenCV4.5中更新了很多新特性: 从4.5版本开始,OpenCV将正式使用Apa....
的头像 新机器视觉 发表于 09-22 14:16 2409次 阅读
OpenCV新增描述子BEBLID