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