程式設計師必會的十步快速學習法(附書單)
阿新 • • 發佈:2021-02-05
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095548p1.jpg)
本文對《軟技能:程式碼之外的生存指南》書中的“十步學習法”展開討論,該書作者是John Z. Sonmez,一名程式設計師,書中有很多面試、專業等建議。有一些建議相見恨晚。某天在喵哥群裡看到了本書的推薦,非常感謝推薦。
本文末尾附上了John Z. Sonme推薦的書單(自我提升、軟體開發、投資類),感興趣的可以看一下。
雖然本書說的是“程式設計師必備的軟技能”,但我認為這是所有職業都通用的軟技能。該書中總共分成七個部分,分別是:職業、自我營銷、學習、生產力、理財、健身、精神。我做了下面的思維導圖,可以概括個大概,可以根據需要隨意讀取某個章節:
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095555p2.png)
本書總共71篇文章,可以把每一篇都看成一篇高質量的部落格,也就是說如果你能夠寫出71篇高質量的部落格,你也就能夠出書了(手動狗頭)。
這位作者老哥很會玩,他有自己的youtube頻道,網址youtube.com/jsonmez 我點進他的油管主頁看了一下,好傢伙,作者本人還是個猛男:
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095811p3.jpg)
# 十步學習法
你是不是和我一樣,學習知識的時候就喜歡拿著一本書“從封面到封底”仔細閱讀,這樣可以學到東西,但是效率很低。因為我們往往只會用到書中的一部分內容而已,沒用到的內容會迅速忘記。這是關鍵,沒用到的內容會迅速忘記……通過不同的方法,對於知識的掌握程度也不同,可以參考下面這張圖:
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095817p4.jpg)
僅僅通過閱讀,學習資訊的留存度只有10%。因為我們並沒有掌握那些沒被用到的知識。學到了某個知識,叫懂得;練習過學到了的知識,這叫掌握。掌握了的,不容易忘。
懂得很多道理,但是依然過不好這一生。——因為這些道理只是頭腦上的懂得,但並沒有身體力行的掌握……
學習二字,學——頭腦上的懂得,習——頭腦和身體上的練習。練習中的體驗,極大加深了該知識的記憶。我們都有背單詞的經歷,但真正掌握這個單詞的時候,還是和這個單詞在某個地方不期而遇時,比如某一天下午你在看國外新聞時,看到了這個單詞,這個時候才發現這個單詞還有這個用法。我們學會了使用它,**直接用它**,也就記得了它。
十步學習法如下:
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095823p5.png)
不要被這麼多步驟給嚇到了哈,總共分成兩個部分:
第一步到第六步:學習前的準備部分,即為前期調研以及設定目標。
第七步到第十步:學習過程部分,即這四步:學習-實踐-學習-分享教授(Learning, Doing, Learning, and Teaching)
## 第1步,瞭解全域性
這些年有個很流行的認知的四個階段:不知道自己不知道什麼、知道自己不知道什麼、知道自己知道什麼、不知道自己知道什麼。
“瞭解全域性”就是從第一階段到達第二階段的過程。如果想要學習一門程式語言,那麼首先得知道計算機的程式語言都可以做些什麼,市面上有哪些程式語言,這些程式語言之間又有什麼關係等等。關於這些我們可以在網上搜索一些文章,或者請教相關的人,瞭解個全域性。
等到我們瞭解個差不多的時候,我們終於知道了這些東西大概是個什麼,但是具體是啥我們是不知道的。這就進入了“知道自己不知道什麼”的狀態。
瞭解全域性是必要的,如下面:
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095834p6.png)
如果我們按照圖的上半部分,在沒有了解全域性,就開始精細地學,這樣恐怕不會持久。
但是像下半部分那三張圖一樣,先了解一個模糊的大局,再逐漸精細地瞭解,這樣的效果會更好
## 第2步:確定範圍
我們大致瞭解全域性之後,需要確定範圍。因為計算機知識浩如煙海,我們無法掌握全部——窮盡一生也不可能。甚至就算單是學習一門程式語言,比如如果想要精通C++,那沒個好幾年是不可能的。但是我現在的學習時間只有一兩週,那隻能把範圍縮小,這樣的範圍可以是,使用學習某個程式語言中的:
- 圖形介面相關的程式設計。
- 檔案操作相關的程式設計。
- 網路通訊相關的程式設計。
短時間內我們可以聚焦在以上三個主題中的一個。一個主題就是一個聚焦範圍。
為什麼要聚焦,我們啃知識的過程就想打怪。還記得《灌籃高手》裡面,宮城良田是怎麼把三井壽的門牙打掉的嗎?其實三井壽是帶兄弟圍毆的,如果宮城不聚焦地去打三井,那麼他就會被圍毆的毫無還手之力。
我們打知識也要聚焦,不然會被知識圍毆地毫無還手之力。
## 第3步:定義目標
確定一個小範圍之後可以定一個小目標,比如下面的任意一個都是小目標:
- 寫出一個圖形介面
- 用程式操作檔案
- 用程式進行PC之間的通訊。
## 第4步:尋找資源(學習材料)
學習一個知識點的時候,最好不要就只用一本書,可以參考不同各個書上的指定的章節,因為很多時候不同的書都在描述同一個東西,但是描述的角度不一樣。
**當我們從A角度看某個東西的時候,可能會消除在B角度看相同東西時產生的那個疑惑。儘可能尋找更多資源。**
資訊來源:
- 圖書
- 部落格文章
- 線上視訊,公開課
- 詢問這方面的專家
- 播客
- 原始碼
- 示例專案
- 線上文件
- 各種網頁
- 付費視訊、課程
## 第5步:建立學習計劃
建立學習計劃,就算我們已經在第2步裡面縮小了學習範圍,可能這個範圍內還有比如六個如A,B,C,D,E,F個知識點,而有些知識點是最基本的,比如知識點A,所有其他知識點B、C、D都依賴於A。這個時候我們肯定要學最基礎的A,再學其他不那麼基礎的點。
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095844p7.jpg)
就像上圖中的螺旋上升的階梯,往上的階梯需要穩固的基礎,也就是一個起點。
很多時候可以直接參考書的目錄,基礎的點都在前面,進階的內容都在後頭。
## 第6步:篩選資源
因為我們在第4步的時候已經尋找了很多資源,那麼這個時候可以進行篩選,去掉重複性比較多的,或者不太適合自己的那些書,找出最物超所值的那幾本——可以看看網路上對該書的評價。
## 第7步:開始學習,淺嘗輒止
![](https://images.cnblogs.com/cnblogs_com/binfun/1921791/o_210124095851p8.png)
以上學習前的準備過程就差不多了,接下來就是學習過程,學習-實踐-學習-分享教授(Learning, Doing, Learning, and Teaching)。
這一步的學習是為了下一步的“動手操作”。
這個時候我們就要清楚地知道,為了下一步的操作,我們需要的“最小量的啟動知識”有多少。度很關鍵,學太多或者學太少都影響效率。
## 第8步:動手操作,邊玩邊學
如果是學習程式碼,這一步可以按照示例程式碼自己試一遍,或者自己改一遍。
如果是學習英語單詞,就使用這個單詞造句、練習發音,並根據不同的釋義想象可以在什麼場景下可以使用。
以上過程也是根據不同的例子來強化自己的記憶。我知道有一個挺有名的程式設計師章亦春,他喜歡在學習的時候,手抄程式碼。第一次聽到這事的時候,我震驚了,手抄,那效率得有多低?後來我在刷leetcode的時候,遇到看不懂的那些題解程式碼,複製粘貼後上程式跑一遍還是不懂。然後我就在紙上手抄這些程式碼,抄著抄著的過程,竟然真的慢慢懂了,真香!
## 第9步:全面掌握,學以致用
我們可能會在上一步的操作過程中遇到問題,這個時候可以回到資料裡面,去尋找答案。又或者這個時候我們再看之前看過的內容,也會有不同的體會。
## 第10步:樂為人師、融會貫通
原書中是這樣寫的:
> 你可以用多種方式將自己所學教給他人。你可以寫部落格,也可以製作YouTube視訊。你也可以跟自己的愛人探討,將自己所學解釋給他/她。重點在於,你要花時間將自己學到的東西從大腦中提取出來,以別人能夠理解的方式組織起來。在經歷了整個這個過程之後你會發現,有很多你以為自己明白了的知識點,其實並沒有摸透。於是你會將那些以前自己沒太明白的東西聯絡起來,並且簡化自己大腦中已有的資訊,將它們濃縮並經常複習。
費曼學習法也大概是這個意思,諾貝爾物理獎得主費曼說:“如果你沒有辦法用簡單的語言表述你所學的知識,你就沒有真正學會它。”著名的費曼學習法,推崇以教為學。
這段視訊解釋得相當透徹:[為什麼費曼技巧被稱為終極學習法](https://mp.weixin.qq.com/s?__biz=MzIxNDI5MDk0MQ==&mid=2247483949&idx=1&sn=b07da6c296bc7479b72657df09e2cf53&chksm=97a89abfa0df13a9da8519877d0f4b83e94deee4b0110f61f6036ce2c1a1813deebf84bba2a5&mpshare=1&scene=1&srcid=01243OkiJk7OmgN67gelE6j3&sharer_sharetime=1611480712697&sharer_shareid=741c39217c916aaf06bf9827e80dbff6&exportkey=AQ%2F%2BKuD0h2ouY1KGwuXkqE0%3D&pass_ticket=kYJlLmy9DhXdDxlHGAglPOVYaVTT%2BLfO%2FS03AUhkbq5PYNdmoDmTcEE49yNIeAs3&wx_header=0#rd)
首先我們通過練習大量的例子,從而總結出這些例子的通用規律。然後將這些例子以他人聽得懂的方式表述給他人,在這個過程中你再一次對這個通用規律進行了總結——或者說壓縮。同時在表述的過程中,進行了邏輯上的驗證。
有時候,邏輯驗證會出現卡殼,會發現有很多你以為自己明白了的知識點,其實並沒有摸透。
這還沒完,在表述給別人的時候,別人會產生疑問,這時候可以將別人的例子,套用在你已經總結出的規律中,進一步驗證這個規律的準確性。
分享知識的途徑:
- 寫部落格文章
- 建立視訊教程
- 發表演講
- 與朋友或愛人進行對話探討
- 線上或者線下回答他人的問題
只要善於總結,就超越了很多人。當年RTS遊戲盛行的時代,WAR3(魔獸爭霸3)遊戲的王者,中國人皇SKY李曉峰。他當年在網咖接受採訪的時候,秀出了他一個記滿技術要點的小本子,這是他對很很多場對戰的關鍵總結。說實話,字寫得真的醜,寫的句子也和“文筆”兩字絲毫不沾邊,但這並不能阻止他成為世界人皇。
最後,祝各位前程似錦。
# 最後的最後附書單
文末附上原書《軟技能:程式碼之外的生存指南》作者推薦的書籍彙總。各位也可以參考以上學習方法,選擇某一主題的書,進行學習哈。
## 自我提升和勵志類圖書
- Steven Pressfield的The War of Art [Black Irish Books, 2002]
- Dale Camegie的《人性的弱點》(How to Win Friends and Influence People)[Gallery Books, 1998再版] 沒錯就是卡耐基的書,英文名直譯有點意思:如果獲得朋友和有影響力的人
- Napoleon Hill的《思考致富》(Think and Grow Rich)[Wilder Publications, 2007]
- Maxwell Maltz的《心理控制方法》(PsychoCybemetics)[Pocket Books, 1989再版]
- Norman Vincent Peale的《積極思考就是力量》(The Power of Positive Thinking)[Touchstone 2003再版]
- Ayn Rand的《阿特拉斯聳聳肩》(Atlas Shrugged)[Signet, 2005再版]
## 軟體開發類圖書
- Steve McConnell的《程式碼大全》
- Robert Martin的 《程式碼整潔之道》
- Eric Freeman, Elisabeth Robson, Bert Bates和Kathy Sierra的《Head First設計模式》
## 投資類圖書
- Gary Keller的The Millionaire Real Estate Investor [McGraw-Hill, 2005]
- Robert Kiyosaki的《富爸爸,窮爸爸》
- Kerry Given的No-Hype Options Trading: Myths, Realities, and Strategies That Really Work [Wiley, 2011]
![](https://images.cnblogs.com/cnblogs_com/binfun/1900458/o_201214141446qrcode_for_gh_eab3336c9903_258.jpg)