程式碼整潔之道--讀書筆記(6)

畅知發表於2024-09-09

程式碼整潔之道

image-20240904225436374

簡介:

本書是程式設計大師“Bob 大叔”40餘年程式設計生涯的心得體會的總結,講解要成為真正專業的程式設計師需要具備什麼樣的態度,需要遵循什麼樣的原則,需要採取什麼樣的行動。作者以自己以及身邊的同事走過的彎路、犯過的錯誤為例,意在為後來者引路,助其職業生涯邁上更高臺階。

本書適合所有程式設計師閱讀,也可供所有想成為具備職業素養的職場人士參考。

第六章:練習

image-20240909224659172

專業人士都需要透過專門訓練提升自己的技能,無一例外。樂手練習音階,球員練習繞樁,醫生練習開刀和縫針,律師練習論辯,士兵練習執行任務。要想表現優異,專業人士就會選擇練習。本章要講的是程式設計師如何提升專業技能。

轉變

任何事情,只要想做得快,都離不開練習。要想盡可能快地重複編碼/測試過程,就必須能迅速做出決定。這需要識別各種各樣的環境和問題,並懂得應付。

如果有兩個習武者在搏鬥,每個人都必須能夠迅速識別出對方的意圖,並且在百分之一秒內正確應對。在搏鬥時,你不可能有充足的時間來研究架勢,思考如何應對。這時候,你只能依靠身體的反應。

實際上,真正做出反應的是你的身體,大腦是在更高階的層面上思考。在每分鐘進行許多次編碼/測試的狀態下,你身上的肌肉記憶了要敲哪個鍵。意識中較基礎的部分識別情景,在百分之一秒的時間內做出合適的反應,大腦則可以放心思考更高層次的問題。

6.2 程式設計柔道場:

卡塔:

在武術裡,卡塔是一套設計好的、用來模擬搏鬥一方的招式。目標則是要逐步把整套招式練習到純熟。習武者努力訓練自己的身體來熟悉每一招,把它們連貫成流暢的套路。訓練有素的卡塔看起來相當漂亮。

與之類似,程式設計卡塔也是一整套敲擊鍵盤和滑鼠的動作,用來模擬程式設計問題的解決過程。練習者不是在解決真正的問題,因為你已經知道了解決方案。相反,你是在練習解決這個問題所需要的動作和決策。

要學習熱鍵和導航操作,以及測試驅動開發、持續整合之類的方法,找整套的卡塔來練習都是相當有效的。更重要的是,它特別有利於在潛意識中構築通用的問題與解決方案間的聯絡,以後在實際程式設計中遇到這類問題,你馬上就知道要如何解決。和習武者一樣,程式設計師應該懂得多種不同的卡塔,並定期練習,確保不會淡化或遺忘。

真正的挑戰是把一個卡塔練習到爐火純青,你可以窺見其中的韻律。要做到這一點可不容易。

瓦薩:

兩個人的練習。

瓦薩基本可以說是兩個人的卡塔。其中的招式需要精確地記憶,反覆演練。一個人負責攻,另一個人負責守。攻守雙方互換時,各種動作要一而再、再而三地重複。

程式設計師可以用一種叫“乒乓”的遊戲來進行類似的練習:兩個人選擇一個卡塔,或者一個簡單問題,一個人寫單元測試,另一個人寫程式透過單元測試,然後交換角色。

寫單元測試的程式設計師會極力控制解決問題的方式,他也有足夠的空間來施加限制:如果程式設計師選擇實現一個排序演算法,寫測試的人可以很容易地限制速度和記憶體,給同伴施壓。這樣整個遊戲就非常考驗人……也可以說是非常有趣。

自由練習:

多人練習。

很多程式設計練習場中都會玩一種叫“自由練習”的遊戲。它很像由兩個參與者解決問題的瓦薩,只是自由練習是有很多人參與的,而且規則是可以延續的。在自由練習中,螢幕被投影到牆上,一個人寫測試,然後坐下來,另一個人寫程式透過測試,再寫下一個測試。桌子邊的人一個個輪流接下去,或者有興趣的人可以自己排隊參加。無論怎麼安排,都是非常有趣的。

6.3 自身經驗的擴充

職業程式設計師通常會受到一種限制,即所解決問題的種類比較單一。老闆通常只強調一種語言、一種平臺,以及程式設計師的專門領域。經驗不夠豐富的程式設計師,履歷和思維中都存在某種貽害無窮的盲區。經常可以看到這樣的情景:程式設計師發現,面對行業的週期性變化造成的新局面,自己並沒有做好準備。

開源:

保持不落伍的一種方法是為開源專案貢獻程式碼,就像律師和醫生參加公益活動一樣。開源專案有很多,為其他人真正關心的開源專案做一點貢獻,應該可以算是提升技能的最好辦法了。

關於練習的職業道德:

職業程式設計師用自己的時間來練習。老闆的職責不包括避免你的技術落伍,也不包括為你打造一份好看的履歷。醫生練習手術不需要病人付錢,球員練習繞樁(通常)不需要球迷付錢,樂手練習音階也不需要樂迷付錢。所以老闆沒有義務為程式設計師的練習來買單。既然你用自己的時間練習,就不必限制在老闆規定的語言和平臺。可以選擇你喜歡的語言,練習你喜歡的技術。

結論:無論如何,專業人士都需要練習。他們這麼做,是因為他們關心自己能做到的最好結果。更重要的是,他們用自己的時間練習,因為他們知道保持自己的技能不落伍是自己的責任,而不是僱主的責任。練習的時候你是賺不到錢的,但是練習之後,你會獲得回報,而且是豐厚的回報。

相關文章