當前位置: 妍妍網 > 辦公

軟體開發小段子4則

2024-05-20辦公

人物說明:

大師 :從事開發工作 20 年有余,精通各類程式語言,有著常人難以匹敵的軟體工程經驗,說話時惜字如金,有時會讓人覺得有些神神叨叨 (但人不壞) 學徒 :學習編程的時間不長,熱衷於提升自己的軟體開發技能,勤學好問。

1. 1 行程式碼與 20 行註釋

一天,學徒問大師:「我每天都寫很多程式碼,實作很多需求,為何編碼水平卻停滯不前?」

大師回答道:「讓我看看你在寫些什麽。」

學徒開啟電腦。大師指著螢幕上一行普通的賦值語句,說:「當你有一天意識到,需要在這前面補充 20 行註釋時,你就成長了。」說完,大師轉身離開了。

piglei 說

在編程時,人們理想中的程式碼應該是「自說明」的——無需任何註釋也很容易理解。

但也有些時候,程式要處理的場景過於復雜,導致我們實際上沒法只用程式碼就將重要資訊全部表達出來。此時,如何找到那幾行重要的程式碼,並用大段註釋將隱藏的知識有效表達出來,就變得很重要。

作為一名程式設計師,有能力編寫可讀性高的程式碼固然很好,但若是還能信手寫出言簡意賅的註釋與文件,更是錦上添花。

2. 刪掉註釋

一天,學徒問大師:「我每天都寫很多程式碼,實作很多需求,為何編碼水平卻停滯不前?」

大師回答道:「讓我看看你的程式碼。」

學徒開啟電腦,大師指著螢幕上的一段註釋,說:「刪掉它。」

學徒照做。沈吟片刻後,學徒大聲說道:「我明白了,你是說要關註程式碼本身的描述性,而不是過度依賴註釋來解釋程式碼!」

大師搖搖頭,說:「不,我只是想看看你的指法,而據我觀察,你甚至不能盲打。」然後,大師轉身離開了。

piglei 說

學徒口中的「關註程式碼的描述性,不要過度依賴註釋」誠然很對,但這次,頑皮的大師的關註點實際上在別處:基礎技能(盲打)。

在工作中,一名程式設計師要用到的工具多種多樣。我見過一些程式設計師,他們就像段子中不會盲打的學徒一樣,對每日使用的編輯器、IDE 和命令列工具只是略通皮毛,從未花時間系統性地學習過。

但是,深入掌握那些日常工具,以及有意識地增進那些底層技能(比如說打字速度),實際上會對工作效率帶來意想不到的豐厚報酬。

3. 微服務架構能力

一天,學徒問大師:「我該如何提升自己的微服務架構能力?」

大師回復道:「讓我看看你的程式碼。」

學徒開啟電腦,大師看到計畫的 utils 目錄,其程式碼規模數倍於其他功能模組的總和。大師說道:「如果你不懂如何組織模組,那麽你實際上也無法‘架構’任何其他東西。」

然後,大師轉身離開了。

piglei 說

設計一個大的單體計畫,與設計由一堆微服務構成的分布式系統之間有許多相通之處,二者遵循一些類似的指導原則。

比方說「單一職責原則」,該原則所回答的問題是:」應該如何設計計畫的模組(或微服務),才能讓我們在開發功能時,不牽扯太多無關的模組(或微服務)?「它對於兩種架構風格同樣有效。

「模組化」是軟體開發中最重要的指導思想之一,無關架構模式。

4. 聰明的程式碼

一天,學徒問大師:「我將 10 行 Python 程式碼用推導式最佳化成了 1 行,新程式碼非常漂亮,為何提的 PR(程式碼合並請求)卻被拒絕了?」

大師說:「你的 PR 是我拒絕的。」

見學徒有些吃驚,大師又補充道:「我一個月前寫了那 10 行程式碼。」

學徒的臉有些紅,不過仍不想放棄自己的 PR,於是他爭辯道:「但是,就在我改動的函式旁邊有個類似的函式,那裏面有許多更復雜的單行推導式程式碼,為什麽把它們合並進來?」

「哦,那是我 10 年前寫的程式碼。」大師答道。

piglei 說

「什麽樣的程式碼是好程式碼?」

對於這個問題,隨著「編碼工齡」的增長,我們的答案會發生天翻地覆的變化。

段子裏的大師,十年前醉心於用最少的程式碼表現最復雜的邏輯。十年後,卻更傾向於寫那些平平無奇的簡單程式碼。

對於程式碼來說,「可讀性」永遠是第一位。將諸多邏輯壓縮在一行程式碼中,是一種有趣的思維訓練(容易讓作者自我感覺良好),但常常以損害可讀性為代價。

在編程時,我們需要在「華麗的程式碼」和「樸實的程式碼」間找到一個平衡點,而據我觀察,隨著經驗的增長,那個平衡點會持續向著「樸實」那一端移動。

此外,我還有一句話想對學徒說:「既然沒 bug,咱不如就別動那些程式碼了唄?」

Crossin的新書【 碼上行動:用ChatGPT學會Python編程 】已經上市了。 本書以ChatGPT為輔助,系統全面地講解了如何掌握Python編程,適合Python零基礎入門的讀者學習。

購買後可加入讀者交流群,Crossin為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。

Crossin的其他書籍:

添加微信 crossin123 ,加入編程教室共同學習 ~

感謝 轉發 點贊 的各位~