
大家好,我叫謝偉,是一名程序員。
最近比較忙,一方面是換工作,一方面是熟悉新的環(huán)境。一言難盡。
今天的主題:如何快速熟悉一個項目
之所以講這個話題,主要是最近新入職,因為是創(chuàng)業(yè)公司,不像大公司里的節(jié)奏,給你時間學(xué)習(xí),創(chuàng)業(yè)公司需要你快速的融入環(huán)境,快速的熟悉業(yè)務(wù)代碼,快速的實現(xiàn)需求。坦率的講,能力不足的時候會給你帶來焦慮。
綜合下來,當(dāng)下,我還是喜歡創(chuàng)業(yè)型公司。
所以,我就遇到里這個問題,入職三天,第一天就開始分配任務(wù),好在完成了需求,雖然需求不是很復(fù)雜。但是快速熟悉了項目,切入進(jìn)了項目內(nèi)。
我把自己的方法整理出來,希望對大家有幫助。
主要是后端代碼為例
1、具備最小知識集
這一點主要說明的是,你應(yīng)該要有些基礎(chǔ),寫過些代碼,不管是自己私底下接觸,還是仿照別人的例子,你大概要熟悉一門編程語言,知道后端大概會接觸些什么技術(shù)。
- 數(shù)據(jù)庫操作
在這之前,你要會用一種類型的數(shù)據(jù)庫,不需要精通,初級的知道CURD 其實都還OK,但是這樣的水平可能會讓你寫的代碼或者設(shè)計的業(yè)務(wù)比較不堪,所以,關(guān)于數(shù)據(jù)庫盡量需要知道更多的知識,比如數(shù)據(jù)庫的三大范式,索引、外鍵、主鍵、數(shù)據(jù)庫關(guān)聯(lián)等
- 編程語言
不管實際上你入手的項目是不是你熟悉的編程語言,至少你要熟悉一門編程語言,假如你要熟悉的項目的編程語言剛好是你會的,那么你熟悉起來當(dāng)然是更得心應(yīng)手了。假如不是你熟悉的編程語言,其實也都好OK,因為我見過許多程序員,編程語言都不是最重要的,只要熟悉了一門,這種技能遷移的能力,在程序員屆實在是太常見了。
- API
知道 http 請求的主要過程,知道 http 的動作。
看得懂API:方法、參數(shù)、響應(yīng)值。
更高一點的需求,會用 swagger 編寫 API
...
初級的后端技術(shù)就這些東西吧。
2、跑通代碼
跑通代碼意味著你大概能知道這個項目最后的結(jié)果是咋樣的。
比如說這是一個后臺管理系統(tǒng),你可以看API 文檔,大概知道提供哪些接口。
假如又提供了前端,那更好,你可以看看網(wǎng)站,網(wǎng)頁點擊點擊,看看網(wǎng)絡(luò)請求是調(diào)用的哪個API. 觸發(fā)的動作是什么,響應(yīng)又是什么。
跑通代碼,你可能也可以看到,整體的部署流程是什么樣的,比如如何部署的?容器?鏡像?最后又是如何自動的部署到服務(wù)器上的?
假如代碼沒跑通,那么你可能依賴沒搞好,或者設(shè)置沒搞好,或者需要走的步驟你沒執(zhí)行?
總之,跑通代碼很重要。
相同的道理,有時候,你使用某個開源項目,某個具體的用法文檔上寫的不是很清楚,這個時候有可能你需要看看開源項目的測試文件,有可能你只是摘抄幾個測試文件中的函數(shù),自己運行起來,再修修改改,然后你可能就搞懂了具體怎么用了。
3、項目使用里哪些第三方庫、結(jié)合官方文檔使用第三方庫
- 絕大多少項目都需要依賴已有的成熟的第三方庫:節(jié)省時間成本
跑通代碼這一步,應(yīng)該就已經(jīng)會有下載第三方庫的步驟了。
這些第三方庫,不需要你使用的非常6, 你只需要知道如何使用即可。怎么知道如何使用?
1、看官方文檔
2、看不懂就Google 搜一搜能看懂的例子,但只是作為輔助手段,最主要的還是文檔
3、拷貝文檔例子,自己實驗下,發(fā)現(xiàn)問題,有時候你看到的以為會,其實不一定真會,讓代碼跑起來很重要
4、換個例子,結(jié)合自己的歷史經(jīng)驗和現(xiàn)有的文檔,看看能不能換個例子再實現(xiàn)一下,能不能更優(yōu)化了你之前的想法,提供了更好的解決方案
4、梳理項目結(jié)構(gòu)
項目結(jié)構(gòu),講究的是如何組織的代碼層級結(jié)構(gòu),體現(xiàn)在最終的效果上就是代碼文件是如何組織的了。
我之前非常崇尚領(lǐng)域驅(qū)動 DDD
項目的組織也一度按照的是 DDD 的指導(dǎo)思想:
- Domain 領(lǐng)域?qū)?/li>
- Infra 基礎(chǔ)設(shè)施層
- UI 用戶UI 層
- Application 應(yīng)用層
不過當(dāng)然不是所有的項目都和你想象的一樣,受歷史的原因,項目的組織結(jié)構(gòu)往往受第一個寫這個代碼的人的影響,一定程度上反應(yīng)了第一個寫這份代碼的人的編程風(fēng)格。
好,這里當(dāng)然不是講述個人編程風(fēng)格問題。
好的項目組織:
- 好看:
這是第一印象,什么叫好看呢?項目組織清晰,一看就知道,哪部分是干什么的,實現(xiàn)了什么樣的功能。
- 可拓展:
特別是作為一個初始階段的項目,會頻繁變動,這個時候拓展性、可維護(hù)性的項目一定會給你解決掉諸多的問題。
- 低耦合
即相互之間的依賴少,即可實現(xiàn)功能。低耦合性對于不斷變更的需求的初始項目來說,爽的一筆。
總之,就算你不熟悉具體的代碼內(nèi)實現(xiàn)什么樣的功能,僅僅看項目結(jié)構(gòu),你大概也能猜出來這個文件內(nèi)的代碼大概是實現(xiàn)什么。對我來說,這就是好的項目組織結(jié)構(gòu)。
假如遇到的項目組織,確實不是上文講的那么優(yōu)雅,那怎么辦?
- 你確定需要待這家公司?確定。好,你的機(jī)會來了。你可以進(jìn)行重構(gòu)。重構(gòu)意味著你對代碼需要非常熟悉。假如你有這個任務(wù),相信我,你能熟悉這個項目的。
好,這節(jié)主要是梳理項目的組織,知道哪塊負(fù)責(zé)什么任務(wù)。
可能光看還不容易明白,不利于思維的呈現(xiàn)。那怎么辦?
- 筆記本上寫寫畫畫,流程圖搞起來
- 思維導(dǎo)圖畫起來
假如還是不懂,那怎么辦?
兄dei, 問問會的人羅。
面子是最不值錢的玩意,不懂就問
5、仿照項目實現(xiàn)另一需求
簡單的說
- 仿照或者優(yōu)化項目結(jié)構(gòu)
- 借用相同的技術(shù)棧,自己尋找類似的例子,從頭到尾的實現(xiàn):自己設(shè)計、自己編碼、自己測試,體量可以比真實的項目小很多,但核心的功能還是要實現(xiàn),數(shù)據(jù)量不一定相當(dāng)。一句話說:麻雀雖小、五臟俱全
- 講出來:結(jié)合你自己實現(xiàn)的這個需求,編碼完成之后,講出來,相信我,會對你有好處的。
好,本節(jié)大概這樣,最重要的是第五條。
再會,我是謝偉。