如何接手一個複雜的系統?
作為程式設計師,無論是小菜還是老鳥,都會因為離職交接或者崗位異動等各種原因,而避免不了要如羚羊奔跑版的速度接手一個複雜業務系統。因為只有儘快熟悉系統,方能夠快速支援業務需求的研發。
那麼問題就來了,面對一個一無所知的複雜的系統,我們該如何入手呢?
本文將結合菜菜同學多年來的沉(經)澱(驗),再融合老中醫望聞問切的招式,吐血整理成一劑錦囊妙藥和一副圖,送給大家。
《一劑良藥》
「菊花」看文件,記疑惑。
「薄荷」串文件,理脈絡。
「蓮心」講系統,要知彼。
「荷葉」捋程式碼,了梗概。
「玄蔘」盤經驗,理大坑。
「蘆根」親操刀,細解剖。
《一幅圖》
第一招:看文件,知脈略。
老中醫:望。望診,是對病人的神、色、形、態、舌象等進行有目的的觀察,以測知內臟病變。
菜菜同學結合「望診」而獨創快速接手一個複雜系統之招式一:看文件,知脈略。
當一個複雜的系統要交接到你手上時,理想中各種文件樣樣全,要啥有啥,而現實啪啪打臉。多數情況下都沒有文件,如果有一些文件可看,無論質量如何,都是一件值得慶幸的事情。
如果專案組比較規範,沉澱了一些入門文件、產品介紹文件、業務架構設計文件、資料庫設計文件,那就更值得慶幸啦,靜下來仔細去看,通過文件多少會了解一些系統的前世今生,對系統有一個初步的認識。
不過,當接手一個系統時,一定要看看文件在哪裡?是在 Wiki 上,還是在 SVN、Git 上,如若有文件的情況下,儘快找到它,並粗略的看一遍。
看了這麼多文件,肯定有太多的疑惑,先拿小本本記下來,製造機會請老鳥給你答疑解惑。
第二招:聽細節,聊全域性。
老中醫:聞。聞診,主要是聽患者語言氣息的高低、強弱、清濁、緩急……等變化,以分辨病情的虛實寒熱。
菜菜同學結合「聞診」而獨創快速接手一個複雜系統之招式二:聽細節,聊全域性。
拿著你事先記錄好滿滿疑惑的小本本,組個會議,喊上老鳥好好給你指點迷津。
首先,請老鳥串一串文件。
大概理一理,然後把你之前小本本上的問題,一股腦丟擲來當面請教。
然後,請老鳥講一講系統。
大概要了解一下系統的使用方是誰?系統依賴的系統有哪些?系統主要干係人有哪些?系統研發的需求來自於哪裡?最重要的是要請老鳥演示一下如何把系統跑起來?跑起來後功能該怎麼用?
最後,請老鳥捋一捋程式碼。
大概捋一捋程式碼的設計,瞭解一下主要分為幾大塊?程式入口在哪裡?技術棧是啥樣子?... ...
第三招:問疑難,解雜症。
老中醫:問。問診,通過了解既往病史與家族病史、起病原因、發病經過及治療過程,主要痛苦所在,自覺症狀,飲食喜惡等情況,結合望、切、聞三診,綜合分析,作出判斷。
菜菜同學結合「問診」而獨創快速接手一個複雜系統之招式三:問疑難,解雜症。
首先,問老鳥:要接手的系統,歷史事故都發生過哪些?
為了不貳過,要了解一下要接手的系統,歷史的事故是程式碼問題,還是人禍導致的?
最後,問老鳥:要接手的系統,坑在哪裡?
大概瞭解一下老鳥以往趟過的那些坑,前車之鑑必是後車之師。重點了解系統有哪塊會有潛在的問題,當接手之後一定要細心著重對待,防患於未然。
第四招:親操刀,細解剖。
老中醫:切。切脈又稱診脈,是醫者用手指按其腕後橈動脈搏動處,藉以體察脈象變化,辨別臟腑功能盛衰,氣血津精虛滯的一種方法。
菜菜同學結合「切診」而獨創快速接手一個複雜系統之招式四:親操刀,細解剖。
通過前面三種招式相結合,我們文件也看了,系統功能也瞭解了,歷史事故也知道了,接下來要進入程式設計師最擅長區域——解剖程式碼。
首先,加註釋,加關鍵日誌。
找到程式入口,根據自己的理解,一步一步去加註釋,要敢於動手去加,確定不了的,有疑問的用註釋標記好,或者記個大大的問號,把你的想法理解都用註釋記錄一下,相信對程式碼的理解,一遍比一遍更透徹。
當然,除了加註釋的一種方式,還推薦加關鍵日誌,因為加入關鍵日誌,不過日誌最好有一些特色,例如都還有「haha:」,這樣能夠在子模組呼叫比較複雜的情形下,在專案啟動後,根據加入日誌檔案,直接關注「haha:」就能把相關子系統的呼叫流程串在一起,屢試不爽。
然後,跑應用,Debug。
除了加註釋,加關鍵日誌能夠理解程式碼邏輯外,Debug 也是推薦的一種方式,從程式入口開始逐步進行除錯,也會對程式碼有一個質的理解。
仁者見仁智者見智,依據個人習慣,還是更推薦加日誌,或許是因為 Debug 有些時候遇到反射或者庫呼叫,跟著跟著就亂掉了。
在這裡,建議一定要把應用跑起來,只有跑起來,才能根據之前加入的日誌,梳理梳理系統呼叫關係,模組呼叫關係,再好好體驗體驗功能。
最後,畫畫圖,善分享。
加日誌、加註釋、Debug 的事兒多數鐵子都幹過,但是能把自己對程式碼的理解真心畫下來的估計會很少,這塊真心推薦大家沒事的時候靜下來畫一畫,是對程式碼理解質的一次提升,畫出來才能理解的更透徹,更清晰,如果閒暇之餘把上手系統的經過寫成手冊,相信對於後面接手的同事而言是一大筆“財富”。
當然了,除了畫圖、寫手冊還是不夠的,重要的是能夠拉幾個同事進行分享一下,這樣才能更快變成自己的知識,在這裡忍不住要拋一張圖。
另外,接手系統解剖程式碼這塊放到最後一部分去談,原因這塊確實考驗個人的技術能力,而且是一個長久的過程,需要慢慢去磨。
真心寄語
本次主要談談如何快速接手一個系統?吐血推薦的一幅圖和一劑藥,如果有接手系統的困惑,而且沒有更好的方法時,那不妨拿去實踐,屢試不爽。
前路漫長,人生實苦,每個人方法都不一樣,條條大路通羅馬,選擇適合自己的。奔跑是追夢人的氣質,用奮鬥定義人生價值,在奔跑中抵達遠方,鐵子們加油?。
好了,分享就到這裡,希望對你有幫助。一起聊技術、談業務、噴架構,少走彎路,不踩大坑。會持續輸出原創精彩分享,敬請期待!