Re: [請益] 寫註解到底是不是好習慣

看板Soft_Job (軟體人)作者 (泛用人型編碼器)時間7年前 (2018/12/30 17:52), 7年前編輯推噓21(21011)
留言32則, 24人參與, 8年前最新討論串22/24 (看更多)
先說結論:「二分法命題比較有得戰、比較熱鬧;若像下面這樣去考量各種層面的 話,會很無聊 XD 。」 # 從 電腦科學 的角度來看 所謂「寫程式」的「寫」,在抽象意義上即是「表達(express)」 ;每種實用的語 言多半有其強項與短處,也就是方便與不方便的用途。 例如說,用 程式語言 來表達計算(computation)過程 ,尤其是表達給電腦看的計 算指令,通常來說會比用 自然語言 來得方便。 用 自然語言 (配合科學/數學符號) 來描述、解釋問題,尤其是表達給人腦看的脈 絡上下文(context) ,通常來說會比用 程式語言 來得方便。 是故,如果一個問題(problem) 是簡單(simple)到可以從其 計算解決方案(solution)去反推出問題的全貌,那麼,的確用程式語言去描述計算 過程就可以了,也就是「不太需要去寫註解」。 反之,如果一個問題的複雜度高,或其脈絡是難以用程式語言去描述的,那麼,就 可以用自然語言這個更適合的工具,去描述該問題的脈絡,也就是「有寫註解的價 值」。 有興趣的話,可以參考 DSL/GPL 的觀念: * https://en.wikipedia.org/wiki/Domain-specific_language * https://en.wikipedia.org/wiki/General-purpose_language # 從 軟體工程 的角度來看 前面板友 ThxThx 在推文 [1] 裡點出的文章,有更深入完整地探討這個方向。 * http://antirez.com/news/124 * https://www.reddit.com/9m6ahs Hacker News 上也討論過 antirez 的那篇文。 * https://news.ycombinator.com/item?id=18157047 [1]: https://www.ptt.cc/bbs/Soft_Job/M.1546056944.A.99E.html 以下是對原文的摘要,加上簡略的、我的解讀與看法;作者 antirez 把註解分為 9 大類如下,且主張:「前 6 大類是相對有正面價值的,後 3 大類則有疑慮 。」 > * Function comments 「函式註解」,可以想成「介面(interface), API 」註解。 > * Design comments 設計藍圖、大方向的註解。 > * Why comments 相對於描述「如何(how)」的程式碼 ,解釋「意圖、原因」的註解。 > * Teacher comments 深入解釋「問題的脈絡/領域(domain)」的註解 ,例如,某數學公式的由來 。 > * Checklist comments 列出「提醒/警示」的清單註解 ,例如,幫助後人避免踩中技術細節的地雷。 > * Guide comments 「導讀」註解。 > * Trivial comments 解釋「不言自明」之事的註解;讀這類註解所需要花的精神,不見得比直接讀程式碼 來得少,且不見得能幫助讀者更了解此程式要解決的問題。 > * Debt comments 技術債註解;或許應該以 issue/bug 的方式記錄技術債,而不是藏在程式碼 裡。 > * Backup comments 以 備份 為目的,把舊的程式碼以註解的方式留在程式碼檔案裡。 易言之,不同型式的註解有不同的用途與價值。 # 從 人體工程 的角度來看 相對於 軟體工程 , 人體工程 XD 是更困難的。 真正的問題通常不是技術問題,而是認知、環境、歷史等脈絡上的問題,尤其是那 些「沒有被說出來 / 沒有便利的共同語言去表達」 的東西。 那些東西對輕重緩急的取捨拿捏有極顯著的影響與衝擊,卻又常常是無影無形難以 捕捉、表達、溝通。 (「人體工程」離原主題太遠了,就此打住。) [編輯補充] 就「人體工程」這個題目,可以參考 qrtt1 寫的這篇: https://www.ptt.cc/bbs/Soft_Job/M.1546144956.A.439.html # 結論 扁平化、二分法命題比較有得戰、比較熱鬧;若像上面這樣去考量各種層面、脈絡 的話,會很無聊,很難戰 XD 。 -- 個人 雜談、學習、英語、軟體 https://www.facebook.com/tw.yang.30 https://www.facebook.com/30abysses/ https://twitter.com/twy30 http://www.30abysses.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 136.56.102.149 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1546163575.A.4C5.html

12/30 17:54, 7年前 , 1F
你這個太無聊了,應該沒幾個人會回
12/30 17:54, 1F
XD ※ 編輯: AmosYang (136.56.102.149), 12/30/2018 17:57:44 ※ 編輯: AmosYang (136.56.102.149), 12/30/2018 17:59:12

12/30 17:58, 7年前 , 2F
光第一句就該推了XD
12/30 17:58, 2F
此串開頭原po在解 天才小釣手 的成就 XD ※ 編輯: AmosYang (136.56.102.149), 12/30/2018 18:05:13

12/30 18:02, 7年前 , 3F
看完,再推一次
12/30 18:02, 3F

12/30 18:07, 7年前 , 4F
註解分類是有意義的,討論串某些推文明顯和內文不同類
12/30 18:07, 4F

12/30 18:16, 7年前 , 5F
end
12/30 18:16, 5F

12/30 18:17, 7年前 , 6F
言之有物,推!
12/30 18:17, 6F

12/30 18:18, 7年前 , 7F
12/30 18:18, 7F

12/30 18:51, 7年前 , 8F
推這篇
12/30 18:51, 8F

12/30 19:02, 7年前 , 9F
:)
12/30 19:02, 9F
[編輯補充] 就「人體工程」這個題目,可以參考 qrtt1 寫的這篇: https://www.ptt.cc/bbs/Soft_Job/M.1546144956.A.439.html ※ 編輯: AmosYang (136.56.102.149), 12/30/2018 19:18:37

12/30 19:47, 7年前 , 10F
用人體有色色的感覺
12/30 19:47, 10F

12/30 22:35, 7年前 , 11F
九類註解很值得借鑑,和我的觀點重合處甚多
12/30 22:35, 11F

12/30 23:00, 7年前 , 12F
12/30 23:00, 12F

12/31 01:39, 7年前 , 13F
水準太高
12/31 01:39, 13F

12/31 02:11, 7年前 , 14F
事實上就有好的有不好 應該的 不應該的註解這樣
12/31 02:11, 14F

12/31 02:13, 7年前 , 15F
但一堆真的都拿爛註解來說該寫註解好棒棒 真的不敢恭維
12/31 02:13, 15F

12/31 02:53, 7年前 , 16F
推這篇
12/31 02:53, 16F

12/31 11:33, 7年前 , 17F
12/31 11:33, 17F

12/31 13:40, 7年前 , 18F
推推~
12/31 13:40, 18F

12/31 14:13, 7年前 , 19F
原本很好戰的主題,不要打擾我我看戲
12/31 14:13, 19F

12/31 14:40, 7年前 , 20F
推個
12/31 14:40, 20F

01/01 10:49, 8年前 , 21F
感謝大大整理分享
01/01 10:49, 21F

01/01 14:13, 8年前 , 22F
這個切分分類視角很不錯,有看有推!
01/01 14:13, 22F

01/03 01:39, 8年前 , 23F
這串下來只有這篇有營養........
01/03 01:39, 23F

01/03 19:09, 8年前 , 24F
01/03 19:09, 24F

01/04 21:11, 8年前 , 25F
Warning comments: 當你在用第三方程式庫有gotcha
01/04 21:11, 25F

01/04 21:11, 8年前 , 26F
例如statement需要特定順序執行或者有bug而需要
01/04 21:11, 26F

01/04 21:13, 8年前 , 27F
workaround, 而說明文件沒標示 (例如微軟去年公佈必須
01/04 21:13, 27F

01/04 21:14, 8年前 , 28F
開啟SMB1才能正常運作的軟體清單... 很多人一直都沒
01/04 21:14, 28F

01/04 21:15, 8年前 , 29F
想到SMB1居然會被更新停用, 而且沒幾個人會知道在用
01/04 21:15, 29F

01/04 21:16, 8年前 , 30F
的lib的技術細節吧)這些一定得下註解
01/04 21:16, 30F

01/05 11:41, 8年前 , 31F
簡單說就是看寫什麼樣的註解吧。比如說“問題(problem)
01/05 11:41, 31F

01/05 11:41, 8年前 , 32F
”也是一種註解。
01/05 11:41, 32F
文章代碼(AID): #1SA9LtJ5 (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1SA9LtJ5 (Soft_Job)