<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术文档 on 冯威的博客</title><link>https://fwhyy.com/tags/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/</link><description>Recent content in 技术文档 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 23 Oct 2024 16:08:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/atom.xml" rel="self" type="application/rss+xml"/><item><title>代码写的好，就可以不写技术文档了吗？</title><link>https://fwhyy.com/2024/10/is-it-okay-not-to-write-technical-documentation-if-the-code-is-well-written/</link><pubDate>Wed, 23 Oct 2024 16:08:00 +0800</pubDate><guid>https://fwhyy.com/2024/10/is-it-okay-not-to-write-technical-documentation-if-the-code-is-well-written/</guid><description>&lt;p&gt;在软件开发中，代码与文档的关系是一个经常被讨论的话题，最近在一个技术群里也针对这个话题展开了讨论，大家各抒己见，以下是群中的一些主要观点，希望对你有所启发。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id="观点一代码无法替代文档文档是必需的"&gt;观点一、代码无法替代文档，文档是必需的&lt;/h2&gt;
&lt;p&gt;在项目的初期阶段，文档对于需求分析和设计至关重要，它帮助团队理解整体目标和约束。而在实现和维护阶段，代码是核心内容，但文档依然不可或缺，用来补充背景信息、重点逻辑等，确保团队的有效协作。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;团队成员水平参差不齐&lt;/strong&gt;：在大型团队中，成员的编码水平和理解能力不同，仅靠代码无法确保所有人都理解项目的全部细节。文档可以为经验不足的成员提供必要的指导，帮助他们更快地融入项目。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码难以表达设计思路和决策过程&lt;/strong&gt;：代码是最终实现的结果，但难以完整传达开发者的思考过程、约束条件，以及为何选择某种实现方式。这些背景信息对于后续的维护和迭代非常重要。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识传承的需要&lt;/strong&gt;：代码会随着时间和技术的演进而过时（指的是有些历史代码架构、实现可能都不是最优的，但一直在稳定运行，没就没有去进行重构），但文档能够记录项目的核心理念和设计思路，帮助新成员快速上手，减少摸索的时间成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写好代码的成本高于写文档&lt;/strong&gt;：高质量代码的编写需要丰富的经验和时间，而编写简洁而清晰的文档相对容易，可以迅速传达重要的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档面向多种读者&lt;/strong&gt;：代码主要面向开发者，而文档可以针对不同的受众，如非技术人员和管理层，帮助他们理解项目的整体状况和业务逻辑。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;避免误解和知识诅咒&lt;/strong&gt;：开发者通常认为自己的代码已经足够清晰，但对其他人来说可能并非如此。文档可以填补理解上的差距，降低沟通成本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="观点二代码和文档是互补的应该同时重视"&gt;观点二、代码和文档是互补的，应该同时重视&lt;/h2&gt;
&lt;p&gt;在小型团队中，沟通相对简单，文档的需求可能较少，更多依赖于自解释代码和口头沟通。而在大型团队中，成员众多且角色多样，文档的重要性显著提高，有助于团队成员理解项目背景、业务逻辑和设计决策，降低沟通成本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自解释代码减少了部分文档需求&lt;/strong&gt;：如果代码命名规范且逻辑清晰，部分重复性的文档可以省略，这符合 DRY（Don&amp;rsquo;t Repeat Yourself）原则。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码无法替代所有文档&lt;/strong&gt;：即便代码写得再好，也无法描述项目的背景、业务逻辑、设计决策等信息，这些内容往往需要在文档中进行详细说明。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;团队协作需要平衡&lt;/strong&gt;：团队应通过讨论来确定文档的必要性，确保每个成员都参与到文档的维护中，促进知识的共享和流动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档需要更新&lt;/strong&gt;：过度或形式化的文档可能流于形式，反而成为负担。因此，需要合理的文档管理和及时更新，以确保其质量和实用性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码需要达意：&lt;/strong&gt; 即便有很清晰的文档，开发人员最终还是需要去阅读和修改代码，所以代码本身的质量也非常重要。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="观点三过度依赖代码或文档都会带来问题关键在于平衡"&gt;观点三：过度依赖代码或文档都会带来问题，关键在于平衡&lt;/h2&gt;
&lt;p&gt;在敏捷开发中，找到代码与文档的平衡尤为重要。例如，有一个团队在开发过程中采用了「轻文档化」策略，针对关键模块和复杂业务逻辑编写简要的设计文档，而对于简单的实现则依赖于清晰的代码注释和团队协作。这种方式既保证了开发效率，又确保了文档的实用性和及时性。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;过分强调代码会忽略知识传递&lt;/strong&gt;：没有文档的项目在团队人员变动时可能会面临严重的知识流失问题，从而影响项目的长期维护和发展。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;过度依赖文档可能导致低效&lt;/strong&gt;：如果文档过于冗长或没有及时更新，开发者最终还是不得不查阅代码，这无疑增加了时间成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;培养文档使用文化&lt;/strong&gt;：如果没有人阅读文档，开发者也就缺乏编写的动力。因此，团队需要培养阅读和利用文档的文化，使文档成为项目不可或缺的一部分。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="观点四澄清对代码即文档的误解"&gt;观点四：澄清对「代码即文档」的误解&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;代码清晰就不需要文档&lt;/strong&gt;：某团队在开发初期认为只要代码写得足够清晰，就不需要额外的文档，导致后期新成员加入时对业务逻辑缺乏理解，不得不花费大量时间追溯代码背后的背景信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;敏捷开发不需要文档&lt;/strong&gt;：有些团队误解了敏捷开发的原则，认为敏捷就是不写文档，结果在项目需求变更时，由于缺乏文档记录，变更管理变得困难，最终导致项目进度延误。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注释等同于文档&lt;/strong&gt;：某项目的开发者认为在代码中添加详细的注释就可以替代文档，但注释通常只针对具体的实现，而无法传达整体的设计思路和决策过程，导致项目在维护过程中，尤其是面对复杂业务逻辑时，出现困难。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;敏捷宣言的误读&lt;/strong&gt;：敏捷开发提倡「可工作的软件胜过面面俱到的文档」，但这并不意味着不写文档，更不代表代码可以完全替代文档。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;「代码即文档」并非全覆盖&lt;/strong&gt;：这一观点强调代码的可读性，但并不意味着代码能够表达所有类型的信息，特别是那些代码无法承载的项目背景和业务逻辑。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;避免走极端&lt;/strong&gt;：认为写好代码就不需要任何文档是一种极端做法，不利于项目的长期发展和维护。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我的观点"&gt;我的观点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;代码除了让机器执行出结果，还需要人去阅读、修改、维护，所以每个开发人员需要持续提升自己的技能，从变量方法的命名到类之间的结构是清晰的、易读、可维护的。&lt;/li&gt;
&lt;li&gt;如果代码质量很高，变量、方法上面的一些废话注释不是必须的，没有这些，代码反倒看着更简洁，但整个项目的整体架构、核心业务的逻辑、算法等还是需要沉淀到文档中，并且随着代码的迭代演进，文档也需要同步更新。&lt;/li&gt;
&lt;li&gt;我不认为一个代码写的逻辑混乱的人，可以写出很清晰的文档。所以还是要先从代码入手，让每个人都能写出好到代码，再强调特定文档的重要性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;希望对您有所帮助！&lt;/p&gt;</description></item></channel></rss>