如何高效的閱讀計算機著作?
學習一門新技術,如果書中示例代碼有太多的自定義的讓人很難記並且容易和庫函數混淆的封裝函數以及許多自定義常量與變數,當讀這類書目的時候,除了去翻看隨書源碼,大家有什麼更好的辦法嗎?【問題重點:如果高效閱讀,而不是作者為何這麼寫,免的一些人不看清題目亂回答一通,先謝謝大家了】
看了你的問題,我猜想你看的可能是國內的比較普遍的常式一類的書籍
在我的印象中,國外的書籍,特別是一些經典的計算機書籍,並無太多代碼,即使有,也是很少的代碼片斷,基本上不存在閱讀上的困難
再說你看的這類書,在大學時,我也常看這類書,我的方法,或者說順序是,先囫圇吞棗,然後再精耕細作
比如某一章,先大致的通讀一遍,這時無需在意代碼的細節,只需要了解知道這段代碼是在做什麼就行了,通過通讀,對內容有了一個大致的了解,然後參試者按照書中的思路自己去實現,在實現的過程中肯定會遇到問題,這是再去參考書中的代碼.我理解,這樣會印象比較深刻,對代碼也有更多的理解,而不單單是去記住幾個變數和函數.
看描述,題目指的書是工程技術方向的書吧,理論書沒多少代碼。2個方面哦。
1.基礎理論。所謂真的新技術是很少的。一般的比如程序設計語言,幾種范型都了解過了,其他語言就是你學過語言的方言,新語法就是語法糖。操作系統基礎好了,什麼平台開發都是POSIX的兄弟。再高端大氣上檔次的尖端領域的研究和技術,也有經典理論書籍和論文。如果看的順序對了,前置基礎紮實了,看新技術書就像看完一年級數學去看二年級數學一樣順理成章。
2.思維轉換。要將腦裡面的概念完全切換到這本書上面,用這本書提到的概念去思考。最簡單的例子就算你很熟悉c++的reference,學java提到reference要切換到另一個概念。又比如所謂closure,在離散數學,程序設計語言理論,和具體某一個編程語言lua、js什麼的,是3個完全不同的概念。學新技術就要用新的名詞和概念去思考,才跟得上作者老師的思路。書上的實例代碼一般都很淺顯,生僻的函數和用法肯定會加以註解
我想你看書不高效,大概有兩種原因:
1你沒有認真看講解,直接看代碼,導致看不懂
2你一直在讀中國叫獸出的書
今天也在搜這個問題,以前一直不知道怎麼讀這類書,效率極低。谷歌一下偶然發現一篇文章,很有借鑒意義和可操作性,作者提倡每本書讀三遍:
我是學電子工程畢業的,在這個專業里我必須要用的編程語言只有C/C++,彙編和Matlab。在參加了一個創業周末的活動後,我開始對軟體開發、計算機編程感興趣,我決定要試一試,要進入這個領域。我發現,要想做一些編程項目,你需要去學一些完全不同的編程語言。
在過去的一年半里,我學會了Java(用於開發Android),Python和Javascript( HTML/CSS)(用於web開發),我慢慢認識到,這最好的從書本和教材上學習編程的方法是把它們讀3遍!!用這種方式學習新的內容能更好的幫你理解新語言/新概念。我相信這種方式能幫助你最大限度的從書本中汲取知識——不論你看的是什麼書。
- 讀第一遍
我的第一遍對編程書的閱讀只做到粗淺的理解。在第一遍中,我努力跟隨作者的思路,讓他通過例子指導我前進。我學會編程語言的語法,但不完全,我努力理解程序是如何工作的。在第一遍閱讀中我不動手敲代碼。我想,我之前有編程經驗,在讀任何編程書籍時都可以跟得上作者的思路。我並不期望在第一遍閱讀後就能用這種語言編程,就能把這些新知識運用到項目中。我得到的是對這本書里的內容有了很好的感覺。(順便說一句,我通常一次只讀一章或一節,不是一次一本書讀完)。
- 讀第二遍
在第二遍里,我開始寫代碼。我通常會把各節里的例子敲打出來。為什麼要先讀一遍書然後回來再敲代碼?因為這樣我就知道了這節里都講的是什麼,我能先知道這代碼能幹什麼或不能幹什麼。我有了全局的感覺,而不是盲目的敲代碼,等著下一章被告知謎底,這樣又需要回來重讀這一節。在理解的情況下敲代碼能幫助我記憶語法。
- 讀第三遍
在第三遍閱讀中,我試圖在不參考書中的代碼的情況下寫出書中的例子和做出章節里的練習,我會直接跳到相應的章節或習題部分。在這個階段,我能很好的記住這些章節里涉及到的語法,我能完全可以解決這些章節里給出的習題或問題。
就是這樣…
這就是讓我學會了Java,Python,JavaScript的方法。另外一個學習新語言或新概念的好方法是做一些個人項目。如果你想更多的了解Java里GUI和圖像方面的知識,那就試著開發一個象棋遊戲,這樣會督促你閱讀一些圖形、動畫、界面,甚至驅動方面的書籍。
如果你在做一些個人項目時不讀這個語言的相關資料,那你就不能在實現這個項目的過程中運用最佳的實踐方案,你只是在試著完成這個工作。你同樣無法知道如何真正的用這種語言編程,尤其是當你以前不是用的這種語言的時候。你也許會用Java寫出C語言風格的代碼,因為你還沒有學會用Java實現這種任務的方式,你熟悉C語言,你只是用Java的語法實現了這個功能。
我認為作為一名初學者應該先從書本學起,而不是先找培訓班或其他。你能從書本中獲得基本的概念。但當通讀了一本書後,不要把自己局限在書上提供的一些練習上,試著做一些自己的軟體項目。一定要親手打出書上的那些代碼,不要以為對這些代碼看懂了、理解了就足夠了!
我並不是一個編程高手,但通過這種方式學習編程開發,我確實學到了很多。讓我知道你對我的這種方法有什麼不同的見解,請寫在留言里。
[英文原文:How I Read Programming Books ]
我不太認同高效這個詞,有的書我認為是需要仔細啃一啃的,既然要仔細啃一啃,那麼效率肯定談不上有多高。
舉例:演算法導論,正文講解部分至少得看懂疑問越少越好吧,給了代碼的自己得寫點試驗程序試試吧,每章後面還得做做練習題,這就干出去不少功夫了。
首先我覺得要對不同種類的計算機書籍有不同的閱讀和學習方法。
1、語言類《XX程序設計語言》、《XX語言編程思想》、《XX語言設計模式》等等,還包括一些應用實例類。語言,是一種交流的工具;計算機語言同樣如此。就像學習漢語、英語一樣,先從單詞、字詞;到造句和寫文章;程序設計也是一樣的,變數類型、關鍵字、循環、過程化、類等等語法和邏輯。要像寫文章一樣去設計程序
2、公共類包括各種演算法類書籍、操作系統類、資料庫類以及數據結構類等,還包括軟體工程、項目管理類等。這一類書籍之所以是公共類,就是說無論你學的是什麼語言,都需要掌握的。無論你是中國人還是外國人,都需要能夠清楚的表達自己的思想和邏輯,讓其他人理解。
3、應用類包括遊戲類編程、互聯網編程、移動開發、嵌入式等。根據計算機應用的不同領域細分出來不同開發模式和語言。其實用什麼語言都能表達你想表達的東西,只是那個更適合的問題。底層驅動編程用彙編、嵌入式多用c、上層應用多用c++、java等;還包括python、php等等。。。
無論哪一種書籍的閱讀,都要跟練習聯繫在一起。不僅要看書,更多的是實踐、動手。所以針對你的問題,多半是我說的語言類第一種。這樣你大可不用太關注書籍中的代碼實現,因為很多代碼都是斷章取義、或實現錯誤的;還是需要你在看書的同時在電腦上多實踐;多調試;多交流。
看書只是輔助,當你寫代碼寫出迷惑的時候去看書,這樣帶著目的的看書效率比較高
讀一本技術類書籍,最好你自己要能明確,讀這本書,你希望學到的是什麼,核心的技術是哪一塊。
接下來,首先找到最核心的章節,大致了解一下該核心技術涉及到哪些周邊的技術,了解完了以後,對外圍的技術概念進行學習和掌握,為學核心做好鋪墊。
外圍有一些生僻的技術,可以略過,只要知道大概有這個東西存在就可以,這樣可以節省時間,提高效率,把精力放在最核心的章節上。
示例代碼只是幫助你理解的,不是非要一個個都看很仔細,理解了書所講的思想後,可以自己用代碼來實現,還有很多庫函數什麼的用到的時候可以現查,不必都記住。
推薦閱讀:
※如何增強自制力,堅持利用時間管理系統?
※番茄工作法每天工作總時長的上限應該是多少個25分鐘?
※為什麼老程序員的效率如此高?
※在實驗室/辦公室里有哪些非常容易學到的小技巧可以提高工作效率?