程式設計師都應記住的 10 句編程諺語

2021-03-01 Linux愛好者

(點擊上方公號,可快速關注)

英文:Kevin Williampang

譯者:伯樂在線 - 高志翔

連結:http://blog.jobbole.com/297/

所謂諺語,就是用言簡意賅、通俗易懂的方式傳達人生箴言和普遍真理的話,它們能很好地幫助你處理生活和工作上的事情。也正因如此,我才整理了 10 句編程諺語,每位開發人員/技術人都應該銘記它們,武裝自己。

1. 無風不起浪

別緊張,這也許只是一場消防演習

代碼設計是否糟糕,從某些地方就可以看出來。比如:

a. 超大類或超大函數

b. 大片被注釋的代碼

c. 邏輯重複

d. If/else嵌套過深

程式設計師們通常稱它們作代碼異味(Code Smell),但是就我個人認為「代碼警報」這個名字更為合適一些,因為它有更高的緊迫感的含義。根本問題處理不當,終將引火燒身。

譯註:Code Smell中文譯名一般為「代碼異味」,或「代碼味道」,它是提示代碼中某個地方存在錯誤的一個暗示,開發人員可以通過這種smell(異味)在代碼中追捕到問題。

2. 預防為主,治療為輔

好吧,我相信了!

20世紀80年代,豐田公司的流水作業線因為它在缺陷預防方法上的革新變得出了名的高效。每個發現自己的部門有問題的成員都有權暫停生產。這個方法意在寧可發現問題後馬上暫定生產、解決問題,也不能由其繼續生產而導致更棘手且更高代價的修復/更換/召回後的問題。

程式設計師總會做出生產率就等同於快速編碼的錯誤臆斷。許多程式設計師都會不假思索地直接著手代碼設計。可惜,這種Leeroy Jenkins式魯莽的做法多會導致軟體的開發過程變得很邋遢,拙劣的代碼需要不斷的監測和修改——也可能會被徹底地替換。最終,生產率所涉及到的因素就 不僅僅是寫代碼所消耗的時間了,還要有調試的時間。稍不留神就會「撿了芝麻丟了西瓜」。(因小失大。)

譯註:Leeroy Jenkins 行為:WOW遊戲中一位玩家不顧大家獨身一人迎敵,導致滅團。

3. 不要孤注一擲 (過度依賴某人)

一個軟體開發團隊的公共要素(bus factor)是指那些會影響整個項目進程的核心開發人員的總數。比如某人被車撞了或某人生孩子或某人跳槽了,項目可能就會無序,甚至會擱置。

譯註: bus factor 即指公共要素,比喻了開發過程中的一些共同因素。如果擠上 bus 的 factor 越多,bus 就越不穩定,所以要控制好 bus factor ,以免問題發生。

換句話說,如果你的團隊突然失去了一個主力成員,你會怎麼辦?業務依舊進行還是戛然而止?

很不幸,大多數軟體團隊都陷入了後一種情況。這些團隊把他們的開發員培養成了只會處理他們自己專業領域的「領域專家」。起初,這看起來是一個比較合理的方法。它 對汽車製造裝配生產線很適用,但是為什麼對軟體開發團隊就不行呢?畢竟,想讓每個成員都掌握所編程序的細微差別也不太可能,對吧?

問題是開發人員不容易輕易替換掉。雖然當每位成員都可用時,「抽屜方法」很有效,但如果當「領域專家」突然因人事變動、疾病或突發事故而無法工作時,抽屜 方法立馬土崩瓦解。(所以,)軟體團隊有一些看似多餘實則重要的後備力量是至關重要。代碼複查、結對編程和共有代碼可用成功營造一個環境,在這個環境中, 每位開發人員至少表面上是熟悉自己非擅長領域之外的系統部分。

4. 種瓜得瓜,種豆得豆

《The Pragmatic Programmer | 程式設計師修煉之道》一書中有這樣一段話解釋「破窗理論」:不要留著「破窗戶」(低劣的設計、錯誤的決策或者糟糕的代碼)不修。發現一個就修一個。如果沒有足夠的時間進行適當的修理,就先把它保留起來。或許你可 以把出問題的代碼放到注釋中,或是顯示「未實現」消息,或用虛擬數據加以替代。採取一些措施,防止進一步的惡化。這表明局勢尚在掌控之中。

我們見過整潔良好的系統在出現「破窗」之後立馬崩潰。雖然促使軟體崩潰的原因還有其他因素(我們將在其他地方接觸到),但(對「破窗」)置之不理,肯定會更快地加速系統崩潰。

簡而言之,好的代碼會促生好的代碼,糟糕的代碼也會促生糟糕的代碼。別低估了慣性的力量。沒人想去整理糟糕的代碼,同樣沒人想把完美的代碼弄得一團糟。寫好你的代碼,它才更可能經得住時間的考驗。

譯註:《程式設計師修煉之道》,作者Andrew Hunt / David Thomas。該書直擊編程陳地,穿過了軟體開發中日益增長的規範和技術藩籬,對核心過程進行了審視――即根據需求,創建用戶樂於接受的、可工作和易維護的 代碼。本書包含的內容從個人責任到職業發展,直至保持代碼靈活和易於改編重用的架構技術。從本書中將學到防止軟體變質、消除複製知識的陷阱、編寫靈活、動 態和易適應的代碼、避免出現相同的設計、用契約、斷言和異常對代碼進行防護等內容。

譯註:破窗理論(Broken Window theory):是關於環境對人們心理造成暗示性或誘導性影響的一種認識。「破窗效應」理論是指:如果有人打壞了一幢建築物的窗戶玻璃,而這扇窗戶又得不到及時的維修,別人就可能受到某些暗示性的縱容去打爛更多的窗戶。發現問題就要及時矯正和補救。

5. 欲速則不達

經理、客戶和程式設計師正日益變得急躁。一切都需要做的事,都需要馬上就做好。正因如此,快速修復問題變得非常急迫。

沒時間對一個新功能進行適當的單元測試?好吧,你可以先完成一次測試運行,然後你就可以隨時回來繼續測試它。

當訪問Y屬性時,會不會碰到奇怪的對象引用錯誤?無論怎樣,把代碼放到try/catch語句塊中。我們要釣到大魚啦!

是不是似曾相識呢?這是因為我們在以前已經都做到了。並且在某些情況下、它是無可非議的。畢竟,我們有最後期限,還得滿足客戶和經理。但不要過於頻繁操 作,否則你會發現你的代碼不穩定,有很多熱修復、邏輯重複、未測試的方案和錯誤處理。最後,你要麼是把事情草草做完,要麼是把事情好好做完。

6. 三思而後行

「敏捷開發」這個詞最近被頻繁濫用,經常被程式設計師用來掩飾他們在軟體開發過程中的糟糕規劃/設計階段。我們是設計者,看到產品朝正當方向有實質進展,我們理應高興。但意外的是,UML圖和用例分析似乎並不能滿足我們的願望。所以,在不知自己做什麼的情況下或者不知自己身處何處時,我們開發人員經常就稀裡糊塗地寫代碼了。

這就好比你要去吃飯,但你根本沒有想好去哪裡吃。因為你太餓了,所以你迫不及待地找個餐館,定個桌位。然後你上車開車後沿途在想(找地方吃飯)。只是,這樣會耗費更多的時間,因為你要過較多的U型彎道,還在餐館前停車,也許最後因等待時間過長而不吃了。確切地說,你最後應該能找到地方吃飯,但你可能 吃的飯並不是你想吃的,並且這樣花費的時間,可能比你直接在想去的餐館訂餐所花的時間更長。

7. 如果你惟一的工具是一把錘子,你往往會把一切問題看成釘子

看見了吧?我早就說過動態記錄在這個項目中很有效

程式設計師有一種傾向,當一談到他們工具時,其視野就變狹窄了。一旦某種方法在我們的一個項目上「行得通」,我們就會在接下來所有的項目上都用到它。學習新東 西仿佛是一種煎熬,有時候甚至會心神不定。從始至終都在想「如果我用之前的方法做、這個就不會這麼麻煩了」。一定要摒棄這種想法,按我們所知道的去做,即使那不是最完美的解決方法。

堅持自己所知很簡單,不過從長遠的角度講,選擇一個適合這項工作的工具要容易得多。否則,就會與你的職業生涯格格不入。

8. 沉默即贊同

我什麼都沒看見!沒看見!

「破窗理論」與」變成慣性理論」有著宏觀的聯繫。

編程社區就好像一個現實社區。每個作品都是一個開發者的縮影。糟糕的代碼發布的越多,就越容易反映現狀。如果你不去努力編寫優秀、整潔和穩定的代碼,那你每天都將和糟糕的代碼相伴了。

同樣地,如果你看到別人寫出了糟糕的代碼,你就要跟這個人提出來。注意,這時候機智就應該用上場了。一般情況下,程式設計師都願意承認他們在軟體開發中還是有不懂的地方,並且會感謝你的好意。互相幫助對大家都有利,而對問題視而不見,只會使問題一直存在。

9. 雙鳥在林,不如一鳥在手

如果可以討論系統架構和重構,那麼就差找個時間把事情做完。為了使正常運作的東西更加簡潔而做改動,權衡改動的利弊很重要。當然了,簡潔是一個理想目標, 但總會有可以通過重構改進的代碼。在編程世界中,為了代碼不過時,會頻繁簡單改動代碼。但有時候你又必須保證代碼對客戶有價值。那麼,你面臨一個簡單窘 境:你不能一石二鳥。你在重構舊代碼上所發時間越多,你編寫新代碼的時間就越少。在及時改進代碼和維護程序之間,也需要找到平衡點。

10. 能力越大,責任越大

毫無疑問,軟體已成為我們生活中一個既基本又重要的一部分。正因如此,開發優秀軟體格外重要。桌球遊戲中的Bug是一回事,太空梭導向系統或者航空交通管制系統中的Bug是另外一回事。Slashdot曾發表一文,講述了單單Google News的一個小失誤使一家公司股票蒸發11.4億美元。其他例子參見《Bug 引發的 18 次重大事故》。這些例子便說明了我們正行使著多大的權利。你今天寫的代碼,無論你是否有意,說不定有朝一日在重要的應用程式中派上用場,這想想都令人害怕。編寫正確合格的代碼吧!

-- 推薦 --

範品社推出的極客T恤,含程式設計師、電影、美劇和物理題材,面料舒適、100%純棉,有黑、白、灰、藏青色,單件 ¥59.9、兩件減¥12、四件減¥28、六件減¥42,詳見網店商品頁介紹。

(上面為部分 T 恤款式)

網店地址:https://fanpinshe.taobao.com

淘口令:複製以下紅色內容,然後打開手淘即可購買

範品社,使用¥極客T恤¥搶先預覽(長按複製整段文案,打開手機淘寶即可進入活動內容)

相關焦點

  • 10年老程式設計師告訴你的10條編程原則
    在我寫了10來年程序之後,或多或少有一些心得,希望在這裡做一個總結分享給大家,為了不讓本文變成一篇和其他總結問類似的水文,我儘可能用自己的親身經歷來告訴大家編程中遇到的問題和解決思路。1: 磨刀不誤砍柴工磨刀不誤砍材工這個故事相信很多人都聽過,但是用到自己身上可能就是失效了。
  • 一名優秀的程式設計師需要精通幾種程式語言?
    2010年,迪安·萬普勒在演講中進一步詳細解釋了福特的論文,他在其中重申了不同語言在不同領域的優勢,並且程式設計師應使用最適合的語言工具來完成工作。多語言編程的思想起源於2000年代中期,是在身處Java生態系統的程式設計師群體中萌發的。
  • 國外程式設計師推薦:每個程式設計師都應讀的書
    無論您的經驗水平如何,也不管您在怎樣的開發環境中工作,也無論項目是大是小, 本書都將激發您的思維並幫助您構建高品質的代碼。《代碼大全(第2版))》做了全面的更新,增加了很多與時俱進的內容,包括對新語言、新的開發過程與方法論的討論等等。推薦數:1504對於那些已經學習過編程機制的程式設計師來說,這是一本卓越的書。
  • @程式設計師,這些編程陷阱你中招了嗎?
    以嚴謹著稱的程式設計師們似乎與「迷信」一詞毫無關係。不過事實上,很多程式設計師都存在一些根深蒂固的編程誤解,即使是 Hacker News 或 Proggit 上的很多程式設計師精英也不能避免。以下為譯文:我對誤解很感興趣。
  • 10個免費程式設計師自學編程技術的網站推薦
    點擊藍字關注我獲取 高效/實用/好玩 的工具軟體和教程分享 10 個免費的程式設計師或愛好者自學編程技術的網站,無論是新手入門修煉
  • 程式設計師必讀經典長文:用十年時間自學編程
    雖然離初次發表已經好幾年了,但所有試圖自學編程的人都應該發自內心的同意它的說法(除去少數過時的具體技術部分)。直到今天,這篇經典的文章依然很有借鑑意義。以下是這篇文章的中文版。為什麼每個人都這麼匆忙?在排在前十名的書籍中,有九本是編程書籍,剩下一本是關於財務管理的。用「teach yourself」代替「learn」,或者用「day」代替「hours」產生的結果類似。結論是,要麼人們急於學習編程,要麼編程比其他任何東西都更容易學習。
  • 每個程式設計師都該閱讀的十本編程書籍
    1、《代碼大全》等級:大神級個人感悟:不管你是.NET程式設計師,還是Java程式設計師,或者不管XX程式設計師,不看這本書,寫盡程序也枉然啊!有人說這個說法有些過激,不過我個人覺得這個說法還是恰當的。這本書全方位360度的講解了我們在寫代碼時應該注意的問題。寫出好的代碼,利國利民,利我利他人。
  • 只有程式設計師才能理解的編程語錄
    筆者收集了很多編程語錄,基本上都跟程式設計師的生活有關。這些語錄涉及軟體開發,代碼維護,調試糾錯,軟體bug,系統設計、文檔,代碼質量,測試和軟體開發團隊管理等方面。下面的這59條語錄雖然很搞笑,但卻真實無比。只有程式設計師才能理解這些編程語句裡的真正內涵。
  • 十大編程禁忌 程式設計師必須克服
    d.了解需求——在整個開發生命周期過程中,決定成功和失敗的之間的一個至關重要的區別將會給人留下深刻的印象。通過最初的頭腦風暴法了解問題狀態,以及後續的交貨程序,這其中都要和客戶完美配合。只有這樣,客戶才會讚賞你的工作,給你好評。2.對編碼不理智古人云:善泅者溺,善騎者墮。
  • 「10年IT,不用編程」,除了程式設計師,這些IT崗位也很吃香!
    隨著計算機的普及,現在的很多人的年輕人都會選擇去學計算機,計算機行業也有了一個全新的稱呼「IT」,在很多的人的眼裡IT都是一份不錯的工作。很多人對於做IT人的印象就是雙肩背包,格子襯衫,牛仔褲,而且年紀輕輕就容易禿頭。
  • 程式設計師學習編程,學習這四門程式語言就夠了
    中國程式設計師都有一個讓人難於理解的問題,特別是新手程式設計師,都有喜歡不斷學習最近熱門的程式語言,比如近一年的來的python超過java成為熱度排名第一,同時我們也發現很多程式設計師開始學習盲目ython,作為一名專業的程式設計師,沒有必要把程式語言都學完,比較目前程式語言有不少200種,每種程式語言都有成為熱度的可能性
  • 一張圖告訴你,自學編程和科班程式設計師的差別在哪
    自學編程的程式設計師,似乎都處於鄙視鏈的底端,而計算機專業的畢業生,似乎天然存在著一種優越感。自學編程和科班程式設計師的差距,到底有多大?這也是即將「入坑」的編程愛好者,最關心的一個問題。知識體系的差別科班出身的程式設計師,相對於自學編程者,具備更加完善的知識體系,在實際工作中,能更快的形成完整的任職,從而更深入地解決問題。
  • 送給程式設計師:搞笑卻又真實無比的編程語錄
    筆者收集了很多編程語錄,基本上都跟程式設計師的生活有關。這些語錄涉及軟體開發,代碼維護,調試糾錯,軟體bug,系統設計、文檔,代碼質量,測試和軟體開發團隊管理等方面。下面的這59條語錄雖然很搞笑,但卻真實無比。只有程式設計師才能理解這些編程語句裡的真正內涵。閒言少敘,開始吧…程式設計師編程語錄1.
  • 程式設計師編程入門必知!程式設計師需要學什麼
    學習語言的過程中還要有機會進行檢驗,不能只編寫代碼,還要檢驗代碼的結果運行是否正確,也就是某些可以運行結果的軟體我們要有,不過許多的程式語言都要求有被程式設計師設計來講代碼轉換成機器能理解的語言的編譯器。其他一些語言,比如Python,使用可以立即轉換成程序而不需要編譯。一些語言有自己的往往包含著代碼編輯器、調試器和/或者翻譯以及調試的IDEs(集成開發環境)。
  • 機器編程,會讓程式設計師丟飯碗嗎?
    文|李佳師11月,《時代周刊》將2020年最佳發明獎給了兒童編程機器人Matatalab;12月4日,英特爾在其研究院開放日上宣布將機器編程與集成光電、神經擬態計算、量子計算等列為影響未來10年的顛覆性技術;目前包括微軟、谷歌、Facebook等在內的全球巨頭,都加入了機器編程的賽道。
  • 程式設計師應該學習的5種程式語言
    我在某處讀到程式設計師應該每年學習一種新的程式語言(我認為它的代碼完整,但不確定),但如果你不能這樣做,我建議你至少學習以下五種程式語言,以便在你的職業生涯中取得好成績。 。每個公司都喜歡多語言程式設計師和一個全面的編碼人員,他們是多才多藝的語言編寫快速腳本,並且還可以編寫複雜的Java程序,確實是一個有價值的編碼器。
  • 59 條程式設計師搞笑編程語錄 真實無比!
    小編今天收集了很多編程語錄,基本上都跟程式設計師的生活有關。這些語錄涉及軟體開發,代碼維護,調試糾錯,軟體 Bug,系統設計、文檔,代碼質量,測試和軟體開發團隊管理等方面。下面的這 59 條語錄雖然很搞笑,但卻真實無比,只有程式設計師才能理解這些編程語句裡的真正內涵。閒言少敘,開始吧…17 條程式設計師編程語錄一個好的程式設計師是那種過單行線馬路都要往兩邊看的人。
  • 程式設計師的這108個笑話 你都看得懂嗎?-程式設計師,笑話,編程, ——快...
    2、程序猿的讀書歷程:x語言入門—>x語言應用實踐—>x語言高階編程—>x語言的科學與藝術—>編程之美—>編程之道—>編程之禪—>頸椎病康復指南。大家都很害怕,連忙一個吊著一個,從樹上伸到井裡去撈工資。正好他們摸到工資的時候,一個老程式設計師忽然興奮的大叫:別蠢了,要漲的工資還好好的掛在天上呢!6、諸葛亮是一個優秀的程序猿,每一個錦囊都是應對不同的case而編寫的!但是優秀的程序猿也敵不過更優秀的bug!六出祈山,七進中原,鞠躬盡瘁,死而後已的諸葛亮只因為有一個錯誤的case-馬謖,整個結構就被break了!
  • 機器編程會讓程式設計師們丟掉飯碗嗎?
    在其研究院開放日上宣布將機器編程與集成光電、神經擬態計算、量子計算等列為影響未來10年的顛覆性技術;目前包括微軟、谷歌、Facebook等在內的全球巨頭,都加入了機器編程的賽道。工廠到各個機構都離不開軟體的驅動,我們就能夠很好地理解為什麼編程對這個世界舉足輕重了。
  • 從編程到編曲 - 程式設計師轉行指南
    可能有人會覺得這個轉行跨度有點大,我來慢慢解釋為什麼其實很相似 首先編程和編曲都帶個編字,開個玩笑有人說,搞音樂需要會一個樂器,編曲需要一個鍵盤類樂器,就像編程也需要用鍵盤輸入一樣。但沒有鍵盤就不能編程了嗎?