Categories
程式開發

我在極客時間學習的三個月


最近我在極客時間上學習了挺長時間,很多感觸,正好 InfoQ 推出了寫作平台,就在這裡寫寫吧。

我是中國銀聯湖南分部技術部的開發工程師,知道極客時間是因為公司購買了極客時間企業版的服務,我們內部叫做“聯現技術咖”項目,這讓我獲得了和很多技術咖一起學習架構的機會。現在想想,要感謝極客時間團隊以及各位資深專欄老師貢獻了這麼多優質的課程。

上個月我花了大量的業餘時間學習極客時間上的課程,獲得了這個項目學習時長的TOP1,我們培訓經理讓讓我做個學習分享,這其實是源於一個誤會,我最初誤以為咱們課程的有效期只有一個月。當我第一次登錄極客時間,打開“我的課程”一看,一共15 門、750 講課程,這麼多內容要在一個月的時間內學完,幾乎是不可能的,得拿出“只要學不死就往死裡學”的鬥誌了。因此,我開始抓住盡可能多的機會學習,比如上下班通勤途中、日常飯後的洗碗時間、週末整下午整晚上等,都用來學習極客時間架構班的課程了。一開始的學習過程,說是囫圇吞棗也不為過,但是這“棗”啊,品著品著,就品出味道來了。慢慢的,我對學過的課程有了一些總結,對未學的課程也有了一些規劃,形成了一些自己的經驗在這裡拿出來給大家分享。

當然,每個人都有適合自己的學習方法,而且學習時間和學習效果是無法等同的。我相信肯定有更多更優秀的同學取得了更好的學習效果,比如我剛進微信群時,就看到有同學說這裡面的課程他都已經買過不少了,可見在架構知識的學習上,公司確實藏龍臥虎,而我還是一個新手。因此,我的分享僅僅起到一個拋磚引玉的作用,主要還是希望能夠給大家營造一個多交流、多分享的氛圍,共同學習、共同進步。

怎麼學

談到“怎麼學”,首先就是學習方法的問題,我想先和大家分享一下《高並發系統設計40問》中唐揚老師對程序員學習這件事的看法。

剛畢業時,坊間常有一個傳聞,說程序員是有年齡限制的,甚至具體到35歲就是這個程序員的終結年齡。可隨著入行漸深,我們看到越來越多的人在35歲之後還在行業中如魚得水,我想,35這個數字並非強調個人的年齡,而是泛指一個階段,強調在那個階段,我們可能會因為個人的種種原因安於現狀,不再更新自己的知識庫,這是非常錯誤的。化用《禮記》中的話,我們要博學之。我們需要不斷革新知識,所謂的天花板其實更多的是知識性的天花板,活到老學到老才是我們在這個行業的必勝法寶,所以,我們應該利用各種優質平台以及零散的時間學習,但是同時我們要要注意,現在的知識偏向碎片化,如何有條理、系統地學習,將知識梳理成體系,化作自己的內功,是比較關鍵和困難的。

在這裡,唐揚老師給我們提出了幾點建議:

第一,基礎知識要體系化,讀書是一種很好的獲取體系化知識的途徑,比如研讀《算法導論》提升對數據結構和算法的理解,研讀《TCP/IP 協議詳解》深入理解我們最熟悉的TCP/IP 協議棧等等;第二,多讀一些經典項目的源代碼,比如Dubbo,Spring 等等,從中領會設計思想,你的編碼能力會得到極大的提高;第三,多利用碎片化的時間讀一些公眾號的文章,彌補書裡沒有實踐案例的不足,藉此提陞技術視野。

而咱們的專欄課程就同時涵蓋了這三點建議。首先,我學過的每一門課程都是圍繞一個或幾個核心問題展開,這裡的問題有概念上的,比如什麼是架構師,什麼是中台,也有具體實現上的,比如如何實現高並發,如何進行使用DDD規劃微服務等。課程涵蓋了從問題產生的背景到問題的提出,再到各種方案的判斷、權衡、取捨,最後到形成解決方案、並進行迭代、演進。既包含了新概念產生的來龍去脈,又囊括某一項具體技術的前世今生,具有高度體系化的特點;第二,許多課程,尤其是針對某一個具體技術的課程,授課老師也是該項目領域的資深開發者,能夠很好的將項目源碼的編寫思路融合進講授的課程中。比如我正在學習的《Kafka核心技術與實戰》,胡夕老師作為Apache Kafka項目的一名Patch提交數排名前列的代碼貢獻者活躍在社區中,他在課程中很好的融入了項目的設計思想與核心代碼,這為我日後有機會研究Kafka源代碼,起到了一個導學的作用。而最後一點,也是我認為專欄課程最契合的一點,就是碎片化時間的利用。在架構班為我訂閱的課程中,大部分的課程以音頻加圖文的專欄的形式呈現,每一講課程的時間控制在十到二十分鐘之內。這樣的課程形式可以說是為碎片時間量身定制的。使得我可以很好的利用各種碎片化的時間進行學習。

關於碎片時間的使用,每個人都會有一套自己的方法。一般正統的碎片時間的使用,應該是一個“時分複用”的過程,把零散的計劃外時間都利用起來,比如通勤時等車等地鐵等飛機、又比如約好晚上8點開劇本殺本可是總有人咕咕咕到8點半等等,這些時間的使用是一個老生常談的問題,我就不贅述了。而我特別的方法是更多的進行“頻分複用”。 “時分”和“頻分”是通信上的兩個概念,套用在這裡我是想表達,人的感官其實是可以獨立使用的,比如在健身房跑步的時候,我們往往會戴上耳機聽聽歌或者看看屏幕上的電視劇,來緩解機械的體力運動帶來的疲勞感。

在音頻課程的學習上,我也會利用耳朵空閒、大腦不需要集中精力的時間進行。首先我們排除掉工作時間,工作上需要投入120%的精力,無法分心。而除工作外的閒暇時間,比如工作日晚刷知乎、刷微博,甚至週末玩遊戲的時間,我都會關掉它們本來的聲音,把極客時間的網頁放到後台,用耳朵聽,聽到不好理解的地方、老師不好朗讀的代碼片段,或者需要關注的流程框圖等內容,再把頁面切到前台來,拉回進度條配合圖文一起消化。這里肯定會有同學指出,這哪能學的進去啊?聽課哪有遊戲好玩、哪有瓜好吃?但其實我們仔細回想一下,很多打發時間的休閒娛樂活動,都有是在機械性的重複,享受一個個快速滿足的循環,因此,我認為在時間緊迫的情況下,音頻課的學習是可以與日常休閒娛樂並行的,而且經過我的個人實踐,我發現設計良好的課程和娓娓道來的講述能夠很快的抓住我的注意力,畢竟相對於微博的新鮮事、遊戲的機械性重複,課程的新鮮感、系統性更強,更能夠引起大腦的注意。

這種學習方式,從一個側面促進了我持續學習,而讓我保持學習習慣的另一個因素,就是興趣導向了。在我剛開始接觸這些課程的時候,架構師是一個比全棧程序員更高大上的稱謂,就像有些小編的標題一樣,看到了你就會想點進去一看究竟。而且,經過這一段時間的學習,也提升了我對整個技術領域的好奇心,這又反作用於我的學習動力,因此,對於我來說,這並不是一個需要花意志力去咬牙堅持的事情。

學到了什麼

再說“學到了什麼”的問題,種什麼因得什麼果,所以在談收穫之前,我想先聊一下我對架構班這一系列課程的預期。首先,架構能力是一個需要技術深度和專業廣度的進階能力,需要實戰的積累與項目的歷練,這對於剛剛走過職場新人階段的我來說,尚有段看不清長短的距離。而且作為一名分公司員工,並沒有全身心地投入在技術開發的前線,甚至可以說與業內的前沿技術有一定的的脫節。所以我希望通過架構課程的學習,達到以下三個目標:首先是了解一個IT大廠的技術團隊是怎麼樣的,其次是了解當今主流的技術框架是怎麼樣的,最後是希望能夠從中找到一些能夠落地的方案指導自己的實際工作。令我自己滿意的是,通過這一個多月的學習,三個目標中的前兩個已經基本實現,並正朝著最後一個目標而前進。

我把已經學完的課程仿照大學的課程分類歸為了三類,也分別對應了我的三個目標:

第一類是基礎通識課,比如《項目管理實戰20講》《說透中台》等,描繪了一個現代技術團隊應該具有的組織形式、協作機制和基本要求,這一部分試圖解決的問題,無論是前端、後端還是架構團隊,都有可能遇到。其中,我印象最深的是雷蓓蓓老師講述她帶領團隊與各種干係人“鬥智斗勇”,如何業務技術兩開花,走完從“把事情做好”到“把事情做成”的“最後一公里”。

第二類是專業通識課,比如《許式偉的架構課》《從0開始學大數據》等,從中我了解到當我們談論架構時,我們究竟是在說什麼,架構師的知識體系應該是什麼樣的等等。正是通過這一部分課程,讓我能夠站在架構設計的視角看問題,比如李智慧老師和我分享的一句金句“軟件設計不應該是面向需求設計,而應該是面向需求變更設計”,讓我有一種後悔沒有早聽到這堂課的感覺。李運華老師的架構設計三原則“合適原則、簡單原則、演化原則”,也讓我重新思考我在實際工作中是否存在盲目追求新技術,而脫離了實際需求的情況。

最後一類是專業主幹課,比如《透視HTTP 協議》《深入剖析Kubernetes》,每一門課程都完整講述了一項主流技術產品前世今生,這一部分內容也是我最難消化的,僅靠聽一遍遠遠不夠,做到基本了解都還需要實踐課程中配套的試驗方案和示例代碼。通過學習,我把這些技術分成兩類,一類是諸如HTTP、Kafka 等,生產中正在使用的技術,通過學習可以對該技術有更全面的理解,比如是否需要升級到HTTP2、HTTP3 等,有著很現實的指導意義;另一類是Kubernetes 之類的“屠龍之技”,通過學習這些技術出現的歷史背景,了解它們試圖解決的問題領域,讓我認識到我可能短時間內不需要使用該項技術。這時我就會重點關注這項技術發展、演進的過程和設計思路,​​思考“為什麼”而非“怎麼樣”,這種發現問題解決問題的循環推進過程對於日常工作和架構思維的培養也是卓有益處的。更重要的是,當未來需求到來、資源出現的時候,我能夠回憶起這種技術架構,再理論聯繫實際地再次學習、運用這些技術。

其實,學到現在,我在經歷短暫獲得感的喜悅之後,更多的是發現自己知識的欠缺,有一種落後於時代的恐懼感。甚至在我準備這篇分享稿的時候,我發現公司的託管 IDC 就是使用的 Kubernetes 集群,而我正要在這樣一個容器內部署一個 Ngnix 的反向代理。那些曾經我認為短時間接觸不到技術,正在以極快的速度走到了我的身邊。

所以,保持初心,保持學習習慣是最重要的,正如喬布斯的名言,“Stay Hungry. Stay Foolish.”