學習者的窘境:阿里P7淺談程式設計師如何有效學習才能有成就感
我是一個程式設計師,俗話說活到老學到老,程式設計師更是一個需要持續學習的職業。那麼程式設計師該如何有效學習?這是一個需要不斷思考的過程。今天分享一個我思考的模型,主要講述如何選擇學習的知識及有效學習。
模式一
圖1是一個學習的通用流程,專家或者熟練從業者從具體的行為或者經歷進行總結提煉,形成一些抽象的可以複用的框架或者套路,然後學習者通過文字等媒介進行學習,有意識的或者無意識的轉化成學習者自己的抽象層知識,也就是我們通常而言的學習的內化過程,再通過這些知識去解決學習者面對的具體問題。
比如一些技術行業的大牛,最早接觸使用快取,這是他們的具體行為,在操作,使用,總結的過程中,不斷地形成他們對於快取的知識體系,這是抽象層。當他們把這些知識記錄表達出來後,我們在學習的過程中會有一個從他們的抽象知識吸收形成我們的抽象知識的過程,這個過程依賴於方式和自身知識結構的不同,會或多或少,然後有朝一日我們再去實踐,這又是具體行為了。
模式二
除了上面的模式,還有一種較為常見的是我們看到或聽到一些具體行為,有意識無意識的從中總結提煉出知識,然後當我們遇到類似的情景的情況時,呼叫這些知識進行解決。如圖2
比如有時候公司出了線上bug郵件通報裡面會提到一些解決過程,我就會每次比較關注一下,然後總結下遇到線上問題的排查思路,以彌補缺乏這方面實戰經驗的薄弱點。
根據以上兩個模型,可以很好的幫助我們理解一些場合下為什麼會學習效率底下的問題。
在模式一中,我們需要學習他人的知識,然後融合進入自身,再去解決問題。這裡有三個要求:
- R1. 需要能夠融合進去自身,即你可以理解接受
- R2. 需要這個知識是能夠解決你的問題的
- R3. 這部分抽象知識要有價值。
R1—如果你學習的東西對於你而言太過於深奧,比如你對bio,nio,aio絲毫不懂,上手就去學習netty,那麼你要麼沒法學會,要麼事半功倍,這就是學習順序的重要性。從圖上看就是抽象層的兩個圈特別遠。
R2—工作和學生時代學習的目的有很大不同,學生時代是要學習課本,而工作是需要解決問題。所以往往我們是先有了具體層的任務才需要去找尋抽象層的知識,所以學習應該搜尋式,而不應該是推送式。很多你收到的推送的極其有價值的文章並不一定適合你當下。我是後端程式設計師,有人推薦給我一個css的經典文章,很大程度上不看是我最好的選擇。順帶一提,根據你的工作需要,去找對應需要的知識,做中學,學中做效果會更好。從圖3看就是你要學習的抽象知識,和你具體的行為之間是斷路的。
R3—技術裡常說深度這個詞,是否有價值就是對你而言夠不夠深,當然是否深是相對於你而言的。比如我訂閱過一個技術專欄,可以說是食之無味,棄之可惜。時不時也會有一些有價值的知識,但是大部分時候會感覺飄飄然不知所云,這種情況下,更好地選擇是選擇知識密度更高的知識。
如果你是從模式二一些具體行為中,有意識無意識的提煉出了知識然後去解決問題。需要滿足兩點,第一這個具體行為真的有足夠的價值。第二你有這個能力及時間進行提取。比如我在得到聽過一個教人高效學習的精品課,有幾節老師講了很多他曾經如何高效學習的例子,但是這對我有用嗎?沒有。因為都是說他通過刻意練習的方式學習英語的行為故事,刻意練習我曾經聽過多次,這些具體行為也很難總結出什麼模式來,除非完全相同的場合,否則難以複用。這也就是很多知識付費被批評的原因之一,經常是大段充斥著勵志的故事,但是可以對你產生引導的思考卻很少。
需要注意的是有沒有價值是因人而異的,比如具體行為中蘊含的資訊你從未了解過,那麼會解決你不知道的問題,比如聽朋友說他在leetcode刷題,然後我也去做了很多道,比如知道了tinySpring,解決了我對spring原始碼入門的畏懼等等。要明白一些情況下知道就是一種價值。另一種情況是你所要面對的場景和他講述的場景十分接近,那麼也是有意義的。
通過上面兩個模式就是希望能夠讓大家明白,學習的內容一定要有選擇,要建立自己的資訊篩子。
我們抽象而成的知識有很多其實是無意識的總結而成的,學會有意識的總結會產生數量級上的區別。你總結的知識會在今後解決其他問題的時候產生有價值的幫助,會在你學習其他知識的時候幫助你理解。比如之前做一個系統涉及了很多設計方面的問題,如冪等,業務建模,一致性等。在學習reids主從同步時,就會把redis用到的很多理解和系統設計結合思考,從redis上學到的新的理解,也會在我之後系統設計時候產生指引。
歡迎大家加入粉絲群:963944895,群內免費分享Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫教學視訊及架構學習思維導圖
說到這裡不知道是否會讓人有一種學習彷彿很容易的感覺,但是為什麼實際學習和解決問題如此困難呢。真實場景中的問題總是複雜的,需要用到很多的知識,而你需要經歷這個知識是什麼,怎麼用這個知識,什麼時候用這個知識,為什麼要用這個知識的各個階段。比如先知道了mq是什麼,然後知道了mq如何配置,如何編寫程式碼,然後還需要去考慮mq在什麼場景下使用合適,最後還要考慮如果是需要快速開發的需求能不能不用的問題,這也是你對知識認知提高的過程。
在終身學習的基礎上,篩選學習的內容,不斷總結,在學習中建立自己的知識體系,新手期學習經典教科書加多實踐,熟練期看書加去努力解決更多複雜問題,高手期去遍歷知識領域。這樣學習效率也會越來越好,在面對問題時才能做到不再雜亂無章的思考,而是很清楚需要用到哪些知識,對問題的解決能力也會越來越強。