代碼的屎山_風聞
code2Real-有人就有江湖,有code就有bug2021-07-17 10:32
在軟件行業,大量低質量遺留代碼堆積如山,沒有人清理打掃,沒有人維護更新,被稱為“屎山”。
剛畢業時,很想提高代碼編寫質量,還學習了林鋭博士的《高質量C/C++編程》。
後來發現,事實根本不是那麼回事,存在即合理。
原因是多方面的:
1)沒有幾個人能看懂舊代碼的邏輯,代碼的業務邏輯很少能在文檔中寫得明明白白的。
因為沒人願意為寫文檔付錢,所以文檔能少寫一點是一點。沒有人檢查文檔的質量。
差的文檔影響代碼的維護質量,但沒人願意提高文檔質量。
許多代碼中的業務邏輯被程序員帶進了墳墓。
即使覺得自己能看明白,自己的理解就是原作者的意思嗎?
郢書燕説,就是曲解他人意思的最好註釋。
如果不明白代碼的業務邏輯,所以儘量不要修改舊代碼,因為沒人知道修改後會帶來什麼樣的後果,舊代碼能用就不要修改更新。
2)不想花那個錢
不要相信什麼管理學書《追求卓越》,卓越是有成本的,而且代價巨大,一不小心就讓人破產。
作為一個人,難道每天出門都會把自己打扮成最好的狀態麼? 成績優異學生,是否應該在打遊戲上也要全方面碾壓才能算優秀?有錢人是否要把生活起居的所有用品全都換成頂級奢侈品才算有錢?
優秀,卓越,不是免費的,是有代價的。
公司的技術也是這樣,技術是要錢去開發的。在很多情況下這種“優秀狀態”的維護是非常燒錢的。維護得那麼好,不出幾年,等到新的技術出來,代碼又會變成屎山。
所以管理層的思路基本上就是用到代碼嚴重拖慢公司效率之後再開始做新的,而不是時刻把技術保持在一個高位狀態。
技術優勢很像是物理學中的勢能,而且技術優勢更像是用人力去推起來的勢能,這種勢能無時無刻不再消耗資源。
系統總要有人去維護,如果你把技術人員解散,如果未來如果有新團隊接手的話是很難接上手的。而且大部分技術人員也很討厭在屎山裏大掃除,因為到處都是屎,完全沒法清理乾淨。
3)沒有功勞
技術崗位也清楚得很,只要不崩潰,湊合能用,領導就不會找自己麻煩,那麼就把東西做到剛剛滿足領導要求,多一分的優化都是浪費,反正領導也不會多給錢。不求有功,但求無過。
把一箇舊代碼打理得乾乾淨淨,都不值得吹牛。
4)保護老員工利益
如果技術很好,代碼很優美,那麼就會削弱資歷老,但沒啥本事的老技術人員的優勢。
因為代碼很漂亮,那麼新來的實習生很容易接手,老技術人員工資那麼高,為何不直接開掉?
但是代碼很垃圾,這就會把公司技術人員拉到一個純粹比拼資歷的狀態中去。
老員工肯定是知道自己和同事早年在“屎山”的哪塊地方拉的屎,哪個地方是乾的,哪個地方是稀的。
這就不是一個牛逼哄哄的新人能接上趟的了,新來的沒看過老員工拉屎,自然也不懂屎山哪個地方會竄稀。
這也是為什麼領導最好懂技術的原因,因為如果領導不懂技術,那麼手下的技術員很容易忽悠住領導,即使你把手下炒掉,換新的,技術人員還是選取那些寫起來最方便,但對公司來説後期不好維護的框架和規範。
這時候領導要非常明確的指出技術路徑,這樣才能避免手下的團隊被某個技術高管,忽悠着走上邪路。
另外這種屎山寫法也是導致程序加班的主要原因,只要程序員加班多,那麼這些程序員就會花大量時間低效率的維護垃圾代碼,而沒有時間去提升自己,或在家裏創業,然後跳槽。這樣對公司來説也就是多點工資而已,而不會傷及根本。
5)技術不是第一位的
很多人以為公司是技術推動的,大錯特錯,公司是權力和財富推動的。
只要權力,財富足夠,技術這東西請人慢慢弄就好了。
所以公司的管理層即使是技術出身,也不會對技術有非常執着的追求,到了一定級別他們就會去玩弄“權術”和“財富”,而把技術交由其他技術人員打理,畢竟打理技術是非常吃力不討好的工作,技術迭代又很快,如果不持續投入就很難保持領先。
而“權術”就更好維護一些,只要多見面吃飯,多聊聊天,交換一下資源和利益就好了。
“財富”就更容易了,只要把錢投出去,等就完事了,在金融圈子裏,這種方法被美其名曰“價值投資”。
所以公司高層的行為永遠是保持現金流的穩定,而不是一味追求技術。
公司的成敗取決於現金流,而技術、管理、企業文化等只是輔助現金流的工具。
説公司可能很難理解,我們來説人。
為什麼有人看上去很傻,但是還是活得好好的?
因為人類的存活靠的是消化系統、代謝系統,血液循環系統、免疫系統等。
這也解釋了為什麼世界上大多數人不聰明的,卻還是能活得挺好的原因。