自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員如何高效地進(jìn)行開發(fā)工作?Facebook的10x效率,了解一下

新聞 前端
比較流行的一個(gè)說法是 10x 程序員,也就是 10 倍程序員,意思是一個(gè)好的程序員,工作效率可以達(dá)到普通程序員的 10 倍。要做到這一點(diǎn)并不容易,我們需要在編程技術(shù)、工作方式、工具使用等方面全面提高。

 程序員如何高效地進(jìn)行開發(fā)工作?

[[318134]]

最近比較流行的一個(gè)說法是 10x 程序員,也就是 10 倍程序員,意思是一個(gè)好的程序員,

工作效率可以達(dá)到普通程序員的 10 倍。要做到這一點(diǎn)并不容易,我們需要在編程技術(shù)、工作方式、工具使用等方面全面提高。

第一條原則:抽象和分而治之

[[318135]]

拿到一個(gè)任務(wù)之后,我們要做的首先就是進(jìn)行模塊的定義,也就是抽象,然后對(duì)其分而治之

為方便理解,我再和你分享一個(gè)在 Facebook 時(shí),幾個(gè)前后端開發(fā)者同時(shí)開發(fā)一個(gè)功能的案例吧。

[[318136]]

這個(gè)功能由一個(gè)前端開發(fā)者和兩個(gè)后端開發(fā)者完成,整個(gè)研發(fā)過程至少涉及 3 個(gè)抽象和分而治之的操作:第一步,前后端模塊進(jìn)行自然的拆分。這時(shí),前后端開發(fā)者一定會(huì)一塊兒認(rèn)真討論,明確前后端代碼運(yùn)行時(shí)的流程,后端需要提供的 API,以及交付這些 API 的時(shí)間。

第二步,兩個(gè)后端開發(fā)者對(duì)后端工作進(jìn)行拆分,確定各自的工作任務(wù)和邊界。

第三步,每個(gè)開發(fā)者對(duì)自己負(fù)責(zé)的部分再進(jìn)行抽象和拆分。

在這個(gè)過程中,一定要明確模塊之間的依賴關(guān)系,盡快確定接口規(guī)格和可調(diào)用性。比如,在前后端的拆分中,常常會(huì)采用這幾個(gè)步驟處理 API:

1. 前后端開發(fā)者一起討論,明確需要的 API。

2. 后端人員會(huì)先實(shí)現(xiàn) API 的 Mock,返回符合格式規(guī)范的數(shù)據(jù)。在這個(gè)過程中,后端開發(fā)者會(huì)盡快發(fā)出代碼審查的要求給另一個(gè)后端和前端開發(fā)者,以確保格式正確。

3. Mock 實(shí)現(xiàn)之后盡快推到主倉(cāng)的 master 上 (也就是 origin/master),并盡快將其部署到內(nèi)部測(cè)試環(huán)境,讓前端開發(fā)者可以使用內(nèi)部測(cè)試環(huán)境進(jìn)行開發(fā)和調(diào)試。

4. 這些 API 還不能面對(duì)用戶,通常會(huì)先使用功能開關(guān)讓它只對(duì)公司開發(fā)人員可見。這樣的話,即使 API 的代碼在 origin/master 上部署到了生產(chǎn)環(huán)境,也不會(huì)對(duì)用戶產(chǎn)生影響。

通過這樣的操作,前后端的任務(wù)拆分就順利完成了。

提高抽象和分而治之效率的一個(gè)技巧是,在設(shè)計(jì)代碼架構(gòu)時(shí)注意尋找合適的設(shè)計(jì)模式。

設(shè)計(jì)模式指的是,設(shè)計(jì)過程中可以反復(fù)使用的、可以解決特定問題的設(shè)計(jì)方法,最經(jīng)典的莫過于《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》中列舉的 23 個(gè)設(shè)計(jì)模式,以及針對(duì)企業(yè)軟件架構(gòu)的《企業(yè)應(yīng)用架構(gòu)模式》。同時(shí),我們還要注意公司內(nèi)部具體的常用模式。這些模式都是經(jīng)實(shí)踐檢驗(yàn)有效的,且傳播較廣容易理解,都可以作為你進(jìn)行模塊拆分的參照。

具體實(shí)現(xiàn)功能的過程中,也會(huì)處處體現(xiàn)分而治之的思想。最主要的一個(gè)表現(xiàn)是,每個(gè)開發(fā)者都會(huì)把自己的代碼盡量做到原子性。代碼的原子性指的是,一個(gè)提交包含一個(gè)不可分割的特性、修復(fù)或者優(yōu)化。

在實(shí)際工作中,功能往往比較大。如果只用一個(gè)提交完成一個(gè)功能,那這個(gè)提交往往會(huì)比較大,所以我們需要把這個(gè)功能再拆分為子功能。

比如,某個(gè)后端 API 的實(shí)現(xiàn),我們很可能會(huì)把它拆分成數(shù)據(jù)模型和 API 業(yè)務(wù)兩部分,但如果這樣的提交還是太大的話,可以進(jìn)一步將其拆小,把 API 業(yè)務(wù)再分為重構(gòu)和添加新業(yè)務(wù)兩部分。

總之,我們的目的是讓每個(gè)提交都做成能夠獨(dú)立完成一些任務(wù),但是又不太大。一般來(lái)說,一個(gè)提交通常不超過 800 行代碼。

第二條原則:快速迭代

[[318137]]

第一,不要追求完美,不要過度計(jì)劃,而是要盡快實(shí)現(xiàn)功能,通過不斷迭代來(lái)完善。優(yōu)秀的

架構(gòu)往往不是設(shè)計(jì)出來(lái)的,而是在實(shí)現(xiàn)過程中逐步發(fā)展、完善起來(lái)的。

Facebook 有一條常見的海報(bào)標(biāo)語(yǔ),叫作“Done is better than perfect”,意思就是完成比完美要重要。要實(shí)現(xiàn)快速迭代,我們?cè)谠O(shè)計(jì)和實(shí)現(xiàn)功能時(shí)都要注意簡(jiǎn)單化。

有些開發(fā)者過于追求技術(shù),投入了大量時(shí)間去設(shè)計(jì)精美、復(fù)雜的系統(tǒng)。這樣做沒有問題,但

一定要有一個(gè)度,切忌殺雞用牛刀。因?yàn)閺?fù)雜的系統(tǒng)雖然精美,但往往不容易理解,維護(hù)成

本也比較高,修改起來(lái)更是不容易。

所以,我們?cè)?Facebook 進(jìn)行開發(fā)的時(shí)候,盡量使用簡(jiǎn)單實(shí)用的設(shè)計(jì),然后快速進(jìn)行版本

迭代。

第二,在設(shè)計(jì)的實(shí)現(xiàn)中,盡量讓自己的代碼能夠盡快運(yùn)行起來(lái),從而盡快地驗(yàn)證結(jié)果。我們

常常會(huì)先實(shí)現(xiàn)一個(gè)可以運(yùn)行起來(lái)的腳手架,然后再持續(xù)地往里面添加內(nèi)容。

在工作中,因?yàn)橥窃谝粋€(gè)比較大的系統(tǒng)里工作,不能很容易地運(yùn)行新代碼。這時(shí),我們可以編寫腳本或者單元測(cè)試用例來(lái)觸發(fā)新寫的代碼。通常情況下,我們更傾向于使用后者,

因?yàn)檫@些測(cè)試用例,在功能開發(fā)完成上線之后,還可以繼續(xù)用于保證代碼質(zhì)量。

在我看來(lái),在開發(fā)過程中,能觸發(fā)新寫的代碼幫助我開發(fā),是單元測(cè)試的一個(gè)重要功能。

第三,為了能夠快速進(jìn)行驗(yàn)證,一個(gè)重要實(shí)踐是設(shè)置好本地的代碼檢驗(yàn),包括靜態(tài)掃描、相關(guān)單元測(cè)試的方便運(yùn)行,以及 IDE 能夠進(jìn)行的實(shí)時(shí)檢查等。

第四,代碼寫好之后,盡快提交到主代碼倉(cāng)并保證不會(huì)阻塞其他開發(fā)人員。實(shí)際上,這是代碼提交原子性的另外一個(gè)重要特點(diǎn),即代碼提交的原子性,可以保證主代碼倉(cāng)在理論上能夠隨時(shí)基于 master 分支上的任何提交,構(gòu)建出可以運(yùn)行的、直接面對(duì)用戶的產(chǎn)品。在這種方式下,每個(gè)開發(fā)者在任何時(shí)候都可以基于 origin/master 進(jìn)行開發(fā),從而確保 Facebook 幾千人共主干開發(fā)時(shí)分而治之能夠順利進(jìn)行。

關(guān)于實(shí)現(xiàn)代碼提交的原子性,我還有一個(gè)小技巧,就是如果當(dāng)前編寫的代碼提交實(shí)在不方便馬上推送到 origin/master 分支上,我們也可以頻繁地 fetch origin/master 的代碼到本地,并在本地對(duì) orgin/master 進(jìn)行 rebase 來(lái)解決沖突。這樣就可以確保,我們開發(fā)的代碼是基于最新的主倉(cāng)代碼,從而降低代碼完成之后 push 時(shí)沖突的可能性。

第三條原則:不要做重復(fù)的事情

[[318138]]

不做重復(fù)的事情,是很多開發(fā)模式的基礎(chǔ),也是我們非常熟悉的一條開發(fā)原則了。比如,我們把一段經(jīng)常使用的代碼封裝到一個(gè)函數(shù)里,在使用它的地方直接調(diào)用這個(gè)函數(shù)。

代碼邏輯的重復(fù),不僅僅是工作量的浪費(fèi),還會(huì)大大降低代碼的質(zhì)量和可維護(hù)性。所以,我們?cè)陂_發(fā)時(shí),需要留意重復(fù)的代碼邏輯,并進(jìn)行適當(dāng)?shù)奶幚怼?/p>

具體來(lái)說,首先是尋找重復(fù)的邏輯和代碼。在動(dòng)手實(shí)現(xiàn)功能之前,我們會(huì)花一些時(shí)間在內(nèi)部代碼倉(cāng)和知識(shí)庫(kù)中進(jìn)行查找,尋找是否有類似的功能實(shí)現(xiàn),以及一些底層可以復(fù)用的庫(kù),過程中也可以直接聯(lián)系類似功能的實(shí)現(xiàn)者進(jìn)行討論和尋求幫助。另外,有一些 IDE,比如Intellij IDEA,可以在編碼的過程中自動(dòng)探測(cè)項(xiàng)目中可能的代碼重復(fù)。

找到重復(fù)的邏輯和代碼之后,主要的處理方式是,把共同的部分抽象出來(lái),封裝到一個(gè)模塊、類或者函數(shù)等結(jié)構(gòu)中去。

如果在開發(fā)新功能時(shí)發(fā)現(xiàn)有需要重構(gòu)的地方,一個(gè)常見的有效辦法是,先用幾個(gè)提交完成重構(gòu),然后再基于重構(gòu)用幾個(gè)提交實(shí)現(xiàn)新功能。

 

責(zé)任編輯:張燕妮 來(lái)源: 今日頭條
相關(guān)推薦

2020-11-26 16:50:21

書籍拖延癥

2019-03-29 08:13:20

程序員編程互聯(lián)網(wǎng)

2019-12-09 16:18:08

程序員數(shù)據(jù)庫(kù)技術(shù)

2020-10-08 15:01:17

開發(fā)Java程序員

2021-07-19 05:53:32

程序員工作效率效率

2016-12-06 09:12:07

Java程序員

2020-10-10 11:43:29

Java開發(fā)代碼

2012-01-17 10:34:14

程序員

2012-07-16 00:51:36

程序員效率

2014-07-14 11:28:41

2014-03-28 10:30:20

程序員碼農(nóng)

2024-12-05 13:50:33

Cursor人工智能代碼

2019-11-27 10:08:36

程序員技能開發(fā)者

2011-04-27 09:17:30

程序員

2020-09-22 07:33:03

開發(fā)技能代碼

2020-09-26 22:20:52

ML自動(dòng)機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2009-06-15 10:43:45

Java程序員Java程序GC

2014-03-14 10:13:33

程序員效率

2013-08-30 10:07:35

程序員工作效率

2016-03-07 11:09:00

.NET程序員開發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)