這些老系統程式碼,是豬寫的麼?

語言: CN / TW / HK

原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,非公眾號轉載保留此宣告。

小王新加入了一家公司,這家公司有點年頭,所以連屎山都是發酵過的,味道很衝。

和大多數時運不濟的程式設計師一樣,到了這種公司,做的大多數工作,就是修補這些屎山,為其添磚加瓦鑄造更大的屎山。每當被折騰的筋疲力盡,就忍不住鼻孔噴著渾濁的空氣:“設計這個系統的人,真的是太垃圾了”!

當然,設計這個系統的人,可能早就離職了,也可能就是你的頂頭上司。如果你有幸獲得一個脾氣溫和的前輩,他會帶著無比後悔的口氣告訴你:“這個系統確實千瘡百孔,如果我們當初按照正確的思路設計就好了”!

沒有程式設計師不後悔過,就像虧錢的人都後悔買了股票,長大的人都後悔來到這個世界。

很多人看到爛程式碼,那都是事後來看的。在程式碼跑起來的那個時刻,“能執行”才是最重要的。爛程式碼能夠進入倉庫並投入生產,一定是某些環節的缺失造成的。

爛程式碼自有它的背景。

工期趕

有數不清的管理者,想要量化程式設計師的工作,由此產生了KPI、OKR這樣的工具。在某個時期,它或許是有用的,但這種以截止時間點來衡量的工作方式,會造成技術債的大量積累。

在工期的壓迫下,很少有人能夠思考需求的合理性,以及後續的擴充套件性。爛程式碼在未經過Review的情況下,缺少重構、有限測試,就火急火燎的跑到線上執行。有些設計,可以說從源頭上就是不合理的,但由於需要快速實現,方案上就不得不進行妥協。

大多數情況下,朝生夕死的程式碼並不會產生多大的問題。但總有一些專案,生命週期非常長,修修補補的需求還非常多。在一個地基不穩的地方造一座大廈,總有崩塌的一天。

不過管它呢,只要不是塌在自己手裡就可以了。

練手專案

我甚至發現了一個非常有意思的現象。很多部門為了培養新人,會特意把一些非常重要的模組和功能,交給新人去做。

由於缺乏經驗,新人在方案設計上有諸多的缺陷。但在時間成本上,它和老鳥相差並不太多。很多練手用的專案,在不經意間也會成長為巨無霸,然後它留下的缺陷就會被放大。

和大多數人的認知正好相反,新人在技術方案上,會採用更多的新技術和奇技淫巧,而老鳥善於使用最基本最樸素的工具來完成設計。這可能是一種想要把學到的東西付諸實踐的功利心與追求時尚的虛榮心在作怪。

很不幸,追求技巧的程式碼,會有非常多的約定與規範在裡面,如果不是專案統一把控,這種約定和規範會與專案中的其他約定和規範相悖,造成程式碼風格不統一,除錯困難,無法擴充套件。

自起爐灶

很多程式設計師非常的自信,認為自己的english水平和編碼水平特別高,表現在程式碼上就是龍飛鳳舞,自起爐灶。

他們不去關心整個技術社群的約定和規範,在介面命名,對外API上傾注了自己過多的心血,我們通常把這些人稱為東施效顰的輪子哥。

比如/health介面,我偏不叫health,我叫/server_status。

再比如錯誤碼,我非要一個叫做 success_200,一個叫做fail_500。後續入職的修正帝看到這樣的錯誤碼,嗤之以鼻但是並不敢改動,於是他自己做了一套200和500。

這樣的約定和修正約定,會在歲月的侵蝕下越積越多,以至於沒人知道它是什麼。

所以,如果你看到一個專案的程式碼非常的爛,不要著急修改,一定要按照它的爛邏輯寫下去。相信我,它必定比你的修正穩妥的多。

copy帝

在很多公司,你去看他們的產品和程式碼,會有一種似曾相識的感覺。

沒錯,他們是抄的。

在缺乏產品設計和經費的前提下,老闆下達了終極命令。

“照著xxx給我copy一個,連一個按鈕也別放過”。

copy一個和設計一個是兩個概念,copy通常意味著淺顯的思考,在細節和功能上都比模子差了很多。

更要命的是,模子在變。如果運氣不好,一個團隊剛copy好了一個產品,結果第二天開啟別人的產品一看,好傢伙,人家全部改版了。

四不像和未經過設計的程式碼由此而來。

當然copy帝還指的是cv工程師,但他們的破壞力有限,初心也是好的,並不能造成多大的破壞力。

怎麼辦?

後悔,起碼是好的。

這是相對於從不後悔的人來說的。後悔說明了他知道怎麼做才是正確的,只是在某些特殊的環境中造成了這樣的後果。

如果同樣的輪迴交給有後悔經歷的人來說,他會有更多的思考在專案的時間和人員分配上。而從不後悔的人可能是倔驢,也可能是真的認為他自己是對的,這是非常可悲的一件事情。

如果你不幸在維護這些屎山,千萬記得要做力所能及的事情,不要冒進,也不要過度修正。除非你的團隊給了真正的時間和人員,來決定真正把這坨屎鏟一鏟。

這些程式碼,當然也不是豬寫的,只不過是把人放進了豬圈而已。

作者簡介: 小姐姐味道 (xjjdog),一個不允許程式設計師走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎新增好友,進一步交流。

推薦閱讀: