吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么大多數人都不喜歡寫代碼文檔

奈因PCB電路板設計 ? 來源:博客園 ? 作者:xindoo ? 2021-08-23 14:42 ? 次閱讀

本文大部分內容翻譯總結自《Software Engineering at Google》 第10章節 Documentation。另外,該書電子版近日已經可以免費下載了 https://abseil.io/resources/swe_at_google.2.pdf,有興趣的同學可以下載翻閱下。首先聲明,本問所說的文檔不僅限于純文本文檔,還包含代碼注釋(注釋也是一種特殊形式的文檔)。

很多技術人自己非常輕視技術文檔的書寫,然而又時常抱怨文檔不完善、質量差、更新不及時…… 這種在程序猿間普遍存在的矛盾甚至已經演變成了一個段子。

文檔的重要性

高質量的文檔對于一個組織或團隊來說有非常多的益處,比如讓代碼和API更容易理解、錯誤更少;讓團隊成員更專注于目標;也可以讓一些手工操作更容易;另外如果有新成員加入的話有文檔也會讓他們更快融入……

寫文檔有比較嚴重的收益滯后性,不像測試,你跑一個測試case,它能立即告訴你是對還是錯,它的價值馬上就體現出來了。而寫一份文檔,隨著時間的推移,它的價值才會逐漸體現出來。你可能只寫一次文檔,將來它會被閱讀上百次、上千次,因為一份好的文檔可以在未來替你向別人回答類似下面這些問題。

為什么當時是這么決策的?

為什么代碼是這樣實現的?

這個項目里都有哪些概念?

……

寫文檔同樣對于寫作者也有非常大的收益:

幫你構思規范化API: 寫文檔的過程也是你審視你API的過程,寫文檔時會讓你思考你API設計是否合理,考慮是否周全。如果你沒法用語言將API描述出來,那么說明你當前的API設計是不合理的。

文檔也是代碼的另一種展現: 比如你兩年后回過頭來看你寫過的代碼,如果有注釋和文檔,你可以很快速理解代碼。

讓你的代碼看起來更專業: 我們都有個感覺,只要文檔齊全的API都是設計良好的API,雖然這個感覺并不完全正確,但這兩者確實是強相關的,所以在很多人眼里,文檔的完善度也成為衡量一個產品專業度的指標。

避免被重復的問題打擾: 有些問題你只需要寫在文檔里,這樣有人來問你的時候你就可以讓他直接去看文檔了,而不是又給他解釋一遍。

為什么大多數人都不喜歡寫文檔?

關于文檔的重要性,每個技術人或多或少都知道一些,但很多人還是沒有寫文檔的習慣,為什么?除了上文中提到的文檔的收益滯后性外,還有以下幾點原因:

很多工程師習慣將寫代碼和寫作割裂開,不僅僅是在工作上,而且在思想上就認為它們是完全不相關的兩項工作,這就導致好多人重代碼不重文檔。

也有很多工程師認為自己不善寫作,索性就不寫了。這實際是個偷懶的借口,寫文檔不需要華麗的辭藻、生動的語言,你只需要將問題講清楚即可。

有時候工具不好用也會影響的文檔寫作。如果沒有一個很好的寫作工具將寫文檔嵌入到開發工作流程中的話,寫作確實會增加工作的負擔。

大多數人將寫文檔看做是工作的額外負擔。我代碼都沒時間寫,哪有時間寫文檔!,這其實是錯誤的觀念,文檔雖然前期有投入,但能讓你代碼的后期維護成本大幅降低,磨刀不誤砍柴工這個道理相信大家都還是能理解的。

如何產出高質量文檔

既然理解了好文檔的重要性,我們如何保證在時間的長河中維護好一份文檔,這里有些相關的方法論,大家可以參考下。

像管理代碼一樣管理文檔

對于如何寫出好代碼,整個技術圈已經有好多經驗的總結了,比如書籍《重構》《代碼簡潔之道》…… 針對各種編程語言,也有相關的規范,比如國外的Google C++規范,國內的阿里Java開發規范等…… 但對于文檔 似乎相關的資料卻很少。但實際上,不應該把文檔和代碼割裂開來,你可以簡單粗暴地認為文檔其實就是用一種特殊語言書寫的代碼,這種語言就是人類的語言。這么想的話,實際上我們很多在代碼和工程中總結出來的經驗,也可以直接用在文檔中,比如:

有統一的規范

有版本控制

有明確的責任人維護

有變更Review機制

有問題的反饋和更新機制

定期更新

有衡量的指標(比如準確性,時效性)

明確你的讀者是誰

寫文檔有一個很常見的錯誤,那就是很多人文檔都是寫給自己看的,這種情況下就會導致你的文檔只有自己或者和你有相似知識背景的人才能看懂,團隊較小時這種問題還好,你們都做著類似的工作,所以也都能看懂文檔。但當團隊逐漸壯大后,問題就會凸顯出來,新人有時候有著和你不同的工作背景,甚至現在都做著不同的工作內容,這時候你之前寫的文檔他們就很難讀懂了。

所以在寫文檔之前請明確你文檔可能的讀者會是哪些人,然后針對他們的特點著重關注如何才能讓他們理解。當然,文檔也不一定要非常嚴肅和完美,只要能向你潛在的讀者說明問題即可。記住文檔是寫給別人看的,不是給自己看的。

根據專業水平可以大致將讀者分為三種 新手、老手和專家,針對不同水平的人寫作需要有側重點。比如針對新手,你需要重點介紹下里面涉及到的術語和概念,然后詳細講解具體的的實現。相反,針對專家 你可以省去這些額外的信息。注意,這里沒有嚴格的標準,因為有些文章新手會看,專家也會看, 這里還是需要具體情況具體分析。

另外一種對讀者分類的方式就是根據讀者閱讀文檔的目的來分類,比如有人知道自己遇到了什么問題,就是來找解決方案的。還有一批人只有一個簡單的想法,但不知道具體的問題。舉個例子,以讀數據庫慢為例,前者已經知道數據庫慢可能是因為數據量巨大且沒有加索引,解決方案很簡單 加索引,這時候他可能需要知道的是如何正確地加索引。而后者可能著重關注的是為什么讀數據庫會慢,這時候你可能需要額外重點介紹下數據庫相關的原理。

清晰的分類

文檔大致可以分為以下幾種類型,每種類型也有自己不同的特點和寫作側重點。

參考文檔

參考文檔也是大部分開發人員日常會使用和書寫的文檔,比如我們使用某個框架或者工具,都會有API說明文檔,這就屬于參考類文檔。它并沒有太多的要求,只要能向讀者展示清楚如何使用即可,但無需向讀者講明具體的實現。

注:參考文檔并不僅限于API文檔,還包括文件注釋、類注釋、方法注釋,要求都是能準確說明其用法。

設計文檔

很多公司或者團隊在項目開始前都要求有設計文檔,設計是項目實施的第一步,所以在設計文檔書寫的過程中要求盡可能考慮周全,例如該項目的存儲、交互、隱私……

好的設計文檔應該包含以下幾個部分:

設計目標

實現的策略

各種利弊權衡和具體決策

替代方案

各種方案的優缺點

寫設計文檔的過程也你對整個項目做規劃、思考可能出現問題的過程,設計的越詳細、思考的越多,未來遇到問題的可能性就會越小。

引導類文檔

引導類文檔也很常見,一般都是Step by Step的形式。比如我們在使用某個框架或者工具的時候,一般都會有個引導類的文檔一步一步幫助你快速上手。大家寫引導類文章大家非常容易犯的一個錯誤就是預設了很多背景知識。一般使用文檔都是有開發者寫的,他們都非常了解這個工具的相關的知識,所以習慣性的會認為,啊 這個知識點很簡單 用戶也肯定會吧,實際上用戶不一定會。這本質上就是一種認知偏差,這種現象在跨團隊協作 尤其是多端協作的時候也非常明顯。

這類型的文檔寫作中,要求寫作者盡可能站在用戶的視角上思考,極力避免出現和用戶的認知偏差,力爭每個步驟做到明確無歧義,每兩個步驟之間做到緊密銜接。

概念性文檔

當參考文檔無法解釋清楚某些東西的時候,就需要概念性文檔了,比如某個API的具體實現原理。其主要是為了擴充參考文檔,而不是替代參考文檔。有時候這和參考文檔會有些內容重復,但主要還是為了更深層次的說明某些問題、解釋清楚某個概念。

概念性文檔也是所有文檔中寫作最難的,也是被閱讀最少的,所以很多情況下工程師最容易忽視。而且還有另外一個問題,沒合適的地方放,參考文檔可以寫代碼里,落地頁可以寫項目主頁里,概念性文檔似乎也只能在項目文檔里找個不起眼的角落存放了。

這類文檔的受眾會比較廣,專家和新手都會去看。另外,它需要強調概念清晰明了,因此可能會犧牲完整性(可以由參考文檔補齊),也有可能會犧牲準確性,這不是說一定要犧牲準確性,只是應當分清主次,不重要的就沒必要說了。

Landing pages(落地頁)

Landing pages就先簡單翻譯成落地頁了,沒想到啥恰當的翻譯詞。比如一個團隊或者項目的導航頁,雖然沒啥具體的內容,但應該包含其他頁面的鏈接。比如你新入職一個團隊,比較成熟的團隊都會扔給你一個文檔,這個文檔里包含常用的工具、文檔鏈接,這就是這個團隊的落地頁。落地頁的問題就是隨著時間的推移,頁面可能會變的越來越亂,而且有些內容會失效,不過這些問題都好解決,做好定期的維護和整理就行。落地頁的技術難度不高,但要求內容的有效性、完整性和分類清晰。

文檔Review

在一個組織內,光靠個人去維護文檔是不行的,必須得借助群體的智慧。在一個組織內部,文檔的變更也應該像代碼的變更一樣,需要被其他人Review,以提前發現其中的問題并提升文檔的質量。

如何Review文檔:

專業的視角來保證準確性: 一般由團隊里比較資深的人負責,他們關注的核心點是文檔寫的對不對,專不專業。如果Code Review做的好的話,文檔的Review也屬于Code Review的一部分。

讀者視角保證簡潔性: 一般由不熟悉這個領域的人來Review,比如團隊的新人,或者文檔的使用者。這部分主要是關注文檔是否容易被看懂。

寫作者視角保證一致性: 由寫作經驗豐富或者相關領域比較資深的人承擔,主要是為了保證文檔前后是否一致,比如對同一個專業術語的使用和理解是否有歧義。

寫文檔的哲學

上面部分站在組織和團隊的視角來看如何提高文檔質量,我們接下來看看站在個人寫作者的視角上如何寫出高質量的文檔。

5W法則

5W法則相信大家已經聽的多了,分別是Who What When Where Why,這是一個廣泛被用在各行各業的法則,寫文檔當然也能用(5W法則堪稱萬金油,啥地方都能用)。

WHO: 前面已經說過了,文檔是寫給誰看的,讀者是誰。

WHAT: 明確這篇文檔的用途,有時候,僅僅說明文檔的用途和目的就能幫你搭建起整個文檔的框架。

WHEN: 明確文檔的創建、Review和更新日期。因為文檔也有時效性,明確相關日期可以避免閱讀者踩坑。

WHERE: 文檔應該放在哪!建議一個組織或者團隊有統一的永久文檔存放地址,并且有版本控制。最好是方便查找、使用和分享。

WHY: 為什么要寫這篇文檔, 你期望讀者讀完后從文檔中獲得什么!

三段式寫作

寫文章一般都會有三個部分,專業寫作者也講究鳳頭、豬肚、豹尾,這三個詞概括出了好文章三部分應有的特點。技術文檔也算是文章的一種,所以一般也都會有這三部分,每個部分有其自己的作用,比如第一部分闡述問題,中間部分介紹具體的解決方案,第三部分總結要點。 但這也并不以為著文檔應該有三個部分,如果文檔內容比較多,可以將其做更細致的拆解,可以適當增加一些冗余的信息幫助讀者理解文檔內容。雖然很多工程師都討厭冗余 極力追求簡潔,但寫文檔和寫代碼不同,適當的冗余反而可以幫助讀者理解,很簡單,舉個例子,比如寫作中經常舉例子,舉的例子本質上就是冗余信息,生動的例子肯定是能幫助讀者理解抽象內容的(我想這就是自舉 吧)。

結語

目前看到比較好的一個現象就是大家越來越重視文檔了,但和測試相比 重視的程度還不夠。測試已經是工作流程中不可或缺的一部分了,而文檔依舊還不是。當然這可能和文檔本身的特性相關,測試很容易被自動化,也有非常多的客觀指標來評估。文檔卻做不到,首先文檔的書寫需要人手動介入,而文檔的質量也沒有太多客觀的指標評估,提升文檔的數量和質量只能從文化和工作流程上去逐漸改變。

最后總結下本文幾個關鍵點:

隨著時間的推移和組織規模的壯大,文檔會越來越重要。

文檔也應該是開發流程的一部分。

一篇文檔只專注在一件事上。

文檔是寫給讀者看的,而不是給你自己看的。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 文檔
    +關注

    關注

    0

    文章

    48

    瀏覽量

    12023
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063

原文標題:這誰寫的技術文檔?我想錘死他...

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Wine原理介紹和開發教程

    說起 Wine,稍微資深一點的 Linux 用戶應該都聽過,但是真要說起 Wine 到底是怎么回事,可能大多數人不見得說得清。這篇文章會簡單地介紹 Wine 的工作原理,以及如何開始 Wine 的開發。
    的頭像 發表于 12-31 10:06 ?321次閱讀

    英飛凌創新解決方案助力家用電器實現節能

    對于大多數人來說,家是生活的中心:家不僅是每個人的避風港,也是力量的源泉。在家中,我們享受悠閑時光,處理日常瑣事,與親人共度美好歲月。然而,當我們在家中使用家電進行供暖、制冷、烹飪或通信時,往往會消耗大量能源。
    的頭像 發表于 12-27 10:12 ?204次閱讀

    ADS8472采集進來的數據大多數是1039(040F),3087(0C0F),為什么?

    進來的數據大多數是1039(040F),3087(0C0F),難道這是芯片出廠設置的測試數據嗎? 2、既然是采樣的正弦波信號,按照我的理解,芯片理論上在每個采樣周期采集到的數據都應該不同,頂多有兩三
    發表于 12-24 08:13

    ADS1292測量ECG,三個導聯測量,測得的心電信號波形,對多數人的測量結果都是T波比R波還高而且很寬,為什么?

    使用TI官方方案ADS1292測量ECG,三個導聯測量,測得的心電信號波形,對多數人的測量結果都是T波比R波還高而且很寬,只有對少數人才正常,是什么原因?
    發表于 12-24 07:55

    IBM助力大陸集團開發智能安全的自動駕駛解決方案

    大多數人來說,駕駛屬于第二天性,其中涉及一系列自動決策。訓練 AI 進行自動駕駛需要 PB 級的數據,以便比人類做出同樣決策時快 1/10 秒,且讓駕駛更為安全。
    的頭像 發表于 08-29 14:50 ?539次閱讀

    未來車間大多數人工將被機器代替,立柱機器人建材行業應用

    ?在未來,隨著技術的不斷進步和自動化程度的題高,車間內大多數人工被機器代替的趨勢愈發明顯。立柱機器人在建材行業的應用正是這一趨勢的具體體現。以下是對立柱機器人在建材行業應用的詳細分析: ?一
    的頭像 發表于 08-28 16:41 ?382次閱讀
    未來車間<b class='flag-5'>大多數人</b>工將被機器代替,立柱機器人建材行業應用

    巧了不是,原來你也不知道啥是去耦電容的“濾波半徑”啊!

    電源設計中的網紅用語:電容去耦半徑,大多數人都聽過,但能講出來原理的人估計不多;看完這篇文章,讓你們理論知識和實際設計更上一層樓!
    的頭像 發表于 08-19 14:54 ?478次閱讀
    巧了不是,原來你也不知道啥是去耦電容的“濾波半徑”啊!

    4G模組無法正常聯網?一定要記得考慮SIM卡的問題!

    當大家在調試4G模組但卻無法正常聯網時, 大多數人的第一反應是這4G模組一定有什么問題吧? 幾乎沒有人會認為是流量卡(SIM卡)的問題,一定要記得考慮SIM卡。
    的頭像 發表于 08-12 15:37 ?2562次閱讀
    4G模組無法正常聯網?一定要記得考慮SIM卡的問題!

    依托北京理工大學感知學科優勢,雷科智途瞄準千億級井下自動駕駛

    對于大多數人來說,礦山總是和昏暗、事故、風險這些詞匯綁定在一起。礦井安全一度成為社會關注的熱點,這些刻板印象隨著輿論的頻繁印證至今還停留在大多數人的印象當中:在礦山工作,意味著在漆黑的礦井下將自
    的頭像 發表于 06-26 12:13 ?291次閱讀
    依托北京理工大學感知學科優勢,雷科智途瞄準千億級井下自動駕駛

    新的Armv9 CPU技術加速AI在移動設備等領域的發展

    當今移動設備上的大多數人工智能 (AI) 工作負載均可在 Arm CPU 上運行。
    的頭像 發表于 05-30 11:44 ?694次閱讀
    新的Armv9 CPU技術加速AI在移動設備等領域的發展

    加速汽車電氣化:釋放封裝創新的力量

    我們知道與大多數人成長過程中所乘坐的傳統汽車相比,今天的汽車更接近于輪子上的電子產品——盡管我們曾經對其引擎蓋下的內部工作和控制感到驚嘆,但現代汽車已將其變為復雜的計算機。
    的頭像 發表于 04-11 17:06 ?765次閱讀
    加速汽車電氣化:釋放封裝創新的力量

    USB口不同顏色所代表的意義是什么

    平時工作生活中我們會看到各種顏色的USB口,但是大多數人都不知道不同顏色的USB口代表什么含義?
    發表于 04-09 09:49 ?4459次閱讀
    USB口不同顏色所代表的意義是什么

    STM32L451用USB I2C發送擦除指令后,大多數情況接收到的是NACK的值,為什么?

    發送擦除指令后,大多數情況接收到的是NACK的值
    發表于 03-28 08:17

    吸塵器究竟是如何替你“吃灰”的【其利天下技術】

    如今,吸塵器已成為大多數人居家必備的小家電產品,那么說起吸塵器,你對吸塵器有了解多少呢?不知道大家知不知道它的原理是什么?今天我們就來說一說吸塵器究竟是如何替你“吃灰”的。
    的頭像 發表于 03-07 21:17 ?960次閱讀
    吸塵器究竟是如何替你“吃灰”的【其利天下技術】

    IC芯片這些檢測方式無法識別假貨但卻是大多數人在做的?

    IC芯片
    芯廣場
    發布于 :2024年03月04日 18:39:55
    百家乐官网娱乐网佣金| 大三巴百家乐官网的玩法技巧和规则 | k7线上娱乐城| 粤港澳百家乐娱乐平台| 什么是百家乐官网平注法| 肯博| 威尼斯人娱乐平台代理| 真人百家乐软件博彩吧| 百家乐官网多少钱| 百家乐官网打庄技巧| 大发888娱乐场存款| 百家乐官网技巧阅读| 大发888 58| 百家乐总厂在哪里| 尊龙百家乐官网娱乐平台| 百家乐官网2号技术打法| 免费百家乐统计工具| 百家乐太阳城怎么样| 奇迹百家乐官网的玩法技巧和规则 | 百家乐平台有什么优势| 民宅24方位| 百家乐官网赌场走势图| 玉田县| 大发888出纳柜台 在线| 百家乐概率投注| 百家乐官网三宝| 娱乐城棋牌| 英皇国际| 虹乐棋牌是真的吗| 百家乐公式软件| 豪门百家乐官网的玩法技巧和规则 | 哪个百家乐网站信誉好| 百家乐人生信条漫谈| 百家乐筹码样式| 红树林百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城博彩网站| 同乐城百家乐现金网| 大世界百家乐官网娱乐场| 百家乐官网珠盘路| 百家乐官网论坛在线提供| 高手百家乐官网赢钱法|