事情是這樣的,前幾天在朋友圈熊杨,我看到一朋友發(fā)表了一條說說:“入職新公司曙旭,從重構代碼到放棄”盗舰,我就問他怎么了?他說桂躏,剛進一家新公司钻趋,接手代碼太爛,領導讓我先熟悉業(yè)務邏輯剂习,然后去修復之前項目中遺留的bug蛮位,實在不行就重構。
關鍵是鳞绕,離職的那位仁兄走之前失仁,還跟我在QQ上說,老哥辛苦了们何,我寫的很亂真不好意思萄焦,但我是故意的。
這幾天冤竹,我都在想拂封,要不要離職?
———
聽完你的遭遇鹦蠕,我想先說一句冒签,離職那位仁兄太狠了!V硬 萧恕!
其次,我相信肠阱,這個問題很多人都遇到過廊鸥。
每個新人去一家新公司都會覺得公司代碼很爛,可能是因為他沒被產(chǎn)品虐過辖所。
其實惰说,這種新員工很不錯了,一看就是真萌新缘回,重構這種事吆视,老板看不到 KPI,出了事還得自己兜底酥宴,還會得罪人啦吧,費力不討好,何必呢拙寡!
老前輩的警世良言一定要牢記:重構一時爽授滓,頭發(fā)不再長。
還有,工作了10年的碼農(nóng)般堆,到了新公司在孝,絕不會說這種話。
不過話說回來淮摔,能覺得模塊代碼爛私沮,還能擼起袖子去改的程序員,真是很難得的一種精神和橙。我身邊 90%都是只是嘴上說仔燕,絕對不動手干的。下一次下一次下一次魔招,無數(shù)的下一次造就了爛代碼晰搀。
「 要不要重構 」
很多人口中的重構就是重寫,而不是去改善現(xiàn)有的代碼办斑。
現(xiàn)在的有些工程師太浮躁, 動不動就要重構, 就跟很多的團隊動不動就要搞一個框架一樣外恕。
說實話,以我個人的經(jīng)驗來說俄周,絕大多數(shù)開發(fā)人員到新公司后,都會覺得代碼很爛髓迎,但通常他不了解業(yè)務邏輯是怎么變化的峦朗,這種代碼是在什么情況下寫出來的,有什么特殊的背景(除了真的是亂搞的排龄,絕大多數(shù)的“爛代碼”一般都是有原因的:業(yè)務需求改改改波势,這個需求明天就要上線等等等等),有多少坑(很少有人能在極短時間內(nèi)把所有的坑都找出來)橄维。
如果貿(mào)然去重構尺铣,風險非常大。而且再說難聽點争舞,就算重構完了凛忿,也有可能是一堆新的“爛代碼”替換老的“爛代碼”。
所以竞川,進了一家新公司店溢,別動不動就重構,先了解項目的業(yè)務邏輯委乌。
「 要不要離職 」
其實在我看來床牧,如果僅僅因為接手代碼太爛,就選擇離職遭贸,那么你跳槽到下一個公司依然會面對同樣的現(xiàn)狀戈咳,因為幾乎每個人,都會覺得自己公司的項目代碼很爛。
我們先說說造成這種現(xiàn)象的原因是什么著蛙,首先删铃,我們得相信,沒有任何一個人故意把自己的代碼寫的很爛册踩,每個人都想把自己的代碼寫的很優(yōu)雅泳姐,擴展性很好,但是可能當初水平不夠暂吉,在當時看似還不錯的代碼胖秒,日后在別人看來就是所謂的垃圾代碼。
我們每個人都在進步慕的,別說別人了阎肝,你現(xiàn)在看你三個月之前的代碼,可能你都會覺得寫的很垃圾肮街,如果你沒有這種感覺风题,只能說你在止步不前。
其次嫉父,技術更新?lián)Q代太快沛硅,市場的變化也太快,產(chǎn)品自然也一直在演變绕辖,也許在當時看起來還不錯的代碼摇肌,隨著時間的推移,功能的更新仪际,代碼的堆徹围小,慢慢就變成后來者眼中的爛代碼了。
「 如何從爛代碼中爬出來 」
假如你真的要接手別人的代碼树碱,怎樣才能不被玩兒死呢肯适?
雖然你可能會說,聽了很多道理成榜,依然交接不好代碼框舔,可作為經(jīng)常被別人的代碼玩得欲仙欲死的老司機,我有些話如鯁在喉赎婚,不吐不快雨饺。
當你被要求接管要離職的程序員的代碼時,如果能注意以下幾點惑淳,就有可能活著從他的代碼里爬出來额港。
1. 產(chǎn)品需求與業(yè)務流程文檔
產(chǎn)品需求與業(yè)務流程文檔,這些是你先要找到的歧焦,你接手的代碼移斩,必然和某個產(chǎn)品需求相對應肚医,必然實現(xiàn)了某個業(yè)務流程,先了解產(chǎn)品需求和業(yè)務流程向瓷,才能更好的讀代碼肠套。
假如你的團隊就是沒文檔,Ok猖任,也可以要求離職或轉移戰(zhàn)線的這位程序員把需求描述出來你稚,把業(yè)務流程畫出來。
2. 測試環(huán)境
了解了產(chǎn)品需求和業(yè)務流程朱躺,最好能體驗一下軟件刁赖,從用戶的角度來理解軟件的使用。這個時候你要么需要生產(chǎn)環(huán)境长搀,要么需要測試環(huán)境宇弛。哪個環(huán)境不重要,重要的是源请,你需要一個能Run枪芒,能體驗的軟件。
3. 業(yè)務流程在代碼層面的體現(xiàn)
負責交接代碼給你的那位同事谁尸,要么在辦離職舅踪,要么已經(jīng)介入了其他產(chǎn)品,眼下很可能已無心戀戰(zhàn)良蛮,但你心里要清楚抽碌,只有他才能提供代碼層面的東西,比如類圖背镇、模塊劃分說明咬展、數(shù)據(jù)流圖泽裳、時序圖瞒斩、狀態(tài)圖等等。
所以涮总,你需要他整理一些文檔和圖表出來胸囱。你可以告訴領導你需要上面的東西,讓領導和他溝通瀑梗,讓他在離開之前準備好這些文檔給你烹笔,并留一些時間以便你熟悉。
4. 讀代碼抛丽,不死不休
有了產(chǎn)品需求谤职,有了業(yè)務流程,有了代碼設計相關的文檔和圖表亿鲜,接下來你就該死磕代碼了:
1
2
3
4
5
6
7
while(不懂)
{
????讀
}
5. 開發(fā)環(huán)境與調試
有的產(chǎn)品需要比較復雜的開發(fā)環(huán)境配置允蜈,一定要提前做好,讓即將離開的同事輔導你搭建好開發(fā)環(huán)境,這樣你就可以利用“調試”這個強大的武器來快速理解代碼了饶套。
調試是接手別人代碼時的利器漩蟆,如果你看不明白一個業(yè)務在代碼層面是怎么體現(xiàn)的,也看不懂代碼之間的調用關系妓蛮,那最好的辦法就是調試怠李。從一個業(yè)務的起點所對應的代碼開始調試,一步一步跟進去蛤克,就能快速理清函數(shù)調用鏈捺癞。
6. 樹立可實現(xiàn)可衡量的目標
程序員的工作交接,尤其是代碼交接咖耘,怎樣才算順利完成呢翘簇?
這簡直就是一個謎!
沒人說得清楚儿倒。
所以版保,你最好給自己梳理一些可衡量的、可實現(xiàn)的目標夫否。比如讀懂A彻犁、B、C三個業(yè)務流程……
最好凰慈,找一個Bug或者一個新增的功能汞幢,帶著目的去讀代碼、修改代碼微谓,有目的森篷,有目標,有時間盒豺型,就容易投入仲智,容易讀進去,容易掌握與Bug或新增功能相關的代碼的邏輯與流程姻氨。
7. 輸出钓辆、分享與重構
你在讀代碼時,如果能撇開給你交接工作的程序員提供的文檔肴焊,按自己的理解前联,自己繪制類圖、數(shù)據(jù)流圖娶眷、時序圖似嗤、關鍵業(yè)務流程對應的函數(shù)調用關系鏈等,就能更快的掌握別人的代碼届宠。
如果你還能將你理解到的東西烁落,講給其他人聽壳咕,并且講明白,那Ok顽馋,你真的理解了別人交接給你的代碼谓厘。
再進一步,如果你在理解現(xiàn)有代碼的基礎上寸谜,可以識別出哪些部分實現(xiàn)得邏輯不清晰或有待改善竟稳,然后可以結合業(yè)務與自己的理解將其重構,那就真的是完全接手了別人的代碼熊痴,別人的代碼與你的代碼就沒有差別了他爸,它們終將成為你的代碼。
「 最重要的事兒 」
如果你總是看見代碼多就發(fā)愁果善,看見代碼臟亂差就詛咒埋怨诊笤,看見代碼邏輯復雜就頭疼,搞不清調用關系就放棄巾陕,那你可能永遠也變不成代碼的主人讨跟,只能一次又一次被代碼蹂躪。
所以鄙煤,其實交接代碼最重要的事兒晾匠,就是:
不要被浩渺如煙并且陌生怪誕的代碼嚇得不敢動彈,現(xiàn)在就開始讀梯刚,立刻凉馆,馬上,堅持十分鐘亡资,再堅持十分鐘澜共,你就能妙悟真諦。
最后锥腻,當你再碰到這種事兒的時候嗦董,請記住老前輩的這句警世良言:
那些不能將你擊潰的代碼,都將成為你成長的墊腳石旷太。
如果你身邊有朋友展懈,正在接手別人代碼销睁,被逼的想要重構供璧,請將這篇文章轉發(fā)給他,普度蕓蕓眾碼農(nóng)冻记,是我義不容辭的責任睡毒。
歡迎大家來加入這個小群,大家一起學習python冗栗,掃面下方二維碼加入哦~