热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:为什么程序员都不写文档?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了为什么程序员都不写文档?相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了为什么程序员都不写文档?相关的知识,希望对你有一定的参考价值。







‍‍‍




【CSDN 编者按】对于程序员来说文档可能是他最大的软肋。一些被称之为高手的程序员,往往是文档方面的处理会偏弱。不管这个程序员是在大公司、还在小公司、不管程序是写文档的、还是不写文档的,大部分程序员在内心深处中是不愿意写文档的。


作者 | Kislay Verma       


译者 | 弯月


出品 | CSDN(ID:CSDNnews)


以下为译文:


有人认为程序员不喜欢写文档,是因为没有太好的工具,但是我认为软件工程师不喜欢不编写文档有两个主要原因:第一,写作很难;第二,没有文档代码也可以照常发布。而工具只是微不足道的原因之一。






写作很难

写作从来都不是一件易事。软件工程师与其他人一样,他们不愿意写文档,是因为想要写得条理清晰、简洁明了,实在是太难了。


写作是一项非常艰巨的任务。我们必须清楚地组织自己的思想,然后经过检查和整理,最后再清楚地表达出来。尽管最后的表达部分可以从某种程度上进行简化(取决于写作的质量),但是正确完成这三个步骤需要付出大量努力。


在编程的世界中,面对所有问题,我们能够给出的最佳答案都是:“视具体情况而定”,一切都需要权衡取舍,但写作则更加复杂。你需要预设上下文,证明决策的合理性,然后论证代码底层思想的推动力。这样的文档只有编写得好才会有用,但写好太难了,所以往往根本做不到。错误的代码仍然可以运行,但错误的文档则不会。 


这就是为什么很多人都在争论在代码中添加注释的价值,以及能作为文档使用的代码的优点。Kevlin Henney认为,在复杂的代码周围添加注释实际上是徒劳的,如果开发人员无法通过代码清楚地表达自己,你又怎么期望他能用英语清楚地表达自己呢?



没有文档代码也可以照常发布

即便开发人员不编写文档,他们仍然可以完成自己的工作。没有文档也不会阻碍交付代码(至少不会马上有问题)。没有文档记录的技术决策所造成的损害是累积性的。就像技术负债一样,不会立即造成伤害。


就像我上面所说,写作主要是思考和分析问题。大多数时候,编程只需要凭借自己的经验和判断。一堆杂乱无章的代码照样可以运行,但是一堆乱七八糟的单词和段落则无法形成文章。写作必须清晰才能发挥作用。只要代码能够完成工作,就可以被接受(在某种程度上)。而且,由于大多数组织只在乎产品的交付,因此凡是不会阻碍产品交付的工作都会被忽略。


在许多团队中,单元测试也面临着类似的问题。为了测试代码,我们首先需要理解代码(而且往往花费的时间超过了编写代码),而且没有测试也不会阻碍产品的交付。因此,太好了,代码中没有单元测试。


还有过时的问题。即便是精心编纂的文档也会过时,因此工程师在构建系统时,必须不断重复思考-分析-表达的过程。因此,我们很容易抛弃文档这项重任。因此,我们往往会临时抱佛脚,等到必要时再编写和整理文档。



工具

毫无疑问,如今能够帮助我们编写软件文档的常用工具严重不足。我们不会一次只考虑一个文档,而是会将多个概念汇总起来,思考多个想法和目标。最终的文档只是整个思想过程的一种体现。我们需要工具帮助我们整理思路,以解决眼前的问题。Google Docs、Confluence和Markdown都是此类的写作工具,但都不怎么好用。


虽然工具有一定的影响,但不愿意承担这项任务才是真正的问题所在。



文档该怎么办?

编写软件教会了我一件事。如果你希望用户做某件事情,那么就必须让它变成他们在使用产品的过程中非做不可的事情。同样,如果文档只是代码的附属品,那么永远不会有人主动编写文档。更糟糕的是,文档还没有太大用处。写作需要批判性思维。文档的目的是向自己和听众(比如你的团队)解释你的思维过程和意图。而这个思维过程才是文档提供的价值,而不是编写好的静态文字。


支持结对编程的人经常贬低文档。但是,编写和审核技术文档是团队对他们构建的产品形成统一认识的唯一渠道。这种统一的认识对于团队和代码库的长期健康至关重要。


我认为,想要让文档的编写长期坚持下去,唯一的办法就是让其成为软件开发的阻碍。编写文档应该成为流程的一部分。根据我的经验,下面这些方法或许能起到作用。


  • 在编写代码之前,首先编写文档。除非代码改动非常小,否则每位工程师都应该写一份注释,说明他们将要进行的工作,并由团队的其他成员来实际执行。经过详尽的讨论后,实际的代码改动就微不足道了。

  • 简化文档的编写工作。不要将文档的编写弄得过于复杂。图表等花里胡哨的东西可以先放一放。你只需要简单地写下你的想法、所做的事情以及原因。即使文档只能为现在和将来的团队其他成员提供基本的说明,也非常有价值。

  • 记录下备选方案。无需详细记录实际的实现(因为实现可能随时间而变化),你应该重点记录选择某个方案的原因。这是代码无法解释的内容,因此记录下来很有价值。你可以根据实际情况,投入一定的时间来记录详细信息。

  • 便于查找。如果人们找不到文档,那么就没有任何用途。你可以使用支持文本搜索的工具。

  • 记录变更。有些组织使用版本控制来记录系统设计随时间推移发生的变更。如果你没有类似的工具,那么请针对每个功能保留一份文档,并在其上不断添加最新的更新信息,以便记录下所有的变更。


最后,希望团队能够在建立文档和查看文档的过程中,逐步认识到文档带来的价值,并养成记录文档的好习惯。但在此之前,你应该将编写文档视为减肥或节食,痛苦而快乐地坚持下去。


原文链接:https://kislayverma.com/programming/why-programmers-dont-write-documentation/


声明:本文由CSDN翻译,转载请注明来源。





☞离职后为讨薪资删公司数据,一技术开发工程师被判 11 个月

☞程序员真香!IT 业 2020 年平均工资最高

☞张一鸣卸任字节跳动 CEO,网友调侃因未完成去年 OKR 被优化!

☞软件工程师安德烈·梅萨成功夺得世界小姐桂冠

☞“我辞退了一位学位学历造假的程序员”‍‍‍




推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
author-avatar
攻玉是我_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有