不少在銀行 IT 部門工作的小夥伴,向我吐槽。自己維護的系統很 SB, 架構老舊能力薄弱,程式設計語言文法繁瑣,很多 bug。。。。但是公司因為安全和成本考慮,遲遲不更新
回複內容:
在職的時候怒氣值高,各種諷刺挖苦;
走人的時候暗自慶幸;
兩年以後忽然從這個傻逼系統得到靈感(或者教訓),頗有感慨;
三年後後悔維護的時候自己抱怨太多,而行動太少;
五年後意識到自己怒氣值高的原因不是因為系統傻逼,而是自己駕馭不了;
八年後再次需要維護“傻逼”系統;
十年後方才領悟,“這個世界的本質是混亂不可知,而非有序可測“;
甚至技術新舊的界限也開始模糊。
其實是,自己不夠謙虛敬畏。
Working Effectively with Legacy Code
The Software Craftsman: Professionalism, Pragmatism, Pride
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman
有幸經曆過這樣的事情。
該系統是一個投資下單系統,
客戶是全國各大證券公司,在某細分領域裡市場佔有率有80%。當初少不更事,一聽金融行業好,就來到了這個公司。久了便發現跟想象中完全不是一個事。
當時系統已經上線了約莫八年。爛系統都是如此類似——架構落後,文檔缺失,功能冗餘,版本管理混亂。最早的一批開發人員又走得一個不剩,期間換過4,5批人,思路都不一樣。就連代碼注釋都寥寥無幾,或者寫得只有當事人自己看得懂。
後來的人
只敢往裡加代碼,不敢輕易改代碼。一切以
穩定第一,效能兼顧,代碼優雅易讀什麼的統統靠邊站。
那些說重寫項目的人講得輕鬆,複雜的項目多了去,不比學產生績管理系統(許多人的畢業設計)。就該系統來說,其之複雜,規模,都不是一個人可以一肩挑的。修改離職人員的代碼更是難上加難。最後光有技術還不夠,大量的商務邏輯
必須具備一定證券期貨知識才能著手(為此我還考了證券從業資格證)。
不光系統爛,公司當時的管理方式也很有問題。公司的銷售人員毫無業務水平,只知道收錢,不僅承擔不起售前的工作,
更令人稱奇的是把程式員的電話直接留給客戶,有需求直接致電程式員幫改。天大的笑話啊!我來給不是軟體行業的人解釋一下後果:
1.不合理的需求要擋,至少要經過小組分析。許多程式員不論什麼需求埋頭就做,危害很大。
2.重複造輪子,或者客戶要三輪車就照做三輪車,可明明有現成的轎車卻不用。
3.打亂開發計劃,客戶的需求無窮無盡,永遠在做手邊上嚷嚷最響的需求而不是真正迫切的需求。
4.過多的客制化,導致項目沒有辦法整合成一套通用版,導致日後維護更加困難。
有個別同事完全沒有認清到危害,反而傻X兮兮地以為跟客戶混了個臉熟,覺得自己身價倍增。可氣可歎。
《軟體隨想錄》和《項目百態》是兩本好書,公司的管理方式以及系統缺陷在這兩本書裡都有體現。我在這家公司幹了不到一年就走人了,在閱讀這兩本書的過程中時常會心一笑,有種怒其不爭卻又暗暗慶幸的滋味。部分反對第一的答案:有些系統就是很傻叉不用難為自己,有些是技術人員的因素,有些是太過古老技術落後,有些是管理員的因素。
有些項目的複雜來自需求內容,而另一些複雜度就是來自於人的腦殘,後一種複雜就是軟體理論要消除的。
軟體工程理論的存在,目的就在於降低軟體項目的人的因素,降低複雜度,使參與的人更容易達成需求,減少bug,減少延期。
換句話說,軟體理論的存在就證明了世界上有多少項目成了大坑。
狄傑斯特拉說物件導向簡直是狗屎,因為他是大神,而且不需要像我等一樣跟三五個坑爹隊友去趟一個需求各種變化的大坑,但是我們不是大神,趟別人坑的同時,自己還在隨手埋著地雷,隨機地炸著別人或者自己。
面對大坑,你可以挑戰自我,也可以甩手不幹——如果你水平還不錯找個工作一點也不難——但是不承認他是大坑就有問題了,如果是程式猿自己這麼想,可能會把自己的職業生涯弄到很不開心 ,如果是專案經理這麼想,會把你手下的程式猿弄到很不開心。
敬畏不解決問題,明明就是個大坑就敬畏地躲遠點,如同股市明知道熊樣還不割肉止損,那就別抱怨套牢。
也許多年之後想起你的青春,會覺得當初那個問題好簡單啊,但相信我第一你很少會對一個爛泥項目有一個清楚印象,第二論後悔的機率,還是被套牢的後悔藥更難吃以多數人的水平不需要好的構架。能在平庸甚至糟糕的系統設計裡面盡量把自己分擔的模組做到穩定,易用,易維護即可。
反過來想,寫了一個好的架構,搭了一個還算可以得架子,然後被維護人員搞得亂七八糟,再反過來維護系統的人說啊呀這個系統設計得真爛,那可就真的爛下去了。祝賀你,你都幹出國家領導人的感覺了笑年郎,那些爛代碼都是有故事的。不小心你會成為後續故事的角。正在維護一個傻逼系統;
這個傻逼系統以前沒有人維護;
這個傻逼系統目前只有我維護;
我應聘的時候告訴我,很快會切換系統,把這個傻逼系統切換到一個牛逼的系統;
我當初傻逼了,信了這個話;
所有人都覺得這個系統傻逼;
我提出過N個讓它不那麼傻逼的方案,大家看了都說好;
上一條的結果要花點錢,大家都表示這件事等等再說;
上一條的結果是系統依舊傻逼;
傻逼系統雖然傻逼,但是不用這個傻逼系統會顯得更傻逼,所以公司不能不用;
這個傻逼系統也成了大家甩鍋的好借口,雖然很多時候它是無辜的;於是我覺得我在大家眼裡也是個傻逼;
一個傻逼的我,如何拯救一個傻逼的你……
以上寫於2015年5月8日
------------------------------------------------------------------------------------------------
下面更新於2016年5月19日
沒想到整整一年之後我會再更新!
更新的原因是我要離職了。
大家可能會關心這個傻逼系統怎麼樣了?答案是它依舊堅強而倔強的存在著!
其實關於這個系統我有很多故事可以說,但是上次答題的時候刪刪減減,最終還是決定用戲謔的方式說出來。我的工作本不是營運,但是在這個工作崗位上充分體驗了營運的苦逼!我多次聯合業務部門領導一起上報預算方案,卻每次被不同的原因所取消!我曾經越兩級,以辭職為代價推動項目(越級乃職場大忌,所以我當時一手拿著項目方案,一手拿著辭職報告),最終項目順利獲批,但公司卻在項目剛啟動時橫生和項目無關的波折,最終波及到該項目,導致項目停止!
最終在今年我心灰意冷,拒絕了公司的挽留,決意離開!
我有時會覺得荒謬,因為如果我離職了,很有可能這個系統就切換了。因為幾年間,系統越來越笨重,曆史冗餘資料越來越多,和windows7的莫名其妙的版本衝突(系統設計基於XP)逐漸出現,供應商也逐漸放棄了該產品系列的支援。一直是我們在修修補補,扶著前行。業務、財務、資料庫、系統基本上只有我一個人可以貫通瞭解,我這一撤,公司串連替者都找不到!
公司這時的最優選擇是什嗎?花大價錢招募一個團隊來營運?我覺得不是!公司的最優選擇是:切換系統,既解決了營運的問題,又解決了系統的曆史遺留問題!換句話說,我離職的影響是實現了我在職時最大的心愿!見過再model層,拼html 拼javascript的。不能說傻吧,誰沒年輕過啊。真正牛逼的程式員是鳳毛麟角,難得一遇的。但是如果一個項目真的是由一個牛逼的程式員團隊打造的,以題主的能力很可能難以在這樣一個團隊裡立足。
所以還是好好提升自己為主。大的架構不好改,就從局部的小模組開始,慢慢改。子子孫孫無窮盡也。
我之所以匿名是因為我現在就是在維護著一個爛系統,而我不想讓我的同事或者上級看到我對目前系統的看法,以免影響軍心。
好了,首先說一下我目前的職位,是架構師。
然後為什麼要說它爛?因為這特麼的不是我做的,3個月就上線的互連網XX系統,你覺得可能不爛嗎?
什嗎?你問我感受?
我感受很好啊,有責任都是前任的,我是接盤俠。
好了,不開玩笑,真的還好了。
下面分析分析為什麼爛,不想看分析過程的可以直接跳到最後,看斜體字,那是我真實的感受。
- 先說說為什麼爛:
- 因為要趕時間視窗,必須要在這個時間段上線,否則過了這個村就沒這個店了(嗯,嗯,那誰,X總,你怎麼不早點跟我說?)
- 產品人員沒時間細想(也許是沒能力),很多都是拍腦袋,系統中各個業務維度都交織在一起,牽一髮動全身。
- 研發人員沒時間動腦子(也許是沒能力),很多都是怎麼快怎麼來,什麼安全、效能、擴充、健壯性都是狗屁,能開發完的才是產品,上不了線的永遠是原型。
- 測試人員沒時間仔細測試(也許是沒能力),你們需求、研發一天改三次。我前腳報了的bug,後腳你們就把需求改了。什麼安全、效能、擴充、健壯性都是狗屁,能測試完的才是產品,上不了線的永遠是原型。
- 沒有架構師或者說沒有好的架構師(這個是最主要的原因, ,這也是我存在的理由),還特麼架構師?別跟我嗶嗶那些有的沒的,產品開發不完,你嗶嗶的再多也沒用。
- 高層管理員瞎指揮(有積極性是好的,不過要量力而行,可不要貪杯哦),您的專業是忽悠,額,不是,是指引方向,不是軟體開發也不是產品設計,術業有專攻。忽悠我不如您,額,不是,指引方向我不如您,但是軟體開發和產品設計還是請相信我們專業人員的。
2.
再說說怎麼辦:
- 一個字改
- 再一個字拆
- 再一個字想
- 最後一個字忍
- 最後一個字(真的最後一個字)錢!
畫外音:為什麼不說詳細點?
我:說詳細了,我還混個屁啊,交點學費先
3.
最後說體會:
(前排說話的同學安靜一下了,不要打擾後面睡覺的同學。最重要的重點來了。)
我把事情分為
天災和
人禍。
對於
天災,我們除了努力解決問題以外,還可以閉上嘴。你解決的問題越來越多,有一天你回首發現原來你已經走了那麼遠了,這證明你能力成長了,可以跟老闆藥家鑫,額,不是,可以跟老闆談心,額,我的意思是談薪水。所以,你看明白了,就應該感謝它!
對於
人禍,我堅持的原則是:再一再二,不能再三再四,不然這個人就應該走!如果他不走,你要麼忍,要麼走!
至於發脾氣,抱怨。。。。。
當然,必須是允許的啊!!!!!!
不把情緒發泄出去,會影響我的工作的啊!
沒情緒的那是死人!
至於向誰發泄,反正我從來不跟我老婆發泄,因為我打不過她!
反正黑鍋總是要有人背的,當然肯定不能老闆背,VP你也惹不起。所以,我建議多去健健身,以免向測試、產品發泄的時候打不過他們:)
以上!