當前位置: 妍妍網 > 碼農

大廠程式設計師提倡「防禦性編程」:故意把程式碼寫得很爛,萬一自己被裁,要確保留下的程式碼不可維護!

2024-03-08碼農

(給哪咤編程加星標,提高Java技能)

大家好,我是哪咤。

「碼農們在工作中絕對不能按以前書上說的寫優美清晰程式碼,要防禦性編程,確保自己被裁,剩下的程式碼也是不可維護的」。

近日一則關於用「防禦性編碼」應對大廠裁員潮的訊息沖上職場社交平台熱搜。這一策略背後的邏輯是,透過晦澀難懂、難以維護的程式碼,確保自己一旦離職,留下的程式碼難以替代,從而在某種程度上提高自己的「不可替代」性。

但這種方式真的能成為程式設計師保住飯碗的「護城河」,還是僅僅是心理上的安慰?抑或只是一句釋放壓力的調侃?

大廠裁員風暴逼出「奇招」

說起貫穿2023年全球科技領域的關鍵詞,「裁員」恐怕逃不出前三。

多家外媒和數據機構針對海外科技公司2023年裁員情況的盤點顯示,截至2023年11月中旬,科技行業已經裁撤超過24萬個工作崗位,同比增長50%。前7家裁員最多的科技公司中,Google、Amazon、Microsoft、Meta等大公司赫然在列。

再看國內的情況,據公開報道,騰訊阿裏和快手三家公司,今年上半年合計減員超1.6萬人。此外,包括嗶哩嗶哩、美團、百度、拼多多、京東等公司也進行了一定程度的裁員。

面對各個大廠「降本增效」、「開猿節流」的浪潮,不少程式設計師們感到前所未有的不安,劍走偏鋒提出各種「奇招」保住飯碗。

「防禦性編程」就是其中一個 究其背後的心理,可能有以下兩點

一是行業競爭的激烈不免讓程式設計師們擔心 ,如果自己寫出的程式碼清晰可讀,可能很 容易就會被他人理解和取代 。將程式碼變得晦澀難懂,或授權以成為保住自己在團隊中有利競爭的一個「捷徑」。

二是透過「防禦性編碼」這種「自保」手段, 就算自己被裁,留下的程式碼也會成為企業無法維護的「定時炸彈」 ,有一種即使「魚死」也要爭個「網破」的報復感。

用「防禦性程式碼」是自保,還是作死?

用「防禦性程式碼」自保的策略一出,評論區可是炸開了鍋,網友們眾說紛紜。主要的意見大概分為三類:

一種表示支持,你不仁休怪我不義,主打一個互相傷害。


更有大廠員工直截了當給出了防禦性編碼的幾條入門技巧:


第二種是明確反對的,認為裁員主要和工作能力、公司戰略有關,此舉很難保全自己,還容易被認為價值觀有問題。

第三種認為這種情況在大廠基本上不會出現,因為有程式碼稽核(code review)機制。

也有人仿佛看穿了這是老程式設計師在給新手菜鳥們挖坑,直言不諱地指出這種說法只是個玩笑,不必當真:「如果你信老程式設計師們調侃的‘防禦性編程’,那你距離被淘汰也不遠了」。


客觀來講,采用「防禦性編程」,就意味著一旦這位程式設計師離職,團隊將面臨巨大的技術債務,其他團隊成員要花費大量時間理解和重構這些程式碼。有從業人員明確表示,無論從哪個角度來講,用「防禦性程式碼」換取保住職位的安全感並不可取。

  • 首先,從個人能力提升的角度來看,故意寫晦澀難懂的「爛」程式碼不利於提高自身的編程水平。

  • 其次,從團隊協作方面來看,如果你寫的程式碼過於復雜或者難以理解,會嚴重影響計畫的推進效率;此外,現代的開發環境和公司文化通常都強調程式碼品質和團隊合作,許多公司和團隊都有 code review (程式碼審查)機制,以確保程式碼的品質和可維護性。

  • 最後,故意寫爛程式碼有極大可能會對個人職業發展產生負面影響。

  • 「防禦性編程」=屎山程式碼?別混淆概念

    討論至此,大家有沒有發現,以上提到的「防禦性編程」指的就是「爛」程式碼,這不就是業內常提到的「屎山程式碼」嗎?

    有明眼人在討論伊始就發現了,所謂的用「防禦性程式碼」自保,其實有些偷換概念了。

    事實上, 防禦性編程本身確實是編程領域的一個專業術語 ,本意是一種細致、謹慎的編程方法。它要求程式設計師在編寫程式碼時預見可能出現的問題,並提前采取措施來規避這些問題。這種編程習慣更多地強調錯誤的預防和控制,以減少未來可能出現的災難性後果。

    值得註意的是, 防禦性編程有時也被電腦科學家稱為安全編程(Secure programming) ,通常用於需要高可用性、安全性或安全性的地方。它是一種改進軟體和原始碼的方法,具體體現在:

  • 總體品質——減少軟體錯誤和問題的數量。

  • 使原始碼易於理解——原始碼應該可讀且易於理解,以便在程式碼審計中獲得批準。

  • 使軟體以可預測的方式執行,盡管有意外的輸入或使用者操作。

  • 說直白一點就是力求「哪怕使用者是個發狂的亂按鍵的猴子,也玩不壞我的系統」。

    所以 此「防」(防止程式碼出錯)非彼「防」(提防被裁員) ,只是在「開源節流」的浪潮下,防禦性編程被賦予了新的含義。而 防禦性編程的真正價值在於能夠幫助我們編寫出更加健壯、可靠的程式碼,而不是成為一種職場生存的策略

    為自保的「防禦性編程」違法嗎?

    提到程式設計師為防止被裁員采用「防禦性編程」(屎山程式碼),就不由得會聯想到此前程式設計師為發泄不滿,「刪庫跑路」而被判刑收監的案例。

    同樣是程式設計師為了維護自己的利益而在電腦編程方面「動手腳」,那麽故意寫「屎山」程式碼違法嗎?

    據了解,【刑法】中已明確破壞電腦資訊系統罪。根據【刑法】第二百八十六條,凡是違反國家規定,對電腦資訊系統功能進行刪除、修改、增加、幹擾,造成電腦資訊系統不能正常執行,後果嚴重的,處五年以下有期徒刑或者拘役,後果特別嚴重的,處五年以上有期徒刑。

    從勞動關系的角度來講,如果程式設計師寫的程式碼能跑通,不影響系統執行,也能確保功能的正常使用,那他就完成了對其工作職責的交付,似乎也無可厚非;如果透過「防禦性編程」發泄情緒,因此給公司業務造成重大損失被追責,恐怕也很難逃脫法律的制裁。

    要麽不寫,要麽就寫優雅的程式碼

    雖然能夠理解程式設計師們迫於裁員壓力提出自保策略的心情,但在編程的世界裏,寫出詩一樣的程式碼,應該成為每個程式設計師追求的目標。

    寫優雅程式碼的原因很明確,首先邏輯清晰,簡單直觀,這樣你可以把更多精力花在功能開發上;其次清新的思維寫出的程式碼能減少bug,也就減少了修復bug的時間;最後站在自己的角度想想,你的程式碼品質應該取決於你自己,而不是任何其他人或者組織,應該對自己負責,不應該讓其他因素成為你降低要求的理由。

    在寫優雅程式碼這件事上,電腦領域的大佬們也達成了共識:

    C++之父 Bjarne Stroustrup :我喜歡優雅和高效的程式碼,程式碼邏輯應該直接了當,叫缺陷難以隱蔽;盡量減少依賴關系,使之便於維護;依賴某種分層戰略完善錯誤處理程式碼。效能調變最優,省得引誘別人做沒規矩的最佳化,搞出一堆混亂來。整潔的程式碼只做好一件事。

    wiki 發明者 Ward Cunningham :如果每個常式都讓你感到深合已意,那就是整潔程式碼。如果程式碼讓程式語言看起來像是專為解決那個問題而存在,就可以稱之為漂亮的程式碼。

    世界級編程大師,設計模式和敏捷開發先驅 Robert C. Martin :在程式碼閱讀中說臟話的頻率,是衡量程式碼品質的唯一標準。

    寫在最後

    無論是一時不爽的發泄,還是認真想透過這種策略「自保」,都反應出當下環境中,程式設計師的憂慮和不安。

    就企業的角度而言,需要重視大廠程式設計師們面臨的困境和壓力,鼓勵開放、協作的編程文化,讓每個程式設計師都能在團隊中發揮自己的最大價值,從而提高團隊的整體效率。

    就程式設計師個人而言,對於公司遵守勞動法,依法依規,給足賠償,沒必要搞小動作,不然確實是雙輸的局面。如果公司不遵守勞動法,躲避賠償,應該根據勞動法來維權,不要透過不正規的手段來維權。

    此外,在這個快速變化的行業中,程式設計師更應該註重提升自己的技能和知識,以適應新的技術和挑戰,而不是依賴於編寫晦澀難懂的程式碼來保住自己的工作。

    參考連結:

    https://www.zhihu.com/question/633103265/answer/3315370701

    https://zhuanlan.zhihu.com/p/671314487

    https://www.51cto.com/article/710674.html

    - EOF -

    推薦閱讀 點選標題可跳轉

    2、

    4、 !

    5、

    ·················END·················

    看完本文有收獲?請轉發分享給更多人

    關註「哪咤編程」,提升Java技能

    點贊和在看就是最大的支持 ❤️