你的程式碼糟粕比精華要多得多
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
新的研究發現,一個程式的核心功能僅在於一小部分封裝的程式碼。
如果你是一個軟體開發人員,有人問你,你寫的程式碼中有多少是真正在實現實際功能的,有多少是填充物、無價值的或者只是因為實際執行程式語言所需要的? 95%? 75%? 50%?都不是!新的研究發現,只有大約5%的程式碼是真正在提供核心功能。
研究人員認為,就像自然語言一樣,一些——甚至可能是絕大多數——寫下的程式碼其實對於功能是不起作用的。《stalks of wheat》一文的作者認為,只有一部分程式碼代表了功能的語義核心,我們稱之為精華,而其他的則是糟粕。
該作者表示,一個功能的核心可以被封裝於一個小型的關鍵字集合中,這被稱為“minimum distinguishing subset” (“最小的區別化子集”)或MINSET。我們可以通過將方法分解為詞素(即,通過空格或標點符號分隔程式碼),丟棄那些對函式行為不重要的內容,同時把剩下的對映到關鍵字中。然後將那些關鍵字匯入到MINSET。
為了檢驗此理論,即MINSET中的程式碼只佔全部程式碼的一小部分,研究人員下載了1000個來自Apache、Eclipse、GitHub和SourceForge最受歡迎的Java專案。在合計超過10億行的Java程式碼中,先剔除簡單的方法( tokens低於50)。就只剩下不到190萬的不同方法,然後從中隨機抽取10,000條,確定它們的MINSET。研究中使用的程式碼和資料可從Bitbucket下載。
以下為研究發現的主要結果:
- MINSETS出奇的小。方法的平均MINSET大小為1.55個關鍵字,最大值為6。
- MINSET的大小並不隨方法規模的增加而變大。事實上,如果只看最大的1000個方法,其平均和最大MINSET關鍵字分別為降到1.12和4,這表明,正如作者所言:“即便是對於一些異常龐大的方法,MINSET也是一項既獨特又靈活有效的指標。”
- 大多數程式碼幾乎盡是糟粕。平均來說,在一個方法中只有4.6%的獨特詞素可以位列MINSET。也就是說,95%以上的程式碼都是糟粕。
不過有幾處關鍵的地方需要指出來。首先,MINSET本身是不可執行的:它只是表徵了核心功能的程式碼的最小集合。剩下95%中的一些程式碼(前面稱之為糟粕)也不是無用的,因為還需要它們來執行程式。其次,儘管這項研究僅著眼於Java程式碼,不過由於語言的相似性,作者表示這些發現應該也適用於其他語言,特別是C語言和C++。
關於此項工作的意義?研究人員指出了MINSETs的潛在應用:
- 改進程式碼搜尋——MINSETs可用於基於相似查詢的程式碼搜尋結果排名。
- 智慧IDE——具備了MINSETs索引資料庫的IDE可用於提出類似的程式碼,支援自動程式碼填充,加快除錯過程。
- 備選的程式設計形式——MINSETs可用於支援基於關鍵字的程式設計,也就是說,我們可以通過一個小型的關鍵字組來建立可用的程式碼。
譯文連結:http://www.codeceo.com/article/your-code-is-far-more-chaff-than-wheat.html
英文原文:Your code is far more chaff than wheat
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- javaScript的精華與糟粕JavaScript
- 取精華、去糟粕!適合iOS開發者的15大網站推薦iOS網站
- JavaScript糟粕部分JavaScript
- 維護程式碼庫的五個精華實踐
- 《程式碼整潔之道》精華速覽,助你提升程式碼質量
- 帶你入門比Python更高效的Numpy(附程式碼)Python
- 為什麼我要垂直對齊程式碼(你也要如此!)
- SQL查詢語句精華使用簡要(轉)SQL
- 拯救你的程式碼
- 若你要開源自己的程式碼,此文帶你瞭解開源協議協議
- 好的程式碼至少要修改兩遍
- 我所瞭解的JavaScript糟粕和雞肋JavaScript
- 你要的工具類
- 《程式人生》一個月了,我要謝謝,你、你、還有你
- 拯救你的Go程式碼Go
- 評估你的程式碼
- windows核心程式設計--精華Windows程式設計
- “春節十二響”C語言程式碼開源了,你要提 PR 嗎?C語言
- 為什麼我要豎向對齊程式程式碼(你也應該這樣做)
- 程式設計師,你要愛你的身體,勝過Java和.Net程式設計師Java
- JavaScript寫程式碼要規範JavaScript
- 2K字帶你讀完《程式設計師修煉之道》精華程式設計師
- 告訴你幾個Windows下寫程式碼比Linux還順手的工具WindowsLinux
- Flex精華摘要 4:使用AS指令碼Flex指令碼
- 重構你的javascript程式碼JavaScript
- 加速你的 Python 程式碼Python
- 高亮你的PHP程式碼 (轉)PHP
- 你的程式碼寫的很爛
- Java程式設計師微服務架構你必須要掌握的十個要點Java程式設計師微服務架構
- 程式碼註釋中的5要與3不要
- 你的程式碼或許漂亮,但我的程式碼能執行
- 15 款程式碼語法高亮工具 美化你的程式碼
- 你要懂的SMART原則
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- 你要跳舞嗎
- 程式設計師:你為什麼要離職?程式設計師
- (譯)保持你的程式碼整潔
- 如何改進你的指令碼程式指令碼