優秀架構師是如何學習開源項目的?

優秀架構師是如何學習開源項目的?

一、前言

大家好,我是架構師楊波,大家都叫我波波老師。

波波可以說是一個不折不扣的開源愛好者,在一線企業工作時,波波就花費大量的時間和精力,研究和學習開源代碼。即便現在轉入技術培訓行業,波波仍然會花大量時間,研究github上的開源項目。另外,波波業餘時間也開發一些開源小項目。可以這樣說,波波今天之所以能夠成長爲一個資深軟件架構師,開源項目對我的幫助是非常大的。

近年,波波在極客時間上輸出一些技術課程,這些課程大部分都是基於開源項目開發的。輸出過程中,經常有學員會問我該如何高效學習開源項目的問題。爲了解答學員的疑問,基於自己這十幾年來學習開源項目的經驗,我總結出了學習開源項目的一個方法論。這個方法論包括6個層次和8大方法,下面是這個方法論的一個總結表格:
(img-PSXh8Xwq-1593069936261)(images/summary.png)]

上面的表格中的內容很多,可能一下子看不明白,不用着急,波波後面會依次講解每一種方法。而且在每一種方法中,我都會給出項目案例,其中還包括行業優秀的工程師/架構師,學習開源項目的一些方法和思路。

二、方法

方法1 ~ 直接看源碼

我們先來看第一層的方法1,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jdRVvFtO-1593069936264)(images/method1.png)]

方法1很好理解,就是直接看源碼,當然也包括看文檔,還有跑跑樣例代碼。

如果項目代碼本身比較簡單,完全可以直接看代碼。舉個例子,波波最近正在開發一門《分佈式系統案例課》,期間需要深入研究一下一致性Hash算法。於是,我就在github上找了一個項目[鏈接見上圖]~一個用Java開發的一致性Hash算法的演示項目。這個項目比較簡單,源代碼就沒有幾個,當然直接看代碼,再跑跑樣例就可以理解了。

方法1一般是沒有直接產出的。當然,在工作或學習中,最好還是帶着實際問題去看代碼,理解了代碼再回頭來解決實際問題,相當於有一個產出。這樣可以形成一個閉環,提升學習效果。如果你沒有問題,直接純看代碼學習,效果會差很多。

方法1處在第1層,最簡單,學習效果一般,能學到的主要就是源代碼閱讀能力。爲了和後面的方法做比較,我把方法1的學習效果假定爲1~2,作爲一個基準學習效果。

方法2 ~ 整理源代碼

方法2叫整理源代碼,它更進一步到第2層,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yQSmUM4x-1593069936267)(images/method2.png)]

怎麼理解呢方法2呢?其實它指的是將開源項目的源代碼統統整理一遍,包括將包名都改掉,並且編譯、測試和運行通過。

方法2是波波研究開源項目代碼的習慣。舉個例子,前段時間我要學習一下Spring Boot項目開發,於是我就在github上找到了一個叫spring-petclinic(寵物醫院)的項目[鏈接見上圖]。spring-petclinic是一個經典的Spring框架演示項目,它正好有一個Spring Boot的版本。爲了深入學習這個項目,我把它的整個源碼都整理了一遍,包括將包名全部改成com.spring2go,有些地方的代碼還做了調整和簡化。然後,我把項目調試運行通過。最後,我還把整理過的代碼放在了我的github/spring2go站點上[鏈接見上圖]。

如果你不對外輸出分享的話,方法2一般也是沒有直接產出的。通過方法2,你可以獲得細粒度的源碼閱讀和調試技能,因爲你必須一行行整理代碼,包括單元測試,並且還要調試運行通過。這個做法比簡單看代碼的粒度肯定更細,學習效果也更好,可以算2~3的效果。當然,方法2耗費時間也更多。

方法3 ~ 整理+輸出分享

方法3叫整理+輸出分享,它更進一步到第3層,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-f2fxFXIx-1593069936271)(images/method3.png)]

方法3是指在方法2整理過源代碼的基礎上,總結梳理出源碼分析或者架構設計類的文檔或PPT或視頻,在公司或者社區分享。

方法3也是波波閱讀開源項目代碼的習慣,之前在企業是這樣,現在做課程輸出也是這樣。舉個例子,波波前段時間要重溫一下Spring Cloud微服務技術棧,於是我就在github上找到一個叫spring-petclinic-microservices的項目[鏈接見上圖],它是spring-petclinic項目的微服務版。爲了深入學習這個項目,我先用方法2,把整個項目的源碼整理了一遍,並輸出在我的github/spring2go站點上[鏈接見上圖]。然後,我自己錄製了一個視頻課程,名稱《Spring Cloud微服務應用》,並且把整個視頻分享在我的B站空間上[鏈接見上圖]。這個工作做完,我不僅加深了對Spring Cloud相關技術棧和框架的理解,同時還產出了兩樣東西,一個項目源碼+一個視頻課程,這兩樣東西最後變成了我的個人積累和沉澱。

再舉一個方法3的例子。我之前在拍拍貸擔任技術總監的時候,期間招聘了一些應屆畢業生。作爲培訓和個人學習習慣培養的一部分,我要求他們每月寫一篇源碼分析或者技術學習類文章,並且發表在團隊的技術博客上[鏈接見上圖],並且這些文章輸出是計入績效考覈的。我認爲,早期對工程師的定期輸出習慣的培養是非常重要的。

方法3一般是有產出的,它的學習效果比方法2還要好,可以達到3~5的學習效果。因爲你有產出並且分享以後,就有機會獲得學習效果的反饋。這種反饋甚至是可以量化的,比方說github上項目的stars或者是issues,還有B站上視頻的點擊量、點贊數和評論等。這些反饋非常寶貴,可以幫助你優化改進你的學習。即便你只是在公司內部分享,同事一般也會給你反饋。另外,方法3不僅可以提升你的技術技能,同時可以提升你的整理、輸出和分享技能,甚至還有內容製作技能。比方說,通過B站視頻課程輸出,波波就初步掌握了視頻製作和編輯技能。這種內容製作和輸出技能,在當下社會同樣重要。

下面再講兩個來自YouTube,通過輸出分享提升個人技能的例子。這兩個例子和開源並不直接相關,但是同樣值得參考借鑑。

第一個例子來自一個叫Dylan Israel的美國人,他在Youtube上的頻道就叫Dylan Israel,主要內容是關於如何自學編程的。他本人不是科班出身,完全通過自學編程掌握技術。他主要通過美國的Code Cademy和FreeCodeCamp等站點學習技術,每次學習一門課程或技術,他就把自己學習的過程,以live coding(現場編程)的方式,製作成視頻,並分享在YouTube的個人頻道上。目前他在企業上班,年薪大致在美金6位數,業餘時間繼續搞他的Youtube頻道,既通過視頻輸出提升自己的技能,同時也分享編程技能。目前他的YouTube頻道有74.4k訂閱,也是不錯的。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YqtDiX42-1593069936272)(images/youtube_case1.png)]

第二個例子來自一個叫Caleb Curry的美國人,他在Youtube上的頻道就叫Caleb Curry,主要內容是關於編程語言學習的。Caleb學習編程語言的方式,就是每學習一種語言,就輸出一門該語言的視頻課程,並分享在YouTube上,也就是通過視頻輸出來提升學習效率。通過這種方式,經過超過6年的持續輸出,他目前已經掌握了幾乎所有主流的編程語言,包括Python/Java/C/C#/C++/JavaScript/SQL等。同時,他在YouTube上的視頻內容也變成了他的個人資產積累。目前,他的YouTube頻道有超過225k訂閱,在技術領域,這個訂閱量已經比較牛逼了。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LUvMVAxC-1593069936274)(images/youtube_case2.png)]

方法4 ~ 開發克隆版

下面是方法4,叫開發克隆版,它同樣在第3層,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iSpdIOw8-1593069936275)(images/method4.png)]

方法4指的是開發原項目的克隆版,這個和書籍翻譯有點類似,比方說,原項目是用go語言開發的,我就克隆出一個Java語言版,並且分享到開源社區。

方法4也是波波使用過的方法,學習效果也很不錯,當然耗費時間也更多。比方說,波波去年在極客時間上輸出了一門課程《Spring Boot與Kubernetes雲原生微服務實踐》,爲了開發這門課程,我在github上找到了一個叫Staffjoy的項目[鏈接見上圖]。Staffjoy是一個工時排班(scheduling)應用,原來是一家創業公司的SaaS產品,後來公司關閉就把項目給開源了。這個項目是用go語言開發的,採用微服務架構,總體質量還不錯(畢竟是創業公司面向企業的項目)。於是,我花了近2.5個月的時間,深入研究了這個項目的源碼,並且用Java/Spring技術對這個項目進行了克隆(也適當做了調整和簡化),最後開源在我的github/spring2go站點上[鏈接見上圖]。通過這次克隆,波波不僅進一步學習了Spring和微服務等技術,同時還產出了一個課程產品,當前在極客時間上已經有超過6k的訂閱量。

方法4的例子還有很多。比方說,業界知名的開源消息隊列Kafka,就有不少克隆版。其中有一個叫jafka[鏈接見上圖],它是在6~7年前,由一個叫Andy Liu的搜狐架構師開發的,波波6~7年前也學習過他的這個項目。因爲Kafka是Scala寫的,Andy Liu的就把它克隆成Java版,所以取名就叫jafka。Kafka本身還是比較複雜的,深入理解它的源碼並不容易,但是Andy Liu通過克隆的方式去學習kafka,同時還產出了一個jafka,可以認爲他已經完全深入理解和吸收了Kafka的源碼和設計。

還有一個項目叫jocko[鏈接參考上圖],它是Kafka的golang語言克隆版(不是簡單克隆,還做了簡化和優化),是由一個叫Travis Jeffery的老外開發的。jocko這個項目比較成功,目前在github上有3.9k星,在業界有不少公司在用。也就是說,通過jocko克隆項目,Travis Jeffery不僅深入理解了Kafka的源碼和設計,還給社區貢獻了價值。

另外,波波早年也曾嘗試開發過Kafak的簡化版,起名叫Luxun[鏈接參考上圖]。雖然這個項目沒有持續下去,但是經過這次克隆,波波也已經深入理解了Kafka的源碼和設計(早期0.7版本)。

方法4一定有克隆版產出,放在github上可以獲得社區反饋。通過對知名的、高質量的開源項目進行模仿克隆,不僅可以提升源碼閱讀的能力,同時可以快速提升技術和項目開發技能。總體上,方法4的學習效果可以達到5~10的水平。如果大家平時在公司沒有機會接觸到高質量/高價值的項目,那麼方法4,是波波推薦大家學習的一種方法。當然,具體去克隆項目的時候,你要量力而行,選擇適合自己當前技能水平的開源項目,因爲大部分成功的開源項目都非常複雜。

方法5 ~生產化落地

方法5叫生產化落地,它更進一步,達到第4層,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hLUUBwjH-1593069936276)(images/method5.png)]

方法5指的是在整理開源項目代碼和輸出分享的基礎上,再在企業生產級項目中進行落地,項目要承擔實際業務流量。後續根據業務需要,對項目進行進一步定製優化。甚至還可以再進一步,在完全吸收開源項目的基礎上,進行創新自研。

方法5的學習效果是非常好的,通過這個方法學到的東西,是在企業裏頭真刀真槍落地過的。一般通過企業級實戰項目獲得的經驗,都會令你終生難忘。波波之前在企業工作的過程中,多次採用方法5,落地過很多重要項目。

其中一個是攜程的Zuul網關項目。記得在2013年左右的時候,攜程就啓動了無線優先(Mobile First)戰略,在業務上獲得了巨大成功。但是剛開始,攜程的無線API是一個耦合的單體服務,前面是沒有網關,直接對外暴露服務的。爲了支持無線API的解耦拆分,我當時主導了攜程無線API網關的研發工作。那段時間,我曾經一度是Netflix開源文化的重度粉絲,花了大量時間研究Netflix的開源項目,其中包括Zuul網關。經過調研,我發現Zuul網關可以引入攜程,解決無線API解耦拆分的問題。於是,我花了大致半個月的時間,把Netflix Zuul網關源碼都整理了一遍(Zuul網關的源碼其實並不複雜,整理過的源碼可以參考上圖的鏈接),單元測試全部跑通,然後在技術部門做了關於Zuul網關的技術分享。之後,我們團隊就立項,正式啓動將Zuul網關引入攜程,並且最終在生產上成功落地下來。後續實踐證明,Zuul網關爲攜程無線API的解耦拆分,還有攜程後臺的微服務化,都立下了汗馬功勞。當然,在生產落地的過程中,根據攜程的具體業務需要,我們對Zuul網關的源碼(包括過濾器),都進行了深度定製。記得當時我們還專門開發了一個TCP版的Zuul網關,因爲攜程老的無線App是基於TCP協議定製的。經過這次大項目,我不僅深入理解了Zuul網關的設計和代碼,同時提升了生產級項目的落地能力。當然,我還給攜程貢獻了一個非常有價值的產品,這個產品目前還是攜程的核心基礎服務,承載超過每日百億級的API流量。

關於攜程Zuul網關的項目經驗,我後來總結在了《微服務架構實踐160講》這門課程當中。目前,這門課在極客時間上的訂閱量已經過萬。

類似的例子還有很多。比方說,當時爲了解決攜程微服務不穩定的問題,我還主導引入了Netflix的Hystrix開源限流熔斷組件。由於當時攜程的大部分微服務還是基於微軟.Net技術棧的,但原版的Hystrix是基於Java的,爲了能夠落地,我還是先把Hystrix的源碼整理+輸出/分享後,再帶領團隊研發了基於.Net版本的CHystrix產品[鏈接參考上圖],也獲得較大成功。

另外在拍拍貸的時候,在吸收了Kafka等主流消息隊列設計思想的基礎上,我帶領團隊研發了輕量級的PMQ消息系統,爲拍拍貸系統的解耦拆分和微服務化,打下了堅實基礎。PMQ是一個在吸收開源項目設計思路的基礎上,完全創新自研的產品。關於PMQ這個產品的設計和實踐經驗,我已經輸出在《分佈式系統案例》這門新課中。該課程剛剛在極客時間平臺上發佈,上線不到一週,已經有超過2千訂閱。

另外還有一個案例值得一提。我在攜程時有一個同事叫黃傑,他是專注監控領域的。在攜程的時候,他曾參與研發了攜程第一代的日誌/調用鏈/Metrics監控系統。後來他去了餓麼嗎,在餓了麼又落地了一整套應用監控系統,具體項目的細節可以參考他在QCon上的ppt分享[鏈接見上圖]。他的路子也是不斷吸收並生產化開源項目,他專門研究監控領域的項目,包括像CAT/OpenTSDB/InfluxDB還有Promethues等。他把這些主流開源項目的源碼都逐個研究透,然後找機會生產化,再不斷定製打磨。去年他還開源了自己的監控產品,叫LinDB。到現在,黃傑已經在監控領域打磨積累了近6年,可以毫不誇張的說,他已經是國內應用監控領域的頂級技術專家了。

生產化落地的學習效果是毋庸置疑的,如果有機會承擔公司級的核心項目,那麼對你的能力鍛鍊是全方位的,包括項目實戰落地能力,企業級源碼閱讀和定製能力等等。而且生產化落地一定有價值輸出,也一定會有用戶反饋(內部或者外部的),有反饋就有持續改進的機會。總之,生產化落地的學習效果可以>10,當然,具體大小要看項目在企業中的關鍵程度。

方法6 ~ 開發知識產品

方法6叫開發知識產品,它同樣在第四層,見下表:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SxCDNp1U-1593069936277)(images/method6.png)]

方法6指的是,在將開源項目代碼基本吸收的基礎上,開發出應用演示項目(或者克隆項目),並製作成知識付費產品(包括書籍或視頻等),發佈到知識付費平臺。

方法6是波波近年在探索的一種方法。比方說,對於前面方法4中提到的Staffjoy項目,在克隆和開源輸出的基礎上,我又設計和製作了一門叫《Spring Boot 與 Kubernetes 雲原生微服務實踐》的課程,講解如何基於Spring Boot和Kubernetes等技術,開發一個小規模的微服務應用。這門課程已經在極客時間平臺上輸出。這個工作做完,波波不僅在github上分享和沉澱了一個項目(目前有超過1k星),而且還輸出和沉澱了一個知識付費產品(目前有超過6k的訂購)。同時,在輸出的過程中,波波還初步掌握了知識付費產品的設計和開發技能,另外還初步接觸了市場研究、客服,還有營銷推廣等技術之外的新領域。

方法6還有一個比較有意思的案例,是一個叫新峯商城的開源項目[鏈接見上圖],它是一個叫13的高級工程師開發的。這是一個用SpringBoot開發的網上商城演示項目。作者不僅輸出了一個可供學習的開源項目,同時還輸出了兩個知識產品,一個是基於這個項目寫了一本付費教程,發佈在掘金小冊平臺上,目前已有9百多人購買;另外一個是他還基於這個項目開發了一個付費視頻教程,發佈在CSDN學院上,目前已經有超過萬人學習(注意這個不是實際購買量)。從這些項目和內容輸出可以看出,13不僅是一個具有技術研發能力,還是一個有產品和商業化頭腦的工程師。

方法6有知識產品輸出,可以獲得商業用戶的反饋,根據反饋可以持續改進學習。在知識產品輸出的過程中,作者不僅要主導產品的設計和開發,還要參與市場調研、客服和推廣等活動,幾乎可以看作是一種小規模的創業活動。這個過程對作者的能力鍛鍊也是全方位的,除了技術和項目開發能力,還包括知識產品的設計和開發能力,還有市場調研、客服和營銷推廣等技能。當然,還可以獲得一定的行業影響力。總體上,方法6的學習效果也是>10的。

方法7 ~ 開發自己的開源項目

方法7叫開發自己的開源項目,它屬於高級方法,達到第5層,如下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-34oTZ45i-1593069936277)(images/method7.png)]

方法7指的是,在吸收開源項目+企業實踐落地的基礎上,沉澱出自己的開源項目,並持續推動開源社區建設。

方法7的案例在歐美國家很普遍,在國內還不是很多,但是已經有一些冒芽案例。這些案例中的項目,主要由國內一些優秀的工程師/架構師推動。

第一個案例是宋順開發的Apollo微服務配置中心項目[鏈接見上圖],這個項目目前在github上已經有超過2萬多顆星,是一個非常成功的基礎中間件類項目。我的《微服務架構實踐160講》課程中,也專門有一章是講Apollo的。Apollo是經過攜程大規模生產實踐落地出來的,宋順是這個項目的主要開發者,也是這個項目的開源社區的主要維護者。因爲Apollo項目,宋順不僅全面提升了項目開發技能,同時也提升了行業影響力,目前他已經從攜程跳到螞蟻金服去工作。

第二個案例是吳晟開發的Skywalking應用性能監控項目[鏈接見上圖],目前這個項目在github上有超過13.8k星,也是非常成功的。吳晟玩技術的路子有點花,他之前是OneAPM的工程師,在吸收了OneAPM產品的一些設計思路的基礎上,他在業餘時間開發和開源了Skywalking APM。之後,吳晟跳槽去了華爲,期間他還把Skywalking推到了Apache,成了Apache基金會的一個項目。近幾年,吳晟又玩到國外去了,加入了一家叫Tetrate的雲原生技術公司,繼續推進他的Skywalking項目。吳晟年齡並不大,背景也不是特別突出(有興趣可以看他在github上的個人簡歷,鏈接見上圖),不過他對開源技術充滿激情,也比較會玩技術。

第三個案例是LinDB[鏈接見上圖],就是方法5中提到的黃傑的開源產品。LinDB是一個類似InfluxDB的時間序列監控產品,但是支持分佈式的,目前LinDB在github上有近1.5k星。黃傑目前已經從餓了麼跳去字節跳動工作,仍然專注於他熱衷的應用監控領域。

上面這幾個工程師/架構師都是國內開源領域的佼佼者,他們都是在吸收開源項目+企業實踐落地的基礎上,沉澱出自己的開源項目,並不斷推進開源社區的建設。這幾個人在國內互聯網行業已經產生了不小的影響力(影響力指數基本上可以用github上星的數量來衡量),他們找工作一般也不需要投簡歷,因爲github上的項目就是他們最好的簡歷,除了大量的獵頭,很多大廠的HR甚至會主動去"勾搭"他們。

如果你對開源技術充滿熱情,技術功底也不錯,但是覺得目前企業中的項目挑戰性還不夠,那麼方法7是波波推薦你嘗試的方法。當然,方法7對你的技術和開發能力的要求非常高,時間精力的投入也非常大,所以也要量力而行。

方法7有產品價值輸出,有社區反饋,根據反饋可以持續改進。它不僅可以提升你的技術和項目開發技能,也可以鍛鍊你的開源和社區運營技能。另外,成功的開源項目可以給社區貢獻價值,同時大大提升你的行業影響力。總體上,方法7的學習效果也是>10的。

方法8 ~ 商業化自己的開源項目

方法8叫商業化自己的開源項目,它處在頂層第六層,見下表所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Db7HEjaQ-1593069936278)(images/method8.png)]

方法8指的是,在自己的開源產品的基礎上,持續推進社區生態建設,並逐步走上商業化服務的道路,甚至開創一個公司。

方法8對大部分開發者來說是遙不可及的,國內外能走到這一步的頂級工程師/架構師也寥寥可數。考慮到方法8非常難,我這裏只是簡單舉幾個經典案例,這些案例的創始人都是從開源項目開始,然後不斷打磨優化產品,持續投入社區生態建設,並最終走上商業化的道路。

第一個案例是TiDB,一個開源的分佈式NewSQL數據庫,作者是國內的黃東旭,他也是著名開源項目codis的主要作者。目前,TiDB已經走上企業服務道路,背後公司是PingCAP,黃東旭是CEO。2018.9月PingCAT獲得C輪5千萬美金的融資。

第二個案例是業界知名的Kafka開源消息隊列,主要作者是三個人,一個美國人Jay Kreps+一箇中國人Jun Rao+一個印度人Neha Narkhede,是一個很有意思的三人組合。Kafka大致是在2011年初,從Linkedin落地後開源出來。2014年底,三個作者從Linkedin出來,成立了一個叫Confluent的公司,專注kafka的社區推廣和商業化。2019.1月,Confluent獲得D輪1.25億美金融資,公司估值25億美金左右。

第三個案例是Sentry異常日誌監控開源項目,和這個項目對應的公司就叫Sentry,兩個創始人分別是David Cramer和Chris Jennings。原來兩人都是美國Disqus公司的軟件工程師,他們從一個異常日誌監控小工具做起,不斷打磨積累,後來做成SaaS服務公司,走上商業化道路。經過近10年的積累,目前Sentry公司有近100人團隊規模。2019.9月,Sentry獲得C輪4千萬美金融資。

方法8有開源和商業化的產品輸出,同時完全和企業級客戶閉環,可以說是開源學習的終極方法。通過方法8,創始人可以同時獲得產品化和商業化技能,社區生態建設技能,還有技術領導力等全方位的技能,可以說,方法8的總體學習效果超過100。

三、要點心得

好,上面我把學習開源的8種方法(包括6個層次),給大家全都介紹完了,下面我來做一個要點心得總結。儘管上面的內容很多,但是這些要點纔是需要大家take away(記住帶走)的,見下圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-m5HoeGWB-1593069936279)(images/take_away.png)]

首先第一點是輸入要有輸出,學習要有產出。不管你學哪種技術,或者學哪個開源項目,最終都要有個產出。這個產出可以是一個ppt+一次技術分享、也可以是一篇文章或一個視頻教程,當然也可以是一個落地的企業項目,等等。沒有產出的學習,一般效果都比較差。

其次是閉環反饋+持續改進。精益創業(Lean Startup)提出了一個方法論,叫構建(Build)->測量(Measure)->學習(Learn)環,見上圖所示,這個環主要是用於指導快速產品開發和創業的。如果把這個環順時針旋轉約45度,就變成了學習(Learn)->構建(Build)->測量(Measure)環。也就是說,你要學點什麼東西,一定要構造產出點什麼東西,然後要找用戶用你的這個東西,之後你就可以根據用戶的反饋改進你的學習,從而形成一個正向的、可以持續改進的循環。一般用戶越多,反饋就越多,學習效果也就越好。最好你能夠量化你的學習效果,比方說github上星的數量,或者B站上視頻的點擊/獲贊量等。

第三、有個哲學家曾經說過:“如果你要真正理解某人或者某事,那麼就嘗試去改變他/他/它”。學習開源項目也是一樣的,如果你不曾親自動手去修改過開源項目的代碼(包括定製擴展或者克隆等),那麼你不可能真正深入理解一個開源項目。

第四,大家都是學習愛好者,平時都會花大量時間進行學習。既然投入了時間,那麼一定要讓你的投入產生比最大化,說白了是要一舉要多得。波波就是這樣的,一旦下定決心投入時間精力去學習某個東西,那麼一定要有價值產出,這個產出一定要變成自己的個人沉澱積累,並且這個產出最好要能貢獻社區(對社區有價值),然後能提升自己的影響力,最後能真正的學到東西。當你養成以投入產出比的視角去看待學習以後,你就會對你的學習投入慎之又慎,不會輕易投入價值小的學習方式。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CYaSx1Gk-1593069936280)(images/curve.png)]

最後要強調一點,不管是學技術,學英語,做開源,還是做視頻課程,都遵循所謂的複利曲線,如上圖所示。在複利曲線的底部,成本線以下的那條成長線很平很長,只有到達拐點,成長線纔會呈指數級上升。比方說,波波投入技術領域已經超過15年,只是在最近幾年,才隱約感覺快到拐點附近了。另外波波發現,在YouTube上做視頻輸出的比較成功的大V,平均積累週期是5~6年,纔會出現拐點,訂閱量呈現快速增長。對於方法8提到的從開源到商業公司的案例,底部的成長線更長,一般週期需要超過10,纔可能盈利甚至上市。

所以,如果你想今年學個什麼技術,明年就想成爲技術大牛的,那麼波波勸你不要學技術,去炒股炒房子或者買彩票,同樣的時間週期,可能成功概率會更大:)

四、我的新課程

最後,如果你對分佈式系統設計感興趣,那麼我向你隆重推薦波波的新課《分佈式系統案例課》,這門課程已經在極客時間上推出。

通過這門課的學習,你將獲得4點收穫:

  1. 學習如何設計中大型系統
  2. 深入理解分佈式核心技術
  3. 爲架構師面試做準備
  4. 分享架構師成長指南

本文內容《優秀架構師是如何學習開源項目的?》,也是新課程最後一章[架構師成長之道]的一部分。

下面是新課程的宣傳海報和詳細大綱,歡迎關注!

在這裏插入圖片描述

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8qdV0zsa-1593069936280)(images/syllabus.png)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章