整理 | 如煙
出品 | 51CTO技術棧(微信號:blog51cto)
“碼農們在工作中絕對不能按以前書上說的寫優美清晰代碼,要防御性編程,確保自己被裁,剩下的代碼也是不可維護的”。
近日一則關于用“防御性編碼”應對大廠裁員潮的消息沖上職場社交平臺熱搜。這一策略背后的邏輯是,通過晦澀難懂、難以維護的代碼,確保自己一旦離職,留下的代碼難以替代,從而在某種程度上提高自己的“不可替代”性。
圖片
但這種方式真的能成為程序員保住飯碗的“護城河”,還是僅僅是心理上的安慰?抑或只是一句釋放壓力的調侃?
1、大廠裁員風暴逼出“奇招”
說起貫穿2023年全球科技領域的關鍵詞,“裁員”恐怕逃不出前三。
多家外媒和數據機構針對海外科技公司2023年裁員情況的盤點顯示,截至2023年11月中旬,科技行業已經裁撤超過24萬個工作崗位,同比增長50%。前7家裁員最多的科技公司中,Google、Amazon、Microsoft、Meta等大公司赫然在列。
再看國內的情況,據公開報道,騰訊阿里和快手三家公司,今年上半年合計減員超1.6萬人。此外,包括嗶哩嗶哩、美團、百度、拼多多、京東等公司也進行了一定程度的裁員。
面對各個大廠“降本增效”、“開猿節流”的浪潮,不少程序員們感到前所未有的不安,劍走偏鋒提出各種“奇招”保住飯碗。
“防御性編程”就是其中一個。究其背后的心理,可能有以下兩點:
一是行業競爭的激烈不免讓程序員們擔心,如果自己寫出的代碼清晰可讀,可能很容易就會被他人理解和取代。將代碼變得晦澀難懂,或許可以成為保住自己在團隊中競爭優勢的一個“捷徑”。
圖片
二是通過“防御性編碼”這種“自保”手段,就算自己被裁,留下的代碼也會成為企業無法維護的“定時炸彈”,有一種即使“魚死”也要爭個“網破”的報復感。
2、用“防御性代碼”是自保,還是作死?
用“防御性代碼”自保的策略一出,評論區可是炸開了鍋,網友們眾說紛紜。主要的意見大概分為三類:
一種表示支持,你不仁休怪我不義,主打一個互相傷害。
圖片
更有大廠員工直截了當給出了防御性編碼的幾條入門技巧:
圖片
第二種是明確反對的,認為裁員主要和工作能力、公司戰略有關,此舉很難保全自己,還容易被認為價值觀有問題。
圖片
第三種認為這種情況在大廠基本上不會出現,因為有代碼審核(code review)機制。
圖片
也有人仿佛看穿了這是老程序員在給新手菜鳥們挖坑,直言不諱地指出這種說法只是個玩笑,不必當真:“如果你信老程序員們調侃的‘防御性編程’,那你距離被淘汰也不遠了”。
圖片
圖片
客觀來講,采用“防御性編程”,就意味著一旦這位程序員離職,團隊將面臨巨大的技術債務,其他團隊成員要花費大量時間理解和重構這些代碼。有從業人員明確表示,無論從哪個角度來講,用“防御性代碼”換取保住職位的安全感并不可取。
- 首先,從個人能力提升的角度來看,故意寫晦澀難懂的“爛”代碼不利于提高自身的編程水平。
- 其次,從團隊協作方面來看,如果你寫的代碼過于復雜或者難以理解,會嚴重影響項目的推進效率;此外,現代的開發環境和公司文化通常都強調代碼質量和團隊合作,許多公司和團隊都有 code review (代碼審查)機制,以確保代碼的質量和可維護性。
- 最后,故意寫爛代碼有極大可能會對個人職業發展產生負面影響。
3、“防御性編程”=屎山代碼?別混淆概念
討論至此,大家有沒有發現,以上提到的“防御性編程”指的就是“爛”代碼,這不就是業內常提到的“屎山代碼”嗎?
有明眼人在討論伊始就發現了,所謂的用“防御性代碼”自保,其實有些偷換概念了。
圖片
事實上,防御性編程本身確實是編程領域的一個專業術語,本意是一種細致、謹慎的編程方法。它要求程序員在編寫代碼時預見可能出現的問題,并提前采取措施來規避這些問題。這種編程習慣更多地強調錯誤的預防和控制,以減少未來可能出現的災難性后果。
值得注意的是,防御性編程有時也被計算機科學家稱為安全編程(Secure programming),通常用于需要高可用性、安全性或安全性的地方。它是一種改進軟件和源代碼的方法,具體體現在:
- 總體質量——減少軟件錯誤和問題的數量。
- 使源代碼易于理解——源代碼應該可讀且易于理解,以便在代碼審計中獲得批準。
- 使軟件以可預測的方式運行,盡管有意外的輸入或用戶操作。
說直白一點就是力求“哪怕用戶是個發狂的亂按鍵的猴子,也玩不壞我的系統”。
所以此“防”(防止代碼出錯)非彼“防”(提防被裁員),只是在“開源節流”的浪潮下,防御性編程被賦予了新的含義。而防御性編程的真正價值在于能夠幫助我們編寫出更加健壯、可靠的代碼,而不是成為一種職場生存的策略。
4、為自保的“防御性編程”違法嗎?
提到程序員為防止被裁員采用“防御性編程”(屎山代碼),就不由得會聯想到此前程序員為發泄不滿,“刪庫跑路”而被判刑收監的案例。
同樣是程序員為了維護自己的利益而在計算機編程方面“動手腳”,那么故意寫“屎山”代碼違法嗎?
據了解,《刑法》中已明確破壞計算機信息系統罪。根據《刑法》第二百八十六條,凡是違反國家規定,對計算機信息系統功能進行刪除、修改、增加、干擾,造成計算機信息系統不能正常運行,后果嚴重的,處五年以下有期徒刑或者拘役,后果特別嚴重的,處五年以上有期徒刑。
從勞動關系的角度來講,如果程序員寫的代碼能跑通,不影響系統運行,也能確保功能的正常使用,那他就完成了對其工作職責的交付,似乎也無可厚非;如果通過“防御性編程”發泄情緒,因此給公司業務造成重大損失被追責,恐怕也很難逃脫法律的制裁。
圖片
5、要么不寫,要么就寫優雅的代碼
雖然能夠理解程序員們迫于裁員壓力提出自保策略的心情,但在編程的世界里,寫出詩一樣的代碼,應該成為每個程序員追求的目標。
寫優雅代碼的原因很明確,首先邏輯清晰,簡單直觀,這樣你可以把更多精力花在功能開發上;其次清新的思維寫出的代碼能減少bug,也就減少了修復bug的時間;最后站在自己的角度想想,你的代碼質量應該取決于你自己,而不是任何其他人或者組織,應該對自己負責,不應該讓其他因素成為你降低要求的理由。
在寫優雅代碼這件事上,計算機領域的大佬們也達成了共識:
C++之父 Bjarne Stroustrup:我喜歡優雅和高效的代碼,代碼邏輯應該直接了當,叫缺陷難以隱蔽;盡量減少依賴關系,使之便于維護;依賴某種分層戰略完善錯誤處理代碼。性能調制最優,省得引誘別人做沒規矩的優化,搞出一堆混亂來。整潔的代碼只做好一件事。
wiki 發明者 Ward Cunningham:如果每個例程都讓你感到深合已意,那就是整潔代碼。如果代碼讓編程語言看起來像是專為解決那個問題而存在,就可以稱之為漂亮的代碼。
世界級編程大師,設計模式和敏捷開發先驅 Robert C. Martin:在代碼閱讀中說臟話的頻率,是衡量代碼質量的唯一標準。
除了國外的大佬,小米科技創始人雷軍也非常提倡代碼的簡潔性和可讀性,30年前寫的代碼都火了,被贊像詩一樣優雅。
6、寫在最后
無論是一時不爽的發泄,還是認真想通過這種策略“自保”,都反應出當下環境中,程序員的憂慮和不安。
就企業的角度而言,需要重視大廠程序員們面臨的困境和壓力,鼓勵開放、協作的編程文化,讓每個程序員都能在團隊中發揮自己的最大價值,從而提高團隊的整體效率。
就程序員個人而言,對于公司遵守勞動法,依法依規,給足賠償,沒必要搞小動作,不然確實是雙輸的局面。如果公司不遵守勞動法,躲避賠償,應該根據勞動法來維權,不要通過不正規的手段來維權。
此外,在這個快速變化的行業中,程序員更應該注重提升自己的技能和知識,以適應新的技術和挑戰,而不是依賴于編寫晦澀難懂的代碼來保住自己的工作。
參考鏈接:
https://www.zhihu.com/question/633103265/answer/3315370701