最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

30個(gè)提升團(tuán)隊(duì)研發(fā)效能的錦囊

2020-12-13 17:02 作者:程序員魚皮  | 我要投稿

互聯(lián)網(wǎng)大公司那些價(jià)值上億的項(xiàng)目背后,團(tuán)隊(duì)成員是怎么高效協(xié)作開發(fā)的?和我自己開發(fā)辣條項(xiàng)目時(shí)有什么區(qū)別?

看完本文,保證讓你大開眼界!

魚皮在學(xué)校的時(shí)候,做過很多項(xiàng)目,但大部分都是練手的 Demo?;径际菃伪鲬?zhàn),毫無(wú)章法。

大二暑假,我第一次進(jìn)入企業(yè)實(shí)習(xí),要和同事合作開發(fā)一個(gè)大項(xiàng)目,對(duì)于企業(yè)中的條條框框和同事寫的爛代碼非常不適應(yīng),整天大呼同事不講碼德!

大三來(lái)到字節(jié)跳動(dòng)實(shí)習(xí),還是和同事一起開發(fā)一個(gè)新項(xiàng)目,那會(huì)兒仍然不適應(yīng)團(tuán)隊(duì)開發(fā),最煩的事就是每次寫完代碼,都要讓同事檢查幾遍,確認(rèn)沒問題后還要在他的監(jiān)護(hù)下才能發(fā)布上線。

后來(lái)走出校園,來(lái)到騰訊,接觸到了更大的團(tuán)隊(duì)、更大的項(xiàng)目,但起初我還不能很好的適應(yīng)團(tuán)隊(duì)開發(fā),依舊保持個(gè)人開發(fā)時(shí)的野性,導(dǎo)致效率非常低。

經(jīng)過在鵝廠一年多的摸爬滾打,如今的我,終于能夠熟練運(yùn)用企業(yè)的各種資源來(lái)提升自己和團(tuán)隊(duì)的研發(fā)效率了!

我總結(jié)了 30 個(gè)提升團(tuán)隊(duì)研發(fā)效能的錦囊,完整覆蓋項(xiàng)目的各研發(fā)流程,分享給大家~

項(xiàng)目研發(fā)流程

1. 技術(shù)選型

想要提升團(tuán)隊(duì)開發(fā)效率,在投入項(xiàng)目開發(fā)前,必須確認(rèn)項(xiàng)目的技術(shù)選型。比如項(xiàng)目選用哪種編程語(yǔ)言、選用哪個(gè)開發(fā)框架、選用哪些依賴庫(kù)、選用哪個(gè)測(cè)試框架、選用哪種數(shù)據(jù)庫(kù)、選用哪些中間件等等。

技術(shù)選型是一門大學(xué)問,通常不是由一位技術(shù)大?;蚣軜?gòu)師一錘定音的,而是要大家開會(huì)討論,結(jié)合具體的業(yè)務(wù)場(chǎng)景進(jìn)行分析,并且對(duì)技術(shù)進(jìn)行充分的研究,最后共同確認(rèn)一個(gè)較為合適的選型方案。

技術(shù)選型的考量要素非常多,比如:

  1. 團(tuán)隊(duì)成員對(duì)技術(shù)的熟悉程度。團(tuán)隊(duì)成員對(duì)技術(shù)越熟悉,培訓(xùn)成本越小,開發(fā)效率越高。在一個(gè)都是 ?Java 工程師的團(tuán)隊(duì)提出使用 C++ 簡(jiǎn)直不講碼德!

  2. 團(tuán)隊(duì)對(duì)技術(shù)的掌控度。團(tuán)隊(duì)內(nèi)至少要有一個(gè)人非常了解該技術(shù),懂得最佳實(shí)踐,能夠指導(dǎo)團(tuán)隊(duì)正確運(yùn)用技術(shù),并解決疑難問題。

  3. 技術(shù)的主流程度和生態(tài)。技術(shù)越主流,文檔、實(shí)踐和解決方案就越多,而使用冷門技術(shù)可能出現(xiàn)無(wú)法解決的問題,整段垮掉!

  4. 技術(shù)和業(yè)務(wù)的貼合程度。技術(shù)是為業(yè)務(wù)服務(wù)的,因此必須結(jié)合具體的業(yè)務(wù)場(chǎng)景去選用技術(shù)。比如在只有幾個(gè)用戶使用的小網(wǎng)站中運(yùn)用微服務(wù)框架是一個(gè)愚蠢的選擇。

2. 開發(fā)工具

工欲善其事,必先利其器。

在開發(fā)前,選擇一款優(yōu)秀的開發(fā)工具,并且學(xué)習(xí)如何高效地使用它吧!很多開發(fā)工具都自帶了代碼檢查、代碼格式化等功能,還有很多快捷鍵,這將大大提升我們的開發(fā)效率和開發(fā)體驗(yàn)。

目前比較主流的開發(fā)工具有 JetBrains 全家桶Vscode、Sublime 等等,不必沉迷于某一款開發(fā)工具無(wú)法自拔,可以針對(duì)項(xiàng)目的類別和體積進(jìn)行選擇。

除了本地的開發(fā)工具外,還可以使用云端的開發(fā)工具,比如 Cloud Studio,無(wú)需下載任何軟件,直接在瀏覽器中進(jìn)行開發(fā)和調(diào)試、實(shí)時(shí)瀏覽。對(duì)于小型項(xiàng)目的開發(fā)也許是一個(gè)不錯(cuò)的選擇。

Cloud Studio 在線開發(fā)

3. 代碼規(guī)范

在開發(fā)前,為團(tuán)隊(duì)或項(xiàng)目制定一套代碼規(guī)范太有必要了。

好的代碼規(guī)范能夠幫助團(tuán)隊(duì)成員閱讀理解他人的代碼,提升協(xié)作開發(fā)效率和團(tuán)隊(duì)氛圍。

試想,如果你習(xí)慣代碼縮進(jìn)兩格,而其他同學(xué)都縮進(jìn)四格,會(huì)不會(huì)感到很懊惱?

4. 腳手架

在開發(fā)一個(gè)新項(xiàng)目前,通常由架構(gòu)師或熟悉技術(shù)框架的同學(xué)來(lái)搭建項(xiàng)目的基本結(jié)構(gòu)、編寫 Demo,其他同學(xué)只需要在此基礎(chǔ)上遵循規(guī)范進(jìn)行開發(fā)(復(fù)制粘貼)就好。

如今,項(xiàng)目結(jié)構(gòu)越來(lái)越復(fù)雜,我們不可能手動(dòng)創(chuàng)建一個(gè)又一個(gè)文件。

懶人推動(dòng)世界,很多框架自帶了腳手架,能夠讓我們通過輸入一兩行命令,快速生成項(xiàng)目的基本結(jié)構(gòu)、默認(rèn)配置文件、甚至是可直接運(yùn)行的 Demo,避免了不必要的重復(fù)工作,大大提升開發(fā)效率!

比如前端框架 Vue 的腳手架 Vue Cli 和前端框架 React 的腳手架 Create React App

5. 低代碼構(gòu)建

低代碼是指少寫代碼或不寫代碼。通過對(duì)應(yīng)用場(chǎng)景的極致抽象和模板化,將寫代碼的工作交給機(jī)器來(lái)自動(dòng)生成。

就像現(xiàn)在網(wǎng)上很多 App 和網(wǎng)站制作平臺(tái),只需要在界面上選擇元素、點(diǎn)點(diǎn)拖拖,就能夠自動(dòng)創(chuàng)建出應(yīng)用,根本不需要寫任何代碼,哪怕是不會(huì)編程的人也能輕松使用。

低代碼構(gòu)建在企業(yè)中非常流行,是提升團(tuán)隊(duì)開發(fā)效率的神器,幾乎每個(gè)大公司都有自己的低代碼構(gòu)建平臺(tái)。業(yè)界比較知名的低代碼平臺(tái)有 Google 的 App Maker 和微軟的 Power Apps 等。

Power Apps 畫布的圖像

6. 內(nèi)部依賴倉(cāng)庫(kù)

在開發(fā)中,我們經(jīng)常需要下載大量的依賴包,還要將開發(fā)好的依賴包進(jìn)行上傳。

但是,通常軟件依賴源都是國(guó)外的服務(wù)器,比如 Mavennpm 源,從國(guó)內(nèi)下載依賴的速度非常慢。雖然下載慢的問題可以通過配置國(guó)內(nèi)鏡像源得到一定程度的解決,但是無(wú)法直接在公有軟件源上傳私有包。

因此,通常企業(yè)都會(huì)在內(nèi)網(wǎng)搭建私有軟件源,即內(nèi)部依賴倉(cāng)庫(kù),便于內(nèi)部依賴管理,大大提升拉取效率。

目前最常用的內(nèi)部依賴倉(cāng)庫(kù)是 Nexus。

Nexus 倉(cāng)庫(kù)

7. 本地開發(fā)熱更新

很多年前,在我還有一雙清澈的雙眼的時(shí)候,我在本地開發(fā)網(wǎng)站都是改一行代碼,然后切換到瀏覽器里刷新看效果,然后再改代碼,再刷新,如此往復(fù),非常難受。尤其是開發(fā)后臺(tái)應(yīng)用時(shí),哪怕在代碼中改了一個(gè)字母,都要去重啟項(xiàng)目!

現(xiàn)在想想,效率實(shí)在是太低了。

如今,本地開發(fā)熱更新是程序員開發(fā)提效必備的神器,啟動(dòng)一個(gè)開發(fā)服務(wù)器,讓它自動(dòng)監(jiān)聽代碼文件。當(dāng)代碼更新時(shí),運(yùn)行中的項(xiàng)目也會(huì)自動(dòng)更新,從而省去了無(wú)止盡的刷新和重啟。

在前端,比較知名的熱更新工具有基于 HMR 技術(shù)(模塊熱替換 hot module replacement)的 Webpack Dev Server;在 Java 后端有 熱部署插件 JRebel。

JRebel 簡(jiǎn)化流程

8. Serverless

Serverless 是最近幾年逐漸流行的概念,翻譯過來(lái)就是 “無(wú)服務(wù)器”。

以前,我們要搭建網(wǎng)站的后臺(tái),首先要買服務(wù)器,然后將一個(gè)大而全的項(xiàng)目包部署到服務(wù)器上,整體對(duì)外提供服務(wù),所有的系統(tǒng)資源和進(jìn)程都需要由我們自己來(lái)管理。

單體架構(gòu)

隨著云計(jì)算時(shí)代虛擬化、容器、微服務(wù)等技術(shù)的發(fā)展,人們將大項(xiàng)目的通用部分抽象成一個(gè)個(gè)細(xì)小的服務(wù),每個(gè)服務(wù)只提供一個(gè)或幾個(gè)功能,獨(dú)立部署在比服務(wù)器更輕量且無(wú)狀態(tài)的容器中,共同對(duì)外提供服務(wù),組成一個(gè)完整的系統(tǒng)。

Serverless 架構(gòu)

而 Serverless 不是指完全不需要服務(wù)器,而是讓開發(fā)者感受不到服務(wù)器的存在。

什么意思呢?其實(shí)就是把對(duì)服務(wù)器的需求外包給廠商,我們只管寫代碼,讓他們負(fù)責(zé)部署和運(yùn)維。我們花錢,他們辦事!

目前國(guó)內(nèi)有很多 Serverless 服務(wù)提供商,如阿里云、騰訊云、LeanCloud 等,使用這些 Serverless 服務(wù)后,我們無(wú)需再關(guān)心服務(wù)器的運(yùn)行,只需要專心寫業(yè)務(wù)邏輯就可以了,能夠大大提升開發(fā)和維護(hù)效率,省時(shí)省心。

9. 代碼托管

很多年前,我們的代碼幾乎都存在自己的電腦里,通過 U 盤或者網(wǎng)絡(luò)傳輸代碼文件來(lái)實(shí)現(xiàn)合作開發(fā)。

而如今,代碼托管平臺(tái)已經(jīng)成為團(tuán)隊(duì)合作開發(fā)的靈魂。

相信很多小伙伴都接觸過 GitHub,世界上最大的代碼開源托管平臺(tái)。每個(gè)人都可以把自己的代碼發(fā)布到 GitHub 上,作為一個(gè)代碼倉(cāng)庫(kù),隨時(shí)隨地遠(yuǎn)程管理。還可以搜索和瀏覽其他人發(fā)布的代碼倉(cāng)庫(kù),以此實(shí)現(xiàn)高效地合作開發(fā),促進(jìn)項(xiàng)目的完善。

為了保證代碼的安全保密性,一般在公司或團(tuán)隊(duì)內(nèi)部都會(huì)自己搭建一個(gè)代碼托管平臺(tái),比較知名的有 GitLab,可以針對(duì)不同的項(xiàng)目為成員分配權(quán)限,更好地管理團(tuán)隊(duì)的代碼。

GitLab

10. 本地代碼檢查

在代碼提交之前,首先應(yīng)該在本地進(jìn)行代碼檢查,及時(shí)發(fā)現(xiàn)一些低級(jí)的語(yǔ)法錯(cuò)誤,防止被團(tuán)隊(duì)的其他同學(xué)嘲笑。

大多數(shù)集成開發(fā)工具自帶了代碼檢查功能,邊敲代碼邊檢查,非常爽。

此外,我們還可以配置 Git Hooks,在代碼提交前自動(dòng)執(zhí)行代碼檢查,npm 項(xiàng)目可以通過 Husky 插件實(shí)現(xiàn),還能配合 ESLint 實(shí)現(xiàn)代碼自動(dòng)修復(fù)。

ESLint

11. 代碼提交規(guī)范

團(tuán)隊(duì)越大,規(guī)范就越重要。

只有代碼編寫規(guī)范還不夠,還要在團(tuán)隊(duì)內(nèi)制定一套代碼提交規(guī)范,通常是約定式提交規(guī)范,即讓成員在提交代碼時(shí)填寫指定格式的 Commit Message,比如下面的格式:

<提交類型>[可選的作用域]:?<描述>

[可選的正文]

[可選的腳注]

指定代碼提交規(guī)范不僅能夠幫助成員快速理解每次提交的改動(dòng)點(diǎn),提升代碼審查效率;更大的作用是讓一些自動(dòng)化工具理解提交信息以進(jìn)行一些有意義的工作,比如生成 Change Log(代碼改變?nèi)罩荆?/p>

可以參考一些大公司的代碼提交規(guī)范,并通過 commitlintcommitizen 等插件實(shí)現(xiàn)自動(dòng)修復(fù)不規(guī)范代碼。

12. 代碼審查

在團(tuán)隊(duì)開發(fā)中,寫代碼可不能像自己練習(xí)編程時(shí)一樣肆無(wú)忌憚。

在合作開發(fā)時(shí),可以為每位開發(fā)者分配一個(gè)分支,在自己的分支編寫和提交代碼,也可以按照需求來(lái)建立分支。確認(rèn)開發(fā)測(cè)試完成后,發(fā)起一個(gè) MR(Merge Request 合并請(qǐng)求),將小分支的代碼合并到公共的主線分支即可。

分支合并

主線分支的代碼通常是能夠直接發(fā)布上線、穩(wěn)定運(yùn)行的。因此,為了保證項(xiàng)目代碼的質(zhì)量,每次合并代碼到主線分支前,必須要進(jìn)行代碼審查(CR,即 Code Review),就是讓同事或上級(jí)閱讀和審批你的代碼,覺得沒有問題后,才能夠執(zhí)行代碼合并。

通常,代碼變更越大、項(xiàng)目越重要,代碼審查所需人數(shù)越多,越能夠發(fā)現(xiàn)一些個(gè)人無(wú)法發(fā)現(xiàn)的風(fēng)險(xiǎn)和問題。因此,代碼審查是大公司研發(fā)流程的關(guān)鍵一環(huán)和重要防線。雖然不能直接提升研發(fā)效能,但是能有效避免線上事故的發(fā)生,減少程序員不必要的工作量和心理壓力。

代碼審查

13. CI/CD 流水線

CI/CD 即持續(xù)集成/持續(xù)交付。

在敏捷開發(fā)時(shí)代,哪怕是一個(gè)小團(tuán)隊(duì),每天也會(huì)有幾次的代碼提交,如果長(zhǎng)期不合并,可能就會(huì)出現(xiàn)代碼沖突。

因此,持續(xù)集成的意義在于,通過每天定時(shí)將各個(gè)開發(fā)人員的代碼合并到同一個(gè)代碼倉(cāng)庫(kù)中,以盡早發(fā)現(xiàn)代碼沖突和錯(cuò)誤,幫助團(tuán)隊(duì)更緊密地開發(fā)協(xié)作。

當(dāng)我們開發(fā)完項(xiàng)目,想要發(fā)布上線時(shí),要先登錄服務(wù)器,然后在服務(wù)器上拉取代碼倉(cāng)庫(kù)中的項(xiàng)目代碼,然后執(zhí)行打包命令,最后通過腳本運(yùn)行項(xiàng)目。

如果只需要在一臺(tái)服務(wù)器上部署,其實(shí)還不算太麻煩,但是如果要在幾十臺(tái)機(jī)器上部署呢?要一臺(tái)一臺(tái)地登錄服務(wù)器然后重復(fù)著上述工作么?

懶人推動(dòng)世界,這時(shí)我們就需要持續(xù)交付,將構(gòu)建部署的每個(gè)步驟由人工轉(zhuǎn)變?yōu)闄C(jī)器自動(dòng)操作,原理類似編寫了一個(gè)自動(dòng)化構(gòu)建腳本,在代碼合并到倉(cāng)庫(kù)時(shí)觸發(fā)腳本的執(zhí)行,在各機(jī)器上自動(dòng)拉取新代碼并打包發(fā)布。

目前主流的 CI/CD 平臺(tái)是 Jenkins 老爺爺,可以配合代碼托管平臺(tái) GitLab 等實(shí)現(xiàn)完全自動(dòng)化打包、構(gòu)建、發(fā)布,再也不用開發(fā)人員一臺(tái)臺(tái)登錄機(jī)器去執(zhí)行重復(fù)的命令了,不僅大大提升了團(tuán)隊(duì)研發(fā)效率,還保證了發(fā)布流程的規(guī)范和安全性。

畢竟總有些內(nèi)鬼程序員借著發(fā)布的名義偷偷登錄服務(wù)器執(zhí)行 rm -rf *

14. 監(jiān)控告警

為了在第一時(shí)間發(fā)現(xiàn)線上項(xiàng)目存在的問題,我們通常會(huì)在代碼中添加告警邏輯,當(dāng)某段代碼執(zhí)行異常時(shí)通過郵件、短信、微信、電話等方式聯(lián)系項(xiàng)目負(fù)責(zé)人。

但有時(shí),我們可能會(huì)針對(duì)某些指標(biāo)在一段時(shí)間內(nèi)的統(tǒng)計(jì)值設(shè)置告警。比如當(dāng)機(jī)器內(nèi)存占用超過 80% 且持續(xù) 5 分鐘才告警。這些告警邏輯和業(yè)務(wù)本身關(guān)系不大,如果都寫死在代碼里,不僅耗時(shí),而且難以維護(hù)。

可以在團(tuán)隊(duì)內(nèi)搭建監(jiān)控告警平臺(tái),通過在機(jī)器上部署代理或者在代碼中使用上報(bào) SDK 等方式來(lái)讓告警平臺(tái)統(tǒng)一收集項(xiàng)目運(yùn)行時(shí)的各個(gè)指標(biāo),比如機(jī)器負(fù)載、網(wǎng)絡(luò)負(fù)載、異常信息等。

監(jiān)控告警平臺(tái)提供配置界面,可以靈活地配置告警規(guī)則,比如 1 分鐘內(nèi)收集到 2 個(gè)報(bào)錯(cuò)就發(fā)郵件告警、收集到 5 個(gè)報(bào)錯(cuò)就發(fā)短信等。

完善的監(jiān)控告警平臺(tái)還能夠?qū)v史告警信息進(jìn)行管理和詳情查看,以及可視化展示各指標(biāo)圖表等。不僅減少了我們開發(fā)時(shí)的工作量,也能幫助我們更快地分析和排錯(cuò)。

Zabbix 是比較知名的開源監(jiān)控解決方案,幾乎能對(duì)任何 IT 基礎(chǔ)架構(gòu)、服務(wù)、應(yīng)用程序和資源進(jìn)行監(jiān)控和告警,全面且專業(yè)。

15. 日志平臺(tái)

通常,已上線的項(xiàng)目出現(xiàn)問題時(shí),我們會(huì)通過查看日志文件來(lái)定位和排查問題。

如果項(xiàng)目比較小,僅僅在單臺(tái)服務(wù)器上部署,那么只需要登錄這臺(tái)服務(wù)器,輸入命令來(lái)查看日志即可。

但團(tuán)隊(duì)的項(xiàng)目量級(jí)較大時(shí),通常會(huì)部署到多臺(tái)機(jī)器上,而且每臺(tái)機(jī)器上的日志量都非常大,以人工的方式一臺(tái)臺(tái)登錄服務(wù)器,然后在數(shù)以萬(wàn)計(jì)的日志中去找到自己想要的關(guān)鍵信息,是非常低效又惡心的!

日志不講武德,可以搭建一個(gè)統(tǒng)一的日志平臺(tái)來(lái)治治它們。將各臺(tái)機(jī)器上分散的日志收集到日志平臺(tái),然后通過可視化的界面去集中管理和搜索日志,大大提升了查閱日志的效率和體驗(yàn)。

目前比較主流的技術(shù)是 Elastic StackElasticsearch + Logstash + Kibana + Filebeat) ,使用它可以搭建一套企業(yè)級(jí)日志平臺(tái),輕松管理上百萬(wàn)甚至是上億的日志數(shù)據(jù)。

16. 接口文檔平臺(tái)

現(xiàn)在很多的項(xiàng)目都采用前后端分離的方式進(jìn)行開發(fā),前端同學(xué)寫界面,后端同學(xué)提供接口。如果沒有一個(gè)規(guī)范的接口文檔,聲明每個(gè)接口的協(xié)議、請(qǐng)求參數(shù)、響應(yīng)參數(shù)等,很容易導(dǎo)致前端請(qǐng)求錯(cuò)誤。

傳統(tǒng)的方式是由后端同學(xué)手動(dòng)編寫接口文檔,接口改動(dòng)時(shí),文檔也要改動(dòng),非常低效且不利維護(hù)。

其實(shí),我們可以將接口文檔平臺(tái)化,通過 Swagger 等工具自動(dòng)生成精美的接口文檔網(wǎng)站,開發(fā)者還可以在網(wǎng)站上直接測(cè)試各個(gè)請(qǐng)求,告別了手動(dòng)編寫文檔的低效繁瑣,提升了開發(fā)和協(xié)作效率。

17. 接口測(cè)試平臺(tái)

測(cè)試是對(duì)研發(fā)質(zhì)量的保障。

我們寫完代碼后,不僅要在本地測(cè)試,還要在測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境、線上環(huán)境都進(jìn)行測(cè)試驗(yàn)證。項(xiàng)目越大,對(duì)測(cè)試的要求越高,也就越麻煩。

通常我們會(huì)使用 CurlPostman 等工具進(jìn)行接口測(cè)試,簡(jiǎn)單易用。但是有些時(shí)候,本地網(wǎng)絡(luò)(公網(wǎng))和測(cè)試環(huán)境(內(nèi)網(wǎng))的網(wǎng)絡(luò)不互通怎么辦?

可以在團(tuán)隊(duì)內(nèi)部搭建接口測(cè)試平臺(tái)。提供一個(gè) web 界面,無(wú)需下載任何軟件,就可以輕松地創(chuàng)建各種接口測(cè)試,編寫各種測(cè)試用例,創(chuàng)建測(cè)試計(jì)劃。最棒的是還能切換不同的測(cè)試環(huán)境,以及多人共享測(cè)試等等。大大提高了測(cè)試效率和質(zhì)量。

18. 即時(shí)協(xié)作

天下武功,無(wú)快不破。為追求更高的協(xié)作效率,可以使用一些即時(shí)協(xié)作工具。

比如在協(xié)作開發(fā)同一個(gè)項(xiàng)目時(shí),可以使用開發(fā)工具 VscodeVS Live Share 插件,支持多人連線,團(tuán)隊(duì)成員可以同時(shí)對(duì)文件進(jìn)行編輯,甚至還能看到對(duì)方的光標(biāo)!

在多人編寫同一個(gè)文檔或表格時(shí),可以使用騰訊文檔,實(shí)時(shí)看到其他成員的光標(biāo)位置和對(duì)文檔的改動(dòng),尤其是在開會(huì)時(shí),這個(gè)功能將非常有用。

使用即時(shí)協(xié)作平臺(tái)不僅可以提升效率,還能以最快的速度發(fā)現(xiàn)沖突,發(fā)現(xiàn)有人正在寫爛代碼可以直接打字提示他。

19. 團(tuán)隊(duì)知識(shí)庫(kù)

團(tuán)隊(duì)在開發(fā)項(xiàng)目的過程中,肯定會(huì)產(chǎn)生很多有用的知識(shí),比如技術(shù)選型過程、線上事故的分析處理過程、技術(shù)文檔、產(chǎn)品文檔、業(yè)務(wù)介紹等。這些知識(shí)是團(tuán)隊(duì)成員共同積累的財(cái)富,日后可能要給其他同學(xué)閱讀學(xué)習(xí),因此必須妥善保存。

以前的做法是,大家把想共享的文件傳到一個(gè)公共的網(wǎng)盤中,需要時(shí)下載到自己的電腦上。當(dāng)網(wǎng)盤的文件更新時(shí),還要再重復(fù)下載,非常地低效。

現(xiàn)在的項(xiàng)目團(tuán)隊(duì),一般都有自己的團(tuán)隊(duì)知識(shí)庫(kù),通常是云端網(wǎng)站的形式,所有的成員可以在知識(shí)庫(kù)中上傳想要保存和分享的文檔,也可以直接在知識(shí)庫(kù)中編寫文檔。想要學(xué)習(xí)知識(shí)的同學(xué)直接登錄知識(shí)庫(kù)網(wǎng)站,搜索文檔即可,還能夠?qū)?yōu)秀的文檔進(jìn)行收藏。

團(tuán)隊(duì)知識(shí)庫(kù)不僅能夠更好地維護(hù)和沉淀團(tuán)隊(duì)的知識(shí),還能提升大家編寫和閱讀文檔的效率,更好地進(jìn)行知識(shí)協(xié)作共享。

比較不錯(cuò)的在線團(tuán)隊(duì)知識(shí)庫(kù)有阿里語(yǔ)雀、騰訊樂享、Wiki、Confluence 等。

語(yǔ)雀知識(shí)庫(kù)

20. 進(jìn)程監(jiān)控

有時(shí),我們線上運(yùn)行的項(xiàng)目進(jìn)程可能因?yàn)槟承┮馔舛顺觯覜]有被任何人及時(shí)發(fā)現(xiàn),這可能會(huì)對(duì)團(tuán)隊(duì)造成巨大的損失。

為了保證線上項(xiàng)目的高可用,可以開啟進(jìn)程監(jiān)控,當(dāng)項(xiàng)目進(jìn)程退出時(shí),自動(dòng)重啟該進(jìn)程并且向負(fù)責(zé)人發(fā)送告警,一定程度上減少了事故的影響,也省去了手動(dòng)重啟進(jìn)程的操作。

可以自己編寫進(jìn)程監(jiān)控腳本,也可以使用一些現(xiàn)成的監(jiān)控程序,比如 SupervisorMonit 等。

Monit 監(jiān)控

21. 前端監(jiān)控統(tǒng)計(jì)

前端監(jiān)控主要包括對(duì)頁(yè)面的性能監(jiān)控、錯(cuò)誤監(jiān)控和用戶行為監(jiān)控。對(duì)于 C 端項(xiàng)目而言,前端監(jiān)控非常重要。通過性能監(jiān)控,可以分析頁(yè)面性能的不足,優(yōu)化頁(yè)面,提升用戶體驗(yàn)。通過錯(cuò)誤監(jiān)控,可以在用戶進(jìn)行某些誤操作時(shí)第一時(shí)間通知到項(xiàng)目負(fù)責(zé)人,并進(jìn)行相應(yīng)的處理。通過行為監(jiān)控,可以獲取 UV、PV、IP、點(diǎn)擊流等等,從而分析用戶的使用習(xí)慣,改進(jìn)產(chǎn)品。

如果沒有前端監(jiān)控平臺(tái),開發(fā)者要自己收集各用戶行為指標(biāo),且只能通過不斷地測(cè)試來(lái)分析頁(yè)面性能的不足,會(huì)產(chǎn)生很多額外的工作量。

有很多現(xiàn)成的前端監(jiān)控平臺(tái),比如百度統(tǒng)計(jì)、專注錯(cuò)誤監(jiān)控的 Sentry、騰訊的 Aegis 等,直接申請(qǐng)賬號(hào)接入即可,省去了自己搭建的麻煩。

百度統(tǒng)計(jì)

22. 任務(wù)調(diào)度平臺(tái)

在日常開發(fā)中,少不了執(zhí)行定時(shí)任務(wù),比如每天檢測(cè)數(shù)據(jù)是否正常、定時(shí)發(fā)送郵件、同步數(shù)據(jù)等。如果把這些任務(wù)都寫死在代碼中去執(zhí)行,即使用一些定時(shí)任務(wù)框架,當(dāng)任務(wù)多了,也會(huì)變得難以管理。而且無(wú)法控制任務(wù)的執(zhí)行狀態(tài),還有可能導(dǎo)致一些單次任務(wù)的重復(fù)執(zhí)行,造成風(fēng)險(xiǎn)!

因此,需要統(tǒng)一的任務(wù)調(diào)度平臺(tái)來(lái)管理任務(wù)。可以通過平臺(tái)界面實(shí)時(shí)查看各任務(wù)的執(zhí)行情況,還能夠靈活地控制任務(wù)的啟停、執(zhí)行參數(shù)、超時(shí)時(shí)間等。甚至可以將任務(wù)調(diào)度到多臺(tái)機(jī)器同時(shí)執(zhí)行。降低風(fēng)險(xiǎn)的同時(shí)提升了管理定時(shí)任務(wù)的效率。

有一些優(yōu)秀的開源任務(wù)調(diào)度平臺(tái)如 Elastic JobXXL-JOB,可以直接搭建使用。

XXL 任務(wù)調(diào)度平臺(tái)

23. 配置中心

任何項(xiàng)目都離不開配置,比如數(shù)據(jù)庫(kù)連接密碼、第三方服務(wù)調(diào)用地址等。

如果把配置都寫死在代碼中,或者是項(xiàng)目包里的配置文件中,當(dāng)配置需要修改時(shí),我們就不得不修改項(xiàng)目文件,提交代碼,重新打包,再發(fā)布上線,非常麻煩。

而且有些時(shí)候,由于多個(gè)項(xiàng)目使用了相同的配置,在改動(dòng)一行配置時(shí),可能要去修改多個(gè)項(xiàng)目,不僅麻煩,而且存在漏改的風(fēng)險(xiǎn)。

因此,我們需要一個(gè)配置中心來(lái)集中管理那些經(jīng)常變化的、同時(shí)被多個(gè)項(xiàng)目使用的配置。

比較好用的配置中心有攜程的 Apollo、阿里的 Nacos 等,可以直接在界面上創(chuàng)建和發(fā)布配置,還能對(duì)配置進(jìn)行版本控制,靈活地升級(jí)和回退。使用配置中心能夠提升配置管理的效率,同時(shí)避免重復(fù)地改動(dòng)項(xiàng)目的配置文件。

攜程 Apollo 配置中心

24. 鏈路追蹤

假設(shè)我們的項(xiàng)目中有一個(gè)功能依賴多個(gè)第三方接口,該功能的平均執(zhí)行時(shí)間是 50ms。

/**
?*?獲取用戶詳情(依賴三個(gè)接口)
?*/

function?getUserDetail()?{
??let?user?=?getUserById();?//?得到用戶基本信息?10ms?
??user.account?=?getUserAccount();?//?得到賬戶信息?20ms
??user.idcard?=?getUserIdCard();?//?得到用戶身份證信息?20ms
??return?user;
}

結(jié)果有一天,這個(gè)功能執(zhí)行超過了 10 分鐘!那怎么排查出是哪個(gè)第三方接口出現(xiàn)了問題呢?

當(dāng)出現(xiàn)復(fù)雜的調(diào)用關(guān)系時(shí),我們可以使用鏈路追蹤系統(tǒng),通過給每個(gè)請(qǐng)求環(huán)節(jié)綁定唯一 id 并上報(bào)時(shí)間的方式串聯(lián)起整條調(diào)用鏈路。在鏈路追蹤系統(tǒng)提供的界面可以輕松地查看整個(gè)請(qǐng)求的調(diào)用過程,能夠幫助我們更快地定位請(qǐng)求中的問題,優(yōu)化接口的性能。

SkyWalking 鏈路追蹤系統(tǒng)

25. 容器管理平臺(tái)

以前,團(tuán)隊(duì)的項(xiàng)目都是直接部署在服務(wù)器上,簡(jiǎn)單粗暴。但是隨著時(shí)間的推移,項(xiàng)目會(huì)越來(lái)越大,最終成長(zhǎng)為一個(gè)巨石應(yīng)用。

滾雪球

隨著云計(jì)算、容器、微服務(wù)等技術(shù)的發(fā)展,對(duì)于一些大型的巨石項(xiàng)目,我們可以將其拆分為獨(dú)立的微服務(wù),部署在一個(gè)個(gè)相互隔離的容器中。容器就像一位少女,輕量、優(yōu)雅而迅速。

一個(gè)項(xiàng)目可能需要同時(shí)部署多個(gè)容器,我們需要對(duì)這些容器進(jìn)行管理和資源的分配。而容器比服務(wù)器的粒度更細(xì),數(shù)量可能是機(jī)器數(shù)的幾倍,手動(dòng)去管理他們是很難的。

Docker 容器

因此我們需要容器管理平臺(tái),統(tǒng)一管理容器,自動(dòng)分配資源,并根據(jù)容器的資源占用情況進(jìn)行彈性伸縮,極大地提升運(yùn)維效率。

K8S(Kubernetes)可以說是最知名的容器管理平臺(tái)了,很多大公司也都提供容器管理平臺(tái)的云服務(wù),可以直接接入。

K8S

26. 中臺(tái)

問個(gè)問題,如果讓你連續(xù)開發(fā) 5 個(gè)電商系統(tǒng),當(dāng)你開發(fā)第 6 個(gè)電商系統(tǒng)的時(shí)候,你會(huì)怎么做呢?

肯定要將前 5 個(gè)電商系統(tǒng)中能用上的代碼粘貼過來(lái)對(duì)吧!

如果你意識(shí)到重復(fù)開發(fā)的麻煩,你就知道有一個(gè)中臺(tái)會(huì)多香了,說是提升百倍效率一點(diǎn)也不夸張!

中臺(tái)的概念近幾年來(lái)在國(guó)內(nèi)十分火熱,可以簡(jiǎn)單地理解為被很多系統(tǒng)共用的中間件的集合。

中臺(tái)又分為業(yè)務(wù)中臺(tái)、技術(shù)中臺(tái)、數(shù)據(jù)中臺(tái)、組織中臺(tái)等。就拿業(yè)務(wù)中臺(tái)來(lái)說,就是抽象傳統(tǒng)的業(yè)務(wù)場(chǎng)景,把后臺(tái)的火藥等資源整合成前臺(tái)打仗需要的炮彈,隨取隨用。

回到上述問題,我們是不是可以將前 5 個(gè)電商系統(tǒng)中用到的技術(shù)和工具,抽象成一個(gè)中臺(tái)呢?

中臺(tái)出現(xiàn)之前,由于團(tuán)隊(duì)的分散,我們總是在重復(fù)建設(shè)一個(gè)又一個(gè)的輪子。而如今,幾乎所有的互聯(lián)網(wǎng)巨頭都在建設(shè)自己的中臺(tái),比如支付中臺(tái)、直播中臺(tái)、電商中臺(tái)等。如果要開發(fā)一個(gè)新的系統(tǒng),我們根本不用從零開始,直接使用中臺(tái)資源就能很方便地完成,很快啊!

27. 腳本管理

在開發(fā)中,我們經(jīng)常需要編寫一些腳本(可以將腳本理解為簡(jiǎn)單的程序),來(lái)幫助我們更快捷地完成某項(xiàng)任務(wù)。

比如我們要去重啟一個(gè)進(jìn)程,需要執(zhí)行關(guān)閉進(jìn)程、清理文件、啟動(dòng)進(jìn)程三個(gè)步驟,可能要輸入很多行命令才能完成。

do?stop
do?clear
do?start

不妨直接將三個(gè)步驟的命令塞到一個(gè) shell 腳本文件里,再次重啟進(jìn)程時(shí),只需要一行命令就行了,很快啊!

./restart.sh

但如果我們想在其他的系統(tǒng)上多次使用這個(gè)腳本,怎么辦呢?是把編寫好的腳本放在自己的電腦上,還是直接扔到服務(wù)器上呢?

更好的方式是使用腳本管理平臺(tái),團(tuán)隊(duì)成員可以將自己編寫的各種語(yǔ)言的腳本都發(fā)布到該平臺(tái)上,想在其他系統(tǒng)或服務(wù)器中使用該腳本時(shí),直接請(qǐng)求腳本的在線鏈接,腳本將自動(dòng)下載、執(zhí)行和清理。

腳本管理平臺(tái)尤其適合運(yùn)維同學(xué)使用,某種程度上也是通過自動(dòng)化提升了效率。

28. 可視化數(shù)據(jù)管理

團(tuán)隊(duì)開發(fā)肯定離不開數(shù)據(jù)庫(kù),并發(fā)量高一點(diǎn)還需要使用緩存、消息隊(duì)列等中間件。

無(wú)論是本地開發(fā),還是在測(cè)試、線上環(huán)境驗(yàn)證,我們都經(jīng)常需要查看數(shù)據(jù)庫(kù)或者緩存里的數(shù)據(jù)是否正確。最直接了當(dāng)?shù)姆椒ň褪谴蜷_小黑框,用官方提供的命令行連接數(shù)據(jù)庫(kù),然后輸入查詢命令去查看,這也是很多高級(jí)工程師現(xiàn)在還在堅(jiān)持的做法,因?yàn)橛?B 格。

但是,如果用了分庫(kù)分表技術(shù),一份完整的數(shù)據(jù)被分散到多個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表中,使用命令行來(lái)查看就比較麻煩。因此,我們需要可視化的數(shù)據(jù)管理平臺(tái),比較常用的是本地軟件 Navicat、JetBrains DataGrip 等。

為了更方便地管理數(shù)據(jù),團(tuán)隊(duì)內(nèi)部還可以搭建在線的可視化數(shù)據(jù)管理平臺(tái),比如面向 MySQL 數(shù)據(jù)庫(kù)的 phpMyAdmin,開發(fā)者無(wú)需在本地安裝任何軟件,直接打開網(wǎng)站,輸入密碼,就能夠?yàn)g覽和操控?cái)?shù)據(jù)啦!

phpMyAdmin 數(shù)據(jù)庫(kù)管理

29. 項(xiàng)目管理

提到項(xiàng)目管理,大家可能覺得和技術(shù)研發(fā)同學(xué)沒什么關(guān)系,其實(shí)不然。

通過項(xiàng)目管理平臺(tái),我們能夠看到每個(gè)需求的優(yōu)先級(jí)和排期,可以合理規(guī)劃自己的研發(fā)安排,掌控進(jìn)度。有重要的信息,也可以貼到需求詳情下,相對(duì)正式,能夠及時(shí)同步到所有需求的參與者,規(guī)避一些風(fēng)險(xiǎn)。

而如果沒有項(xiàng)目管理平臺(tái),對(duì)需求進(jìn)度沒有一個(gè)好的把握,說不定摸魚就摸過頭了。

有很多開箱即用的項(xiàng)目管理平臺(tái),比如 TAPDJira

30. 企業(yè)通訊

通訊軟件是團(tuán)隊(duì)溝通協(xié)作、高效辦公的靈魂,比如騰訊的企業(yè)微信、阿里的釘釘、字節(jié)跳動(dòng)的飛書。

這些企業(yè)通訊軟件早就不只是支持團(tuán)隊(duì)即時(shí)溝通的工具了,而是大而全的企業(yè)辦公門戶。

像騰訊的企業(yè)微信,集成了文檔、待辦、會(huì)議、通訊錄、工作臺(tái)、云盤、電話等辦公必備的工具,成員可以通過軟件快速地找到并使用這些功能,大大提高了辦公效率。還可以在通訊軟件中設(shè)置機(jī)器人,實(shí)現(xiàn)業(yè)務(wù)的自動(dòng)告警。

以上就是魚皮分享給大家的錦囊啦。

其實(shí),大廠中還有很多提升研發(fā)效能的技術(shù),比如流量回放、壓測(cè)平臺(tái)、試驗(yàn)系統(tǒng)、故障演練系統(tǒng)等,這里就不一一介紹了。

此外,每個(gè)團(tuán)隊(duì)負(fù)責(zé)的業(yè)務(wù)不同、情況不同,也都會(huì)有提升自己研發(fā)效能的獨(dú)門秘技,要根據(jù)實(shí)際的場(chǎng)景去選用技術(shù),否則可能適得其反。

希望大家能利用好現(xiàn)有的技術(shù)、發(fā)掘新的技術(shù),不斷提升研發(fā)效能,感受技術(shù)帶來(lái)的美好。


30個(gè)提升團(tuán)隊(duì)研發(fā)效能的錦囊的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
海阳市| 刚察县| 黔江区| 南雄市| 琼海市| 得荣县| 筠连县| 米泉市| 南郑县| 张家港市| 加查县| 故城县| 丹棱县| 清苑县| 新干县| 辽阳县| 托里县| 钟山县| 栖霞市| 清远市| 东丰县| 麻栗坡县| 麻城市| 长沙市| 兴隆县| 梁河县| 东山县| 五台县| 宜君县| 高安市| 文水县| 东光县| 济阳县| 隆德县| 萝北县| 綦江县| 体育| 双鸭山市| 武威市| 阿尔山市| 年辖:市辖区|