對於這個話題的解釋:
為了儘快熟悉一門程式設計技術,通常會選擇影片、網路教程、書籍、培訓班等形式。學習的內容越高階,就會越傾向於閱讀技術書籍。但技術書,特別是英文原版Cookbook(中文譯名可為攻略),動輒幾百上千頁。如果想要全面掌握技術,跳著看或者遇到問題了再看,往往容易花費很多時間到檢索知識這個過程中,而且檢索到之後,也可能缺失一些前置知識。因此從頭到尾閱讀似乎更加有利。但這種模式下非常容易感到無聊,即使對這門技術有很大的熱情,面對巨大的篇幅和細緻的內容,很難找到著力點,容易放棄。
筆者嘗試了一些閱讀方式,包括以自制力強迫閱讀、參與相關開源專案閱讀程式碼而將Cookbook當做參考書等,但效果都不夠好,看書速度很慢,而且容易被其他事情吸引。
在這裡不討論要不要把一本書從頭讀到尾,而是討論:如果我要把一本幾百上千頁的書從頭讀到尾,應該怎樣有效閱讀。
近日偶然發現採取“理解、驗證的讀書模式”,不但保持了興趣,而且有效記憶、理解了Cookbook中的技術。所以將這種方式與大家分享,或許能有所裨益。
方法:
採取理解、驗證的讀書模式閱讀Cookbook。
定義:
什麼是理解、驗證的讀書模式:
把理解問題、理解問題解決方案本身作為一個目標,透過不斷回想命令、精確解釋命令含義來達到重複記憶、理解的作用。
優點:
既學習前人經驗,又提高了自己的熟練度,並形成正確思維模式。 基本上達到親自寫程式碼的效果,可能很適合初學者,並且比影片更有效率,因為自己可以有效把握學習速度。
缺點:
速度比較慢,工作量大。依賴於比較好的記憶力,因為命令看過一次後記得約牢固,回想起來就越容易,從而更容易把命令記得清清楚楚。而記不牢則需要不斷往前翻看,或者查閱Reference。
示例:
在《Linux Shell指令碼攻略》第二版中的一則命令:
$ seq 9 | \
awk '{ lifo[NR]=$0 }
END{ for(lno=NR;lno>-1;lno--){ print lifo[lno]; }
}'
當看到這則命令後,在“理解、驗證的讀書模式”下。思考過程示例是這樣的:$
是表示普通使用者,將這個敲到普通使用者terminal中即可執行。seq
是生成序列的命令,輸出應該是1到9一共9個數字。|
是管道運算子。\
是轉義,將換行符轉義,以便分行書寫指令。awk
是用於操作流的文字處理命令。' '
之間的內容是awk
的命令內容。{ lifo[NR]=$0 }
是對於每一行getline都要執行的內容,因為這裡沒有匹配的pattern
。END{ for(lno=NR;lno>-1;lno--){ print lifo[lno]; }
中則是所有文字讀取處理完後要進行的操作。
這樣,透過這一行命令,就回憶並驗證了seq
,管道,awk
等多個命令,包括它們的命令格式、輸出內容、注意事項等等。而且,如果是很熟悉的內容,可以不作詳細的回想,這樣可以加速閱讀。而不熟悉或者想不起來的內容,則可以藉助書籍中接下來的文字解釋部分,往往記不起來的部分會在接下來的文字中有解釋,這樣便省去了翻閱的麻煩並再次記憶了這一命令;若接下來的解釋沒有,則需要向前翻閱,或者暫時不管這個知識點,以後再去查閱,或者這個知識點本來就是後面才講的。
以上的過程就是完整的“理解、驗證”的模式。
而這個的深度則可以讀者自己的水平為準,比如上述思考過程還可以進一步細化,還可繼續回想awk
的Begin{}pattern{}END{}
模式,甚至對於初學者還可以回想到for
迴圈的語法。
而水平更高的讀者,則完全可以直接識別seq
,|
,awk
三個點然後即可完成有效思考。
與此相異的做法:
在實際工作中熟悉命令、學習相關的設計思想,只將Cookbook作為供查閱的參考書。
只選取Cookbook中的感興趣的章節。
小結:
在理解、驗證的讀書模式下,把一本幾百上千頁的書從頭讀到尾,既有明確目標和動力(理解),又能有效回想和練習技術(驗證,記牢命令、設計思想、常見功能及實現方式),從而使得閱讀Cookbook技術書基本上達到親自寫程式碼的效果,而且很適合初學者,並且比影片更有效率。這種模式筆者目前認為非常有效,透過採取這種模式已經很有信心地開始翻閱1000+頁的Cookbook。
備註:
筆者在自己打算精修的領域還屬於剛入門不久,但思考實踐出文中的閱讀方法後,感覺收穫很大、效率得到了很大提高,於是將此分享。而對其正確性、普適性則不作保證,因為沒有進行調研、也未進行科學實驗,此文僅僅提供一種思路,供大家評判和嘗試。
參考資料:
以下列出類似的話題,然而似乎並沒有看到和我的想法一樣的。
非科班出身的人學習程式設計不負責任指南
程式設計師為什麼值得寫部落格
如何高效地閱讀技術類書籍與部落格(轉載)
技術類的書籍怎麼閱讀才能達到最好的效果呢?
如何閱讀技術書籍
如何快速、準確地閱讀技術書籍?
我是如何閱讀程式設計書籍的
Python cookbook閱讀過的感覺怎麼樣?