<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          每次跳槽,總得面對這攤事

          共 3092字,需瀏覽 7分鐘

           ·

          2021-09-07 22:34

          這里是Z哥的個人公眾號

          每周五11:45 按時送達(dá)

          當(dāng)然了,也會時不時加個餐~

          我的第「207」篇原創(chuàng)敬上



          大家好,我是 Z 哥。

          所謂“跳槽爽,一直跳槽一直爽”。但是,世上哪有那么好的事哦,跳槽雖然可以帶來更快的漲薪機會,但是你也是要面對和克服一些新挑戰(zhàn)的,其中最大的挑戰(zhàn)莫過于要熟悉一個陌生的項目。畢竟,進(jìn)入到一個新的團隊,又恰好遇到做的是一個新項目,這個概率就太小了。

          對我們程序員來說,這里的陌生項目就是一套陌生的源碼。


          有時候如果運氣好,有一位帶教老師或者熱心的同事來幫助你熟悉項目,那自然會輕松很多,速度也更快。

          但是如果你運氣沒那么好,或者去到了一個人員緊張的快速發(fā)展期企業(yè),那就只能靠你自己了。這個時候如果你掌握了一些快速熟悉項目的技巧,會對你有很大幫助。

          否則,因為沒能在一定時間內(nèi)對項目有足夠的了解,導(dǎo)致工作完成得不好,進(jìn)一步導(dǎo)致沒過試用期,那就麻煩大了。


          很多人熟悉項目,先從其中用到的中間件開始。這個思路其實不太好,雖然中間件是通用的,在哪個項目里都能用,所以比較容易下手。但是具體怎么用,承擔(dān)了什么職責(zé),在一些細(xì)節(jié)上,不同項目會有所不同。

          所以從中間件入手去熟悉項目,就猶如管中窺豹,了解的并不全面,甚至可能會判斷錯誤。


          在 Z 哥的職業(yè)生涯中,大多數(shù)時候都沒有什么人來指導(dǎo),自己摸石頭過河熟悉過大大小小十幾個項目,也積累了一些經(jīng)驗,在這里和大家交流一下。也歡迎你在評論區(qū)分享你的好方法。

          我的思路總共分為 5 步。我相信,沿著這個思路來熟悉項目,不敢說對項目了如指掌吧,至少可以在短時間內(nèi)了解項目的 6、7 分。


          /01  從哪里來/

          “從哪里來,到哪里去”是一個著名的哲學(xué)問題,其實這個邏輯也適用于我們熟悉一個陌生項目。

          大部分情況下,技術(shù)都是為業(yè)務(wù)服務(wù)的,所以任何項目都是為了解決某一個問題而誕生的,因此,「從哪里來」自然藏在業(yè)務(wù)里。

          建議可以從以下兩個問題入手,搞清楚了這兩個問題,相信你也知道了這個項目的由來。

          1. 誰在用這個系統(tǒng)?

          2. 用這個系統(tǒng)做什么?


          其實你會發(fā)現(xiàn),這兩個問題構(gòu)建的是一個畫面,一個人或者一群人在如何使用這個系統(tǒng)進(jìn)行工作的畫面。這其實就是所謂的工作場景,它們也解答了「從哪里來」這個問題。

          舉個例子,比如說你接手了一個消息通知類的系統(tǒng),那么經(jīng)過了解會得到這樣的一條信息。

          運營人員會用這個系統(tǒng)發(fā)送APP通知、短信通知等,以此來觸達(dá)消費者,并引導(dǎo)用戶促成交易轉(zhuǎn)化。


          進(jìn)一步你也會知道,這個系統(tǒng)的職責(zé)就是編輯通知內(nèi)容、發(fā)送通知、記錄觸達(dá)的結(jié)果。如果更進(jìn)一步的話,還能考慮到點擊率、轉(zhuǎn)化率等數(shù)據(jù)記錄,因為這些數(shù)據(jù)可以更好的幫助操作人完成他的工作目的,“促成更多的交易”。


          /02  到哪里去/

          第一步搞清楚了「從哪里來」,下一步搞清楚「到哪里去」。

          「到哪里去」就是搞清楚這個項目生命周期,這個項目實際是如何運轉(zhuǎn)創(chuàng)造價值的。這其實也是必要的一個前期準(zhǔn)備工作。畢竟不管做任何事,有準(zhǔn)備總是更好的。沒有準(zhǔn)備,談何事半功倍呢。

          第一步主要需要做兩件事:

          1. 知道源碼在哪里。

          2. 搞清楚項目運行涉及到的環(huán)境。這里的環(huán)境不僅僅是生產(chǎn)環(huán)境,還有各個測試環(huán)境和 CI / CD 機制。


          只要知道了這兩項內(nèi)容,其實你對這個項目的「生命周期」就了解的很清楚了。知道了它是如何流轉(zhuǎn)的,就相當(dāng)于知道了它到哪里去。


          /03  梳理技術(shù)鏈路/

          在第一步中我們做的工作其實間接也算梳理了一遍業(yè)務(wù)鏈路?;谶@個信息其實我們也可以進(jìn)行技術(shù)鏈路的梳理了。

          對于技術(shù)鏈路的梳理,我的建議是,「先縱再橫」。

          「縱」就是沿著一條線從前往后梳理,一般從應(yīng)用側(cè)開始, 應(yīng)該很多人也的確是這么干的。比如上面我們在前面例子中提到的通知系統(tǒng),一般是,UI -> API -> MQ / DB -> 各個通知渠道的 Service -> DB。

          「橫」就是對梳理出來的多條「縱」的技術(shù)鏈路進(jìn)行整理,找到其中的共同點以及相關(guān)性。這些共同點大多會由一個通用組件/ Service 來滿足需求,而相關(guān)性則代表著多個業(yè)務(wù)鏈路之間的「耦合」關(guān)系。

          當(dāng)然,如果你參與到的是一個超大型項目,很多「縱」其實已經(jīng)單獨做成一個子系統(tǒng)了,這個時候?qū)Α笝M」的梳理,其實就是對子系統(tǒng)之間的梳理。


          注意,做技術(shù)鏈路梳理的時候,不需要陷入到代碼細(xì)節(jié)里去,只要大致知道不同 class 之間的引用關(guān)系如何即可。如果你提前深入到代碼細(xì)節(jié)里去,那么一但遇到復(fù)雜度較高的項目,你很容易產(chǎn)生焦慮感。


          /04  梳理數(shù)據(jù)表/

          如果說站在整個業(yè)務(wù)的本質(zhì)上看,業(yè)務(wù)無非就是一堆代碼運行在一堆機器上;那么站在單個項目來看,一個項目無非就是對數(shù)據(jù)庫的增刪改查操作而已;或者從使用者的角度看,一個項目就是輸入一些參數(shù)得到一些返回結(jié)果而已。

          工欲善其事必先利其器,梳理數(shù)據(jù)表我平時最喜歡用的工具是 Red Gate 里的 SQL Doc 和 SQL Dependency Tracker。前者可以自動根據(jù)數(shù)據(jù)庫的信息生成方便查看的文檔,后者可以生成圖表查看數(shù)據(jù)之間的關(guān)系,很好用。

          如果遇到一個表數(shù)量達(dá)到 3 位數(shù)的時候,怎么能快速定位核心表呢,有 2 個小技巧。

          1. 忽略 config、log、flow、statistics 為后綴或者前綴的表,這些的表的作用從名字也能看出來作用,必然不會包含什么核心業(yè)務(wù)信息。

          2. 從一些前綴統(tǒng)一的表,但是前綴不屬于上面 4 個單詞的表開始。比如 order、trade 這種,一般越核心的業(yè)務(wù),往往基于它前綴所擴展出來的表也越多。



          /05  運行并調(diào)試一下/

          調(diào)試是一個有效的 Debug 方式,也是一個有效理解代碼的方式。我們進(jìn)行調(diào)試的目的倒不是為了弄清楚某一個業(yè)務(wù)的細(xì)節(jié),而是通過調(diào)試來觀察數(shù)據(jù)的流轉(zhuǎn)情況,驗證自己對之前做的這些信息整理所形成的猜想是否屬實。

          因此,盡量挑選一個你認(rèn)為業(yè)務(wù)最復(fù)雜的頁面,然后對頁面上的每個按鈕都去點一下看看。在這個期間你還能加強對前后端之間通訊方式的理解。


          前陣子寫過一篇《幫助閱讀源碼的 8 個技巧》,里面有些思路其實是類似的。

          最后再多說幾句感想,我知道有很多人在熟悉項目的時候會吐槽原來的設(shè)計多么多么垃圾。我勸大家善良,因為可能未來接手你現(xiàn)在負(fù)責(zé)的這個項目的人也會這么吐槽你。但實際上我相信每個人在當(dāng)時作出的決策設(shè)計,一定是在當(dāng)時綜合各方因素后的最優(yōu)解,畢竟沒有人那么傻,明知故錯。

          另外,以下這三點也是在我們熟悉項目的過程中可以相信的事情。

          • 你遇到的問題很多人已經(jīng)遇到過并且解決了 。 

          • 你遇到的問題大概率在當(dāng)前系統(tǒng)里面已經(jīng)有了答案。 

          • 你遇到的問題大概率在你用的框架和組件里面都有現(xiàn)成的解決方案。



          好了,總結(jié)一下。

          這篇呢,Z 哥和你分享了我對如何快速熟悉一個項目的經(jīng)驗。我的思路主要分為 5 步:

          1. 從哪里來

          2. 到哪里去

          3. 梳理技術(shù)鏈路

          4. 梳理數(shù)據(jù)表

          5. 運行并調(diào)試一下


          希望對你有所幫助。

          對很多人來說,更愿意重頭做一個新系統(tǒng)而不是去接手一個老系統(tǒng)。不過,老系統(tǒng)其實滿是寶藏,里面有很多你可以借鑒和學(xué)習(xí)的東西。



          推薦閱讀:


          原創(chuàng)不易,如果你覺得這篇文章還不錯,就「點贊」或者「在看」一下吧,鼓勵我的創(chuàng)作 :)


          也可以分享我的公眾號名片給有需要的朋友們。

          如果你有關(guān)于軟件架構(gòu)、分布式系統(tǒng)、產(chǎn)品、運營的困惑

          可以試試點擊「閱讀原文

          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄片免费观看大全 | 午夜高清| 西西www444大胆无码视频 | 麻豆成人影音 | 亚洲天堂一区二区三区 |