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