每一個成功的人,都是從底層開始打怪,不斷的總結經驗,一步一步打上來的。在這個過程中需要堅持、總結方法論。
對一件事情長久堅持的人其實比較少,在堅持的人中,不斷的總結優化的更少,所以最終達到高級別的人非常少。對于普通人而言,只要肯不斷的堅持,已經能夠在某個領域(公司、學校)嶄露頭角了。
特別喜歡王國維《人間詞話》提出的治學方法:古今之成大事業、大學問者,必經過三種之境界
- “昨夜西風凋碧樹,獨上高樓,望盡天涯路” 此第一境也;
- 做學問成大事業者,首先要有執著的追求,登高望遠,瞰察路徑,明確目標與方向,了解事物的概貌;也要能夠忍受的了孤獨寂寞
- “ 衣帶漸寬終不悔,為伊消得人憔悴” 此第二境也;
- 以此兩句來比喻成大事業、大學問者,不是輕而易舉,隨便可得的,必須堅定不移,經過一番辛勤勞動,廢寢忘食,孜孜以求,直至人瘦帶寬也不后悔
- “ 眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處”此第三境也;
- 做學問、成大事業者,要達到第三境界,必須有專注的精神,反復追尋、研究,下足功夫,自然會豁然貫通,有所發現,有所發明,就能夠從必然王國進入自由王國
一、學習方法大綱
- **時間從哪里來?**如果沒有足夠的時間投入,再好的理論也只是紙上談兵。
- 尊重10000 小時定律,用海綿學習法找時間
- **學什么?**找到正確的學習方向,明確了學習的目標,才能做到有的放矢。
- 用三段分解法,將 10000 小時逐級分解,最終落實到可以實施的各項學習行動。
- **怎么學?**不同的學習目的應該有不同的學習方法,保證學習的投入產出比。
- 鏈式學習法:適合提升技術深度,通過自頂向下逐步深入的方式,將關聯技術逐一掌握。
- 比較學習法:適合提升技術寬度,通過比較相似的知識或者技能,全面掌握單個領域的技術。
- 環式學習法:適合提升技術廣度,通過學習業務閉環流程中相關技術,全面掌握多個領域的技術。
- **怎么保證學習效果?**如何解決“學了用不上,學了就忘”兩個常見影響學習效果的問題。
-
Play 學習法:可以用來解決工作中暫時沒有實踐機會的問題,學以致“玩”,通過“玩耍”的方式來應用。
-
Teach 學習法:可以用來解決學得不深的問題,教學相長,通過“教學”的方式來加深理解。
二、時間從哪里來?
2.1時間的重要性
-
成為某個領域的專家,需要花費 10 年時間。
-
5000 + 5000 不等于 10000。10000 小時定律所說的“成功”或者“成為專家”,是指在某一個領域,而不是所有領域一通百通。所以專業聚焦對于 10000 小時定律的落地非常關鍵。看看自己所在的領域是哪個?
-
工作時間外也要主動提升。10000 個小時相當于連續 10 年平均每天投入 3 個小時,但重復的工作不算,要算有效提升時間。原因在于,工作中的很多時間都是在做一些重復的事情,只是讓已經掌握的技能變得更熟練而已,邊際效益是越來越低的。除了上班時間外,盡量保證每天能夠有 1 個小時的主動提升時間。
2.2海綿學習法
魯迅的名言——“時間就像海綿里的水,只要愿意擠,總還是有的。”海綿學習法的關鍵就是“擠時間”。它既不需要我們放棄所有的休閑娛樂,也不需要在累成狗的時候強行“打雞血”逼著自己去學,而是讓我們通過長期堅持的方式,達到“積少成多、聚沙成塔”的效果。
可以按照自己的情況,早起30分鐘、通勤的時候學習、上班的前30分鐘、睡前30分鐘、周末找2個小時用來學習。
2.3一些感想
感覺很多事情都是相通的。
論語:“達巷黨人曰:“大哉孔子!博學而無所成名。”子聞之,謂門弟子曰:“吾何執?執御乎?執射乎?吾執御矣。”
達巷這個地方有人說:“孔子真偉大啊!他學問淵博,因而不能以某一方面的專長來稱贊他。”孔子聽說了,對他的學生說:“我要專長于哪個方面呢?駕車呢?還是射箭呢?我還是駕車吧。”
孔子為什么這么回答?因為孔子怕弟子「專騖為博學」,好高騖遠,不腳踏實地從一門學起,不能專精就不能成就。要學,一定要一門深入,一門學透了,再學第二門,這個是學的方法,否則終無所能,學不成。
對于海綿學習法,其實我一般也是通勤的時候看書、早晨到了公司看會、中午午休前看一下、睡前看一會、周末看一會,這樣每年能看七八本書、寫幾十篇文章。其實30分鐘,能看好多頁,一本書,很快就能看完。而且我比較喜歡這種學習方法,我發現讓我持續長時間看書反而效果不好,記不太住,相反單獨拎出來的這些時間我能記憶很深刻。
大家可以根據自己的具體情況設置方案,真的是聚少成多。當然,最重要的還是意志力。
三、學什么?
堅持十年達成目標很難,但堅持一兩年達成一個小目標,然后十年達成大目標就要容易一點。
我們可以使用三段分解法,帶你把“10 年成為大牛”這個大目標,分解成一個個可以在短期內達成的小目標。
3.1分解等級
先確定目標,然后確定為了達成目標可以分為哪些階段。如在阿里如果想成為P9,那可以分為P5~P8好幾個小目標。如果為了賺1個小目標,可以設置每年賺1000W!!!
3.2分解技能
從當前等級到達下一個等級需要哪些技能?要實現這一點需要兩個前提條件
- 知道下一個等級的要求
- 知道具體對應哪些技能
這兩個條件需要自己去進行搜索、咨詢他人完成。其實在我們學習的過程中,可以維護一個技能樹,能夠更好的幫助我們了解技能范圍。然后對這些技能做分解
- 分解的方法很簡單,**哪里不懂補哪里!**比如你感覺自己現在的數據庫水平很一般,只會寫 CRUD 語句,其他的東西都不懂,那么你就專攻數據庫這一部分,通過一段時間的專項提升來拿下這個技能。
- **專項提升某個技能的持續時間既不能太短,也不能太長,一般建議在 6 個月左右。**時間太短,容易陷入為了“完成任務”而去學的誤區,沒有真正得到有效提升。時間太長的話,其他技能就來不及提升了。
3.3分解“行動”
第二段分解之后,我們得到了 6 個月左右的技能提升目標,接下來要做的,就是通過第三段分解,將技能提升目標分解為具體要做的事情,然后按照計劃執行。
那么,怎樣才能提升呢?你可以上網搜索(知乎是個好地方),也可以去問有經驗的朋友,把二段目標細化為 1~2 個月的三段目標。
如作者確定了“提升 Linux 水平”:
- 1.5 個月:通讀《UNIX 環境高級編程》
- 1.5 個月:通讀《Linux 系統編程》
- 2 個月:通讀《UNIX 網絡編程 卷 1》
- 1 個月:Linux 常用命令實戰,包括 tcpdump、ps 和 top 等
如你想提升數據庫水平
- 1.5個月:通讀《MySQL技術內幕:InnoDB存儲引擎》
- 1.5個月:精讀《MySQL實戰45講》
- 繼續提升:《高性能MySQL》、《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》、源碼
當然,大家要是想再狠一點,可以再細分到周。
3.4一些感想
有些人不需要了解這些方法,在生活中自然就按照這個方法在做事情了。我感覺我媳婦就是這樣的,會給自己立個很大的目標,然后不斷拆解為子目標,然后找時間行動。她是搞量化基金的,CFA持證人蠻有含金量,她就想考。這個證需要考三次,一級一級的考。她就買了對應技能的書,每天抽時間看,一兩年考一次,已經考過二級了。
我覺得可能對于很多人來說,主要是沒有設立十年的目標吧,沒有去細細的考慮過這個問題,這應該對應人間詞話的第一重境界。
四、怎么學?
一般來說,P5/P6/P7 主要提升技術深度,P7/P8 主要提升技術寬度,P8/P9 主要提升技術廣度。我們怎么提升自己的技術深度、技術寬度、技術廣度?
技術寬度和技術廣度有點容易誤解,寬度是相同領域的,如redis和memcache、mysql和mongodb等。技術廣度是跨領域的,如前端、后端等。
4.1提升技術深度
最好使用鏈式學習法。所謂“鏈式學習法”,顧名思義,就是學習的過程好像從水里拉起一根鏈條,拉出一環后面又接著一環,最后將整個鏈條全部拉出來。
其實在面試和晉升的時候都會遇到,從一個問題開始,不斷的往下問,看看這個人學到了什么程度。
鏈式學習法能夠促使我們主動提升,還能將知識和體系系統化。
- 明確一項技術的深度可以分為哪些層。
第一種是自頂向下、層層關聯,打通一項技術的領域分層。
第二種是由表及里、層層深入,打通一項技術的細節分層。
- 明確你自己要學到哪一層。學得太淺,達不到提升深度的目的;學得太深,又會耗費太多的時間和精力。按照自己的當前情況學習。
- 明確每一層應該怎么學。總的原則是,在上層投入更多時間,更關注細節和熟練使用,在下層投入相對少的時間,更加關注原理和簡單應用。
4.2提升技術寬度
最好使用比較學習法。所謂比較學習法,就是橫向比較同一個領域中類似的技術,梳理它們異同,分析它們各自的優缺點和適用場景。
可以回答Why的問題,如為什么用redis不用memcache。
比較學習法能夠學得快、學的全、學的深。
比較學習法的具體操作步驟如下:
-
先用鏈式學習法掌握某個領域的一項技術,將這個領域的關鍵技術點整理成表格。
-
基于整理好的技術點,學習這個領域的另一項技術,將它們在技術點上的差異整理成思維導圖。
-
找出差異較大的技術點,將背后的原理和對應用場景的影響整理成表格。
以redis和memcache為例
4.3提升技術廣度
最好使用環式學習法。所謂環式學習法,就是構建一個完整的閉環過程,將多個領域的“魚”一網打盡。
技術上常見的閉環是功能環,代表某個功能的處理過程。環式學習法更加適合業務系統相關的技術人員
- 就是把閉環畫出來。具體的畫法是將完整的閉環分為幾個關鍵的環節,然后標出每個環節的關鍵內容。
- 就是由近及遠,逐步攻克閉環上的各個節點。根據自己的情況,選擇合適的學習順序。
環式學習法能夠培養全局視野、避免盲目的廣撒網卻撈不到魚。
4.4一些感想
自己寫了好多文章,應該按照鏈式學習法、比較學習法、環式學習法給系統梳理一下,把點變成線、線變成面。
五、怎么保證學習效果?
大家經常會遇到學了就忘的情況。
5.1Play學習法
從科學學習的角度來看,學以致用的效果是最好的,光學不練學得不深,時間一長可能就忘記了。
所謂 Play 學習法,就是**通過模擬實踐中的場景來進行學習和訓練。**Play 學習法就是主動創造 Do 的機會來提升自己對新技能的理解和記憶。
它的做法比較簡單,主要分為三個步驟:
- 按照鏈式學習法的方式學習某項技術。
- 列舉常見的場景,搭建模擬場景。
- 在模擬場景進行測試、體驗和練習。
比如為了驗證 ZooKeeper 的集群選舉功能,模擬的時候可以采取拔網線、直接殺進程、刪除存儲文件等各種非常規的手段。
5.2Tech學習法
很多人都有類似的經歷:自己學習某項技術的時候感覺學的差不多了,甚至都已經在工作中具體實踐了,但是一旦跟別人討論,或者在晉升的時候面對評委的提問,又會感覺很多東西都沒有完全掌握。這種現象背后的原因是,每個人的知識和技能都是有一定局限性的,不同的人理解會不一樣,關注點會不一樣,所以在討論或者 PK 的時候自然會遇到各種各樣的問題。就算你有實踐機會,也不太可能一兩次就把一項技術相關的知識全部用到,總會有認知的盲區存在。
所謂 Teach 學習法,就是通過教別人來提升自己。
Teach 學習法包括兩種形式,寫作和培訓。
- 寫作能幫我們系統的整理技術體系。確實是這樣的,寫的時候,得思考整體的結構是怎樣的。
- 寫作有助于了解細節。確實是這樣的,寫的時候,經常會發現這個地方好像不太懂或者這個地方有問題,需要查一下。
- 培訓需要寫培訓材料,能夠鍛煉總結、歸納、提煉的能力;讓我們在有限時間內講清楚一個主題,會強迫我們思考和主題相關的各種信息和可能的問題;和聽眾交流,能加深理解和臨場反映能力。
總結
好的學習方法確實事半功倍,感覺自己以前花了很多時間,雖然有進步,但方法掌握的不好,進步的速度還是太慢了。好在確實是有積累的,現在需要把積累的這些內容,按照學習方法重新梳理一下。今后的學習內容,都向新的學習方法貼合。
上面這些學習方法是相輔相成的,你可以根據你當前的級別和實際工作內容,把它們組合起來使用,具體的方式如下:
第一步,無論你當前是什么級別,先用“三段分解法”來規劃你的學習目標和計劃。
第二步,使用“海綿學習法”來找到你可以用于學習的時間。
第三步,根據學習目標采取相應的學習方法。
- 如果你是 Java 后端 P5/P6/P7 級別,你的技術提升以技術深度為主,你可以采取“鏈式學習法”來學習 MySQL 以提升技術深度;
- 如果你是 P7/P8 級別,除了技術深度外,還需要提升技術寬度,你可以采取“比較學習法”來學PostgreSQL、MongoDB 和 Elasticsearch 等存儲系統;
- 如果你是 P8/P9 級別,你可以采用“環式學習法”來學習跨領域的技能,比如學習 vue、小程序和人工智能等業務閉環流程涉及的技術領域;