拜託:不要像鮑勃大叔那樣重構

banq發表於2024-06-13

部落格文章“不要像鮑勃大叔那樣重構”批評了羅伯特“鮑勃大叔”馬丁在其頗具影響力的著作“清潔程式碼”中給出的重構建議。關鍵點如下:

重構並不總是答案:

  • 鮑勃大叔提倡不斷、強迫性地進行重構,這可能會導致過度工程和浪費精力。
  • 重構應該謹慎進行,而不是作為預設方法。

重構的收益遞減:

  • 雖然重構可以在短期內改善程式碼,但它往往會導致無休止的調整和重做迴圈,而長期收益甚微。
  • 在某種程度上,成本大於收益。

簡單優先於純粹:

  • 不要透過重構來追求理想化的“乾淨”程式碼風格,
  • 而是優先考慮簡單性、可讀性和滿足實際需求,而不是追求理論上的完美。

瞭解上下文:
Bob 大叔的建議沒有充分考慮到程式碼庫的現實情況,這些程式碼庫有遺留的限制、截止日期和有限的資源。

  • 在這種情況下,重構熱情可能會適得其反。

總而言之,該帖子告誡不要將鮑勃大叔的重構原則視為教條,而是提倡採用更務實、更具上下文 感知的方法來改進程式碼。

網友:
1、他在書中提出的理想的程式碼在我整個職業生涯中從事的任何工作中都無法透過程式碼審查。無法透過程式碼審查。不管它是否經得起時間的考驗。它會因為難以理解而被立即拒絕。

2、說實話我從來都不喜歡這個人。對我而言,他就像是架構宇航員。

3、抨擊鮑勃大叔已經成為一種時尚

4、他是性別歧視者、種族主義者和法西斯主義者。他假裝道歉,然後一遍又一遍地重複同樣的事情。我看不出能從這樣一個討厭我一半同事的人身上學到什麼,而且這個人已經證明他們無法學習任何新東西。他開始大肆宣揚右翼瘋狂言論。

5、《Clean Code》不是一本好書,他的文章也不好,他的簡報和他提供的作為證明的程式碼也不好。
但他在品牌推廣方面非常擅長。

6、我通常是為他的重構辯護的人,但是……這篇文章說得很對。鮑勃的版本讓我很煩——類變數的變異似乎沒有必要,而且使事情變得複雜。我們不能只是從頭到尾跟著程式碼,就能明白髮生了什麼,我們必須跳來跳去。

7、《程式碼整潔之道》中的很多內容在概念上是有效的,但在其他方面卻過時了。

  • 在 Java 世界中,AOP、DI 和 IOC 框架無需所有樣板程式碼即可實現類似的解耦、可擴充套件性等。
  • 也許是時候擁有一個“程式碼整潔之道:現代方式”,既可以採用傳統方式,也可以採用更“實戰”的方式。談到將程式碼重構為改變狀態的函式的具體示例,不使用引數和引數來提供提示可以隱藏所需的操作順序。

8、他對自己不使用且永遠不會使用的技術有強烈的意見,從而建立了自己的職業生涯。他很幸運,抓住了一些像 SOLID 這樣的獨立流行的首字母縮略詞,並且他能夠幫助推銷它們。
他還極大地受益於這樣一個事實:

  • 開發世界中沒有大量的公眾演講者,
  • 而安排活動的人實際上不是業內人士。

他可以說出足夠多的概念來完成一個小時的演講。而少數願意費心閱讀他的東西的經驗豐富的開發人員習慣於瀏覽技術術語並只提取有用的東西。

他的書不是為經驗豐富的開發人員寫的。它們是為需要建議的新開發人員寫的。而且他給出的建議很糟糕。如果你聽從這些建議,你就會成為一個更糟糕的程式設計師。你甚至可能不具備程式設計師的資格。就像羅伯特·C·馬丁一樣。


banq注:對於初學者,好像學習鮑勃大叔的理論有好處,其實學習 “上下文”這個哲學概念更重要。

當你學習一項新知識時:

  • 你要意識到你走入了新的上下文
  • 學習過程中看到各種案例,都是有其背景上下文限制的,很多模式無法歸納抽象出來跨越上下文,無法成為最佳實踐
  • 如果你忽視上下文,把這些模式套用到其他上下文,就如同你學習一種英語口氣,然後把這種語氣複用到多個其他說話場景,反而東施效顰。或者,南方人學習北京人的“兒”音,結果說話帶兒音很難受。
  • 大語言模型在這種歸納上比人類強,所以說,大模型基本解決了人類的歸納抽象能力,當然人類另外一個演繹推理能力很難超越。

相關文章