手把手教你寫垃圾代碼,從入門到精通

2021-01-10 林創雲

如果說到什麼是好代碼,我們肯定都能說出一堆規則,例如使用一致的格式和縮進、使用清晰的變量名和方法名、在必要時提供文檔與注釋、不要過度精簡代碼等等。

但是對於什麼是爛代碼,你有比較清晰的認識嗎?

在 GitHub 上有一個新項目,它描述了「最佳垃圾代碼」的十九條關鍵準則。從變量命名到注釋編寫。這些準則將指導你寫出最亮眼的爛代碼。

為了保持與原 GitHub 項目一致的風格,下文沒有進行轉換。讀者們可以以相反的角度來理解所有觀點,這樣就能完美避免寫出垃圾代碼。

repo 地址:https://github.com/trekhleb/state-of-the-art-shitcode

當然,以下十九條垃圾代碼書寫準則並沒有面面俱到,如果讀者們發現有一些難以忍受的爛代碼習慣,也可以留言發表你的看法。

第一條:打字越少越好

如果我們鍵入的東西越少,那麼就有越多的時間去思考代碼邏輯等問題。如下所示,「Good」表示遵循該規則的示例,Bad 表示沒遵循該規則的示例。

第二條:變量/函數混合命名風格

我們需要混合命名方法與變量,這樣才能體現命名的多樣性。

第三條:不要寫注釋

反正代碼都看得懂,為什麼要寫注釋?或者說,反正沒人看我的代碼,為什麼要寫注釋?

第四條:使用母語寫注釋

如果你違反了第三條規則,那麼至少寫注釋需要用你的母語或者其它語言。如果你的母語是英語,那麼你也算違反了這條規則。既然程式語言絕大多數都是用英文,那麼為什麼不用其它語言注釋一下?

第五條:儘可能混合不同的格式

同樣,為了代碼的多樣性,我們需要儘可能混合不同的格式,例如單引號或雙引號。如果它們的語義相同,那就應該混用。

第六條:儘可能把代碼寫成一行

如果一系列參數與方法都是一起實現的,那麼代碼也要寫在一起。

第七條:發現錯誤要保持靜默

當你發現某些錯誤時,其他人不需要了解它,因此不需要列印出日誌或 Traceback。

第八條:廣泛使用全局變量

使用全局變量,是面向「全球化」不可或缺的部分。

第九條:構建備用變量

以防萬一,我們需要創建一些備用變量,在需要時隨時調用它們。

第十條:Type 使用需謹慎

一般不要指定變量類型或者經常做類型檢查,無類型才是最好的類型。

第十一條:準備「Plan B」

你需要準備一些運行不到的代碼(unreachable code),它們可以作為你的「Plan B」。

第十二條:嵌套的三角法則

如果代碼有一些嵌套結構,或者說縮進空行的結構,三角法則是最漂亮的。

第十三條:混合縮進

我們需要避免採用縮進,因為縮進會使複雜代碼在編輯器中佔用更多的空間。如果一定要採用縮進,那麼就使用混合縮進策略。當然,這種策略在 Python 中是行不通的,因為它靠縮進來確定代碼結構。

第十四條:不要鎖住依賴項

每一次要安裝新庫時,更新已有的依賴項。為什麼要維持之前的版本呢,我們需要時刻保持最新的第三方代碼庫。

第十五條:長函數比短函數好

不要將程序整體邏輯分割為一些代碼塊,要是 IDE 突然不行了,它找不到必要的文件或函數怎麼辦。因此把代碼寫在一個主體函數中,並且不再維護額外的函數導入或代碼文件,那麼這樣的方法是最穩定的。單個文件一萬行代碼是沒問題的,單個函數一千行代碼也是沒問題的。

第十六條:代碼不需要做特定測試

這些測試通常是重複且無意義的工作。

第十七條:儘量避免重複代碼按你的想法寫代碼,尤其是在小團隊中,畢竟這是「自由」準則。

第十八條:構建新項目不需要 README 文檔

在項目前期,我們可以暫時保持這種狀態。

第十九條:保存不必要的代碼在寫代碼的過程中,經常會產生很多測試代碼。這些代碼也是非常重要的資料,因此不能刪除掉,最多只能注釋掉。

相關焦點

  • 手把手教你寫網絡爬蟲(5):PhantomJS實戰
    本系列:《手把手教你寫網絡爬蟲(1):網易雲音樂歌單》《手把手教你寫網絡爬蟲(2):迷你爬蟲架構》
  • R語言從入門到精通:Day2
    今天,我們就開始進入到《R語言從入門到精通》的第二節:R和RStudio的使用。上節課程中,我們講解了R和RStudio的安裝,本節內容我們來學習如何使用他們。有同學可能覺得簡單,那不就是打開軟體直接敲擊幾個命令就行了嘛。其實不然哦,R和RStudio是我們這一系列課程最重要的基礎,特別是RStudio的使用,所以我們有必要把它們兩個詳細系統地給大家講解一下。
  • 手把手教你寫程序 - 電子技術基礎知識
    手把手教你寫程序:內容:從最簡單的程序入手,手把手教你寫程序,讓同學們拿到一個複雜的程序或者任務,能快速找到切入點,寫出程序,再在此基礎上優化程序。寫小程序可能比別人快,若是大程序,一旦出現思維混亂,或者出現程序調試不出結果,那麼你花在調試上的時間,要比別人的多。 !!!!!!磨刀不誤砍柴工!!!!!!程序的優化:屬於後期工作,只有調試出來後,才去優化,如果一開始優化和寫程序同時進行,一是加重你的思考量,二是出現問題無從下手。無疑增加了寫程序的難度。
  • 下載 | 《手把手教你學51單片機-C語言版》
    編輯推薦《手把手教你學51單片機(C語言版)》的創作,目的就是改變當前「51單片機」教學與自學的模式:國內首創「手把手教你學」——集理論知識、視頻教程未出版圖書就接收到數百份訂單!本科院校、職業院校的多名主講教師閱讀樣章後一致認同並採用為教材(對於購買教師讀者,將遴選贈送開發板)。可以預見,《手把手教你學51單片機(C語言版)》將引領一場單片機教學的革命!作者簡介宋雪松 ,國內知名單片機培訓專家,嵌入式產品技術顧問。
  • C#從入門到精通視頻教程
    C#從入門到精通視頻教程
  • R語言從入門到精通:Day1
    今天是我們的系統教程《R語言從入門到精通》的第一講,前面的背景講解中《從今天開始,每天學點R語言~》,已經深入探討過R語言的重要性以及學習R語言的必要性
  • 【零基礎入門】手把手帶你系統化學習R語言
    R語言支持從多種數據源導入數據,可以用相同的代碼處理不同規模的數據集。此外,R語言社區還能提供多種高質量的科研繪圖R包,ggplot2是其中的代表。對於沒有編程基礎的科研汪們來說,如何才能快速入門並掌握R語言的基本技能呢? 【募格學術】攜手鬆鼠老師共同研發的《R語言編程基礎》課程,手把手教你從入門到精通。
  • 學習Java最好的10本書,從入門到精通
    在這些活動中,你會寫出一堆真正的Java程序,包括一個船艦炮戰遊戲和一個網絡聊天程序。他是很多程式設計師的啟蒙書籍,常年霸榜Amazon書籍前十排名。2、Java8 編程入門官方教程如果你對編程有一定的了解,以前有接觸過C++或者C#等語言,覺得第一本書的內容講的太淺顯,而感覺學習進度太拖沓,那麼,這本官方入門教程就是你的不二之選。這是一本關於編程基礎知識的好書,涵蓋了Java核心的所有基本概念。
  • 【課程預告】手把手教你入門生信——The Biostar Handbook
    我深知生信入門不易,且國內並沒有系統入門,手把手帶著操作的資料。所以,我給寫這個課程的作者István Albert寫了封郵件,取得了這個在線課程的翻譯以及發布到公眾號的授權。首先容我介紹一下這個課程及其作者István Albert。
  • 188個Excel VBA視頻教程,從入門到精通!
    本期精選188個VBA學習全套視頻教程(從入門到精通)通俗易懂--30個Excel-VBA基礎與實戰視頻課程你學得會--44個Excel VBA網抓視頻課程完整版--78個ExcelVBA整合Access資料庫編程
  • Python:從入門到精通 完整版PDF[7MB]
    Python可以用於很多的領域,從科學計算到遊戲開發。本書提出了以理解和運用計算生態為目標的Python語言教學思想,不僅系統講解了Python語言語法,同時介紹了從數據理解到圖像處理的14個Python函數庫,向初學Python語言的讀者展示了全新的程式語言學習路徑。
  • 數據分析課程清單,從入門到精通
    ,目前好評如潮,記住有了思維和方法論再去入門,這樣你定位更加清晰,後期也可作為自己思維的提升,多看幾遍適合人群:預用數據分析來升職、提升、加薪的從業者第三門:數據分析師的通關升級師資:陳哲,先後在市研公司、網際網路公司和數據協會任職,出版《數據分析:企業的賢內助》、《活用數據:驅動業務的數據分析實戰》特色: 思維先導、案例落地、深入淺出、全面細緻,手把手帶你實戰數據分析
  • 358頁Revit建模基礎教程,教你如何從入門到精通
    358頁Revit建模基礎教程,教你如何從入門到精通,全部無償分享。BIM是一種理念、流程或者淺顯的說是一種實現3D可視化工程管理的一個工具。同時,BIM可以貫穿項目的全生命周期。BIM是一個技術,也是行業趨勢,而REVIT是實現BIM理念的工具之一。
  • 宏從入門到精通(盜賊專用)
    >點擊上方藍色文字關注公眾號 更多職業教程 在 公眾號福利戳我選項哦如侵請告知宏從入門到精通恩,對大多數人可能不管黑貓白貓複製下來能用的宏就萬事ok了...但我個人不喜歡不求甚解的態度,而且看見過的多數拿出來分享給別人用的宏,用計算機專業的標準衡量,代碼往往冗餘,這就意味著效率的損失,也就意味著片刻的延時,或許片刻就是生死的分界線....這篇宏的經驗文章寫給那些想多了解一些宏的知識的玩家,如果不想自己動手寫宏的玩家不用往下看。
  • 學習 | R語言從入門到精通:Day2-R和RStudio的運行視頻教程
    上節課程中,我們講解了R和RStudio的安裝,(錯過的朋友,可以直接點擊這裡)R語言從入門到精通
  • Python要學習多久能入門?精通需要多久?
    學習Python是大家進入編程世界的首選,在學習Python之前不少人都會關注學習時間和周期的問題,Python需要學多久可以入門?精通需要多長時間呢?為大家詳細的介紹一下。如果是自學Python,從基礎開始學習,按照每個人的能力來說,需要半年到一年半左右的時間,如果具有一定開發經驗和基礎的情況下,入門會快一些,需要2-3個月左右就可以寫一些簡單的小程序,不過想要真正精通,還是需要參加系統化的學習,才可以更好的掌握好Python技術。
  • 電源拓撲從入門到精通
    真要精通各種拓撲,沒有五年八年的時間基本不可能。很多搞電源設計的做個兩三年基本也就「精通」一二種拓撲而已,最多的就是反激、反激還是反激。什麼原邊反饋(PSR)啦、準諧振(QR)等等也還是反激,好一點的多了一種正激(說到這裡有些工程師大概心裡已經不服氣了)。現在好了,你想在短時間內精通各種拓撲嗎?
  • 視頻教程:Java從入門到精通
    正在閱讀:視頻教程:Java從入門到精通視頻教程:Java從入門到精通2006-06-28 15:42出處:作者:孫鑫>   《Java從入門到精通》視頻教程由孫鑫老師錄製(作者網站:http://www.sunxin.org),教程通俗易懂,內容全面,帶領Java初學者從入門到精通,快速掌握 Java 程式語言。
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • Excel PPT Word 從入門到精通教程合輯 只要9.9
    >Excel精講濃縮7小時,從入門到精通 包括你需要知道關於Excel的一切日常工作知識 從圖表創建 如果你日常使用對國內其他辦公軟體兼容性更優秀的WPS,這裡也有相應教程供你選擇:WPS 2016表格視頻教程入門到常用函數 對於已經有了一定Excel基礎的你,一定希望實現從精通到大神的轉變。