別讓“防禦性程式設計”毀了我們的職業

MeteorSeed發表於2024-01-12

  我一直認為程式設計師是一個技術和藝術並存的職業。我們的程式碼不應該是一些單純的程式文字,而應該更像是一副富有藝術氣息的作品,就如同畫家作是畫家的心血一樣,我們的每一行程式碼都應該被善待和珍視。
  最近,隨著一些大廠的陸續暴雷,以及一些裁員風波,我在不少自媒體平臺都刷到了關於新式“防禦性程式設計”的段子,初看感覺只是個文娛的文案,但之後回憶過往,再結合自己的工作經歷,發現現在這種現象確實是越來越普遍了。

  對一些不太瞭解的同學,下面我說一說以前和現在“防禦性程式設計”的區別。
 
以前的“防禦性程式設計”
現在的“防禦性程式設計”
定義
一種謹慎的程式設計方法,預設外部程式碼是不安全的,對外部呼叫不信任,需要自己完成檢查和校驗,最大限度的保護自己。是一種有效提高程式碼健壯性的手段。
透過人為的保留 bug,弱化程式碼效能、健壯性,透過不寫註釋,不寫文件,提高複雜度等方式,人為降低程式碼的可維護性,變相提高自己的不可替代性,以達到裁員避雷的目的。
實現方式
嚴謹的編碼規範
定義安全邊界
邊界值檢查
許可權檢查
異常處理
保留 bug
弱化程式碼效能,為最佳化保留空間
不寫有效的註釋、文件以及提交說明
引入多餘的架構,多層巢狀,超類,超長方法,海量區域性變數,複雜化程式結構,提高程式碼的複雜度
型別、變數、方法的命名不具描述性
目的
得到健壯的程式碼
造就“屎山”,讓作者不可替代
針對
外部程式碼
公司和領導
  剛看到那些短影片,感覺有些看不慣,感覺短影片的作者肯定不是開發。但過後想想,又覺得這是一件多麼無奈的事情呀!哎~~~
轉眼間十幾年過去了,我已經是兩個孩子的父親不再是那個剛出大學的少年了。我還記得,我當時的畢業設計是《基於 RFID 技術的倉庫管理系統》,那時還不懂分散式,只是一個簡單的 C/S 系統,當時是很用心的在做。在那個時代,我們稱程式設計師和醫生是兩個不會老的職業,因為,都需要不斷的學習實踐豐富經歷。十年磨一劍,方成架構師。
  隨著 Hadoop 的到來,Win Phone 與 Andorid 對局的完敗,國內各種去 .NET 化風潮,作為 .NET 開發者,我們迎來了至暗時刻。在那個時候,很多人都轉了 Java 或別的語言,或者改做管理、獵頭。但即便是在那個年代,也沒有出現現在的“防禦性程式設計”。開發者更多是透過對新銳技術的實踐,來實現自身的不可能替代性。我們所面臨的最大危機,不是35,而是大資料和移動應用的大方向下,語言和技術環境的廝殺。當時,催生了無數的大資料和移動開發培訓班。大資料移動開發的高薪低學歷門檻,吸引了大量的人員,湧入培訓學校,為今天 Java 程式設計師的慘烈競爭埋下伏筆。(因為大資料培訓班比較賺錢,所以 .NET 課程全停了,這也是為什麼 .NET 開發會有斷層,導致部分老系統,年輕程式設計師無法維護的原因,.NET體系自身變化很快,新增的多,淘汰的也多,產品線也廣,當年的培訓斷層導致了今天的 .NET 不好招人。)
  從什麼時候35歲開始有罪了呢?細想下來,也記不清了。大約是當自己的同事,因為年齡被裁員的時候,我覺得,我也快了,該想想自己今後的出路了。程式設計師嗎,按我的印象,很多人都不善交際,圍不住大領導,能進公司管理層的恐怕也是鳳毛麟角。年紀大了,有了家庭了就多了份擔當。大家都不得不面對35歲危機,很現實,也很無奈。
  想想過往,我接手的那些穿透幾十層的程式碼呼叫,不知所云的縮寫命名,沒人敢動的“屎山”程式碼。這些真的是開發者能力問題嗎?還是有意而為之,只為自保?如果是後者我覺得可能他們自保失敗了。
  存在即是合理,有人為了有份工作連年齡都謊報,就別說有開發者在寫程式碼時留個後手了。對於這種現象,我只能說”我理解,但我不認同”。市場能夠調節供求關係,但這種人為的對35歲開發者的歧視,市場無能為力,恐怕長期都無法改變。目前這種避雷用的“防禦性程式設計”,如果還能走通並大行其道,只能說貴公司專案管理就是垃圾。一個基本的程式碼檢查都做不好的也就自認倒黴吧。對於一個管理過程嚴謹,有優秀人才把關的企業,這種方式往往行不通。
  從開發者本身講,雖然大部分人是做開發只是份工作為了養家餬口,但如果長此以往形成習慣,恐怕今後就寫不出高質量的程式碼了。以 .NET 的多執行緒開發為例,一套東西需要學習的文件在700頁以上,從學會到吃透,可能需要1年時間甚至更久。但如果一味的留一手,工作中不用多執行緒,那最多半年就會忘記的差不多了。所以,從自身職業規劃角度講,我還是呼籲大家能重視自己的程式碼,不要養成壞習慣,毀了這個職業。對於大部分普通開發者,只有實打實的技術實力,才是我們真正的鐵飯碗。
 

 

相關文章