CS專業書籍(科學與技術類)應該怎樣閱讀?
update
感謝各位的熱心回答,剛拜讀諸位的回答,說一下平常的讀書方法,跟各位討論一下。1,閱讀材料一般尋找難度i+1的,但是這個比較難以把握,無法正確評估也是個問題。2,邊閱讀邊做筆記,我一般是將其記在書上,每章節整理一次。(今後嘗試在閱讀時用思維導圖歸納思路)這一步就會沉迷於細節中的東西了,總是忘了把握框架。思緒有時天馬行空,我能從代碼想到寄存器,想到數學證明,如何證明這個問題(都有點近乎偏執了,我總想用數學的思維來考察計算機問題)。如此,第一遍通讀也變得很慢了。3,整理筆記,之後若有所得遍記到筆記中。
今後打算嘗試下循環閱讀的方法——進行新一章時,把前面的回顧通讀一遍(這是我在讀英文小說時學到的辦法)。………………………………………………………………………………………………………………………orz本人CS專業在讀,也已經看過少量專業書籍名著,但閱讀速度低下,理解也不夠太深刻。平常讀《演算法導論》,《具體數學》,《編譯原理》等書籍的時候總是會瞎想——這個問題咋這樣,這個地方又怎麼這樣。總是過分沉迷於細節,有時候一句話,一個定理,甚至一行代碼都能想半天。雖然讀書時也是邊讀邊做,但是一天的進度也就那麼幾頁。看著這麼多的大部頭,頭好大啊。而且就本專業而言,專業性的書籍也是很多,有待學習的東西太多了,這就讓我很焦慮。學業成績上的A並不能代表什麼,現在就覺得自己一無所知。敢問知乎的各位CS大神平常是如何閱讀,如何學習提高自己專業素養的呢?小弟跪謝orz
這是我在別的一個問題下的回答,放在這裡也適用。
自己看書確實是一件效率比較低下的事情,在知識量不是很充足的情況下,一般很難get到書中的重點,雖然從頭一頁一頁地看起也行,但是這樣的看法效率低下且看不了多少就會厭倦了。
在初讀某一本書大部頭的書的時候(計算機或數學等),正確地方法是找一份閱讀指南,一般這種書都會作為某一門課的教材,所以把這門課的課程安排作為閱讀指南再好不過了。比如說你需要閱讀《Introduction to Algorithms》這本書(1000+頁,妥妥的大部頭了),如果從頭看起,可能就會抓不住重點,什麼都按照相同的優先順序來學習。看書、卡住,做習題、卡住,心情煩躁、不看了&>&>d(?-?)b&<&<正確地做法,在Google中用「MIT Algorithms」作為關鍵詞搜索(或者其他的關鍵詞),很容易就找到了這門課Introduction to Algorithms,然後找到Readings部分,就會看到閱讀任務:
跟著上面來就行了,還附帶了Lecture、Assignments(有選擇性做題),比自己瞎看不知道好多少了。初讀英文資料,肯定會遇到很多的困難,基本上只要把生詞關過了就行,不會就查,就那麼幾個單詞,多查幾次就記住了,而且以後的資料基本也就是這些專業辭彙。看懂了什麼意思並不代表理解了這部分知識,可以通過做習題來檢查自己是否搞明白了(一開始看書要有選擇性地做題,不要從頭做到尾一題不落),搞不懂就多看幾遍,反正也沒幾頁的內容,實在不行還有Google呢。
我感覺,對於一門學科來說,它的層次是這樣的,首先是形成這門學科的所必須的其他學科的基礎理論,然後是構成這門學科的基礎理論,最後是從這門學科的基礎理論發展而來的應用。對於計算機科學而言,數學、資訊理論等等,這些理論是其形成的基礎,而形式語言、計算複雜性、程序設計原理等等是其學科理論構成的基礎,像組成原理、編譯原理、操作系統這些,就離應用較近了,那些各種編程語言、各種工具,那就完全是應用了。這種不同層次的抽象,看上去就像是,自頂向下的方式、自底向上的方式,兩種不同的學習路徑。但是我感覺並不是這樣簡單二分一下就行的,因為要是自頂向下的方式,誰能直接從元數學開始學?學好了然後再往下學?或者直接學好哲學再學其他的?要是自底向上的方式,誰能把所有的具體應用學完在學理論?所以這種簡單二分的方式是不行的。從自己的經驗來看,可以採用這樣的方式,即,同時涉獵多個層次的學習,但有所側重。這樣的方式一個顯而易見的好處是,對於實際的應用而言,可以知道其理論基礎,而對於理論,又可以了解其應用,加深對理論的理解,實際上就是理論與實際的雙向溝通。其他的,比如可以根據自己的實際情況,動態的調整自己學習的側重點。這也是最大的兩個好處,多層次,靈活。具體的讀什麼,如何讀,相信每個人都有自己習慣的方式,這裡推薦,《如何閱讀一本書》。
我也是經常讀這些書,說下我個人的經驗吧,首先要有個整體脈絡和結構,思維導圖可以幫到你,我一般是一邊看一邊做導圖,整體脈絡有了後,讀每一章節的時候要帶著問題,以一種想找出答案的心思去讀,技術類的書如果沒有興趣和問題的指引,很快會覺得枯燥,至於你說的,在細節上過於花費時間,這個得找到一種平衡,書不是只讀一遍的,過於糾結細節,會陷入一種遲遲沒有得到反饋的狀態,祝題主讀書有更多收穫
不是大牛,說下我的感想:1.不必焦慮。這是一個量變到質變的過程。你覺得很難理解的地方,恰恰是你最欠缺的知識點,你下功夫把它吃透了以後,你的知識的木桶上最短的那一根又變長了一點。2.慢不要緊,但要有計劃。假如一本500頁而且非常晦澀的大部頭,如果你慢慢啃,每天只能啃5頁,也只不過三個半月你就拿下了。三個半月看完一本大部頭,速度並不慢。很多人大學四年,數數才啃了幾部?這裡的關鍵是,要保證這5頁,不能半途而廢。
你應該看簡單一點的書。循序漸進。
必須完成first through
雖然肯定記不完 但是必須看完 重點在於留有印象 學過 之後翻書知道哪裡找
之後再回顧就印象深了 或者做下章後練習 或者來知乎答相關題目 喚起二三次記憶
磕了好幾本原文教材
200+ ~ 800+都有經驗之談應該不要讀.
將源碼全部翻譯成中文.你學得更快.那上面的書,都沒意義.
真的.我讀了的.外國人寫得出來啥好書.不過是你吹捧我,我再吹捧你罷了.幾頁的真東西要寫幾百頁,你們還去讀.我真受不了了.說他們有幾頁真東西,已經算很給面子了.看源碼,不要看書.
一定記住.學習秘訣就是看中文的.
不要看裝逼犯的.沒用.如果為了裝逼去學,你最後什麼都得不到.真要學得快,就練.
不要看.那些書沒用.真的沒用.也沒意義.設計模式裝逼用.具體看中文教材.中文教材管用多了.
不要只會學習,不會動腦.
不要只會跟著別人後面走.學好數學才是王道.計算機不過是數學的工具而已.
老外的書,那麼厚,真東西少.那些喜歡看的,去看吧.
http://web.stonehill.edu/compsci/history_math/math-read.htm
總體感覺就跟剝洋蔥差不多,但是我覺得也不一定高效,每個人都有自己的方法,以下是我的:
1、先讀目錄和引言部分,對全書有大概了解;
2、通覽全書,記下不熟悉的高頻辭彙,比如貝爾曼福特演算法,哈夫曼樹,希爾排序,KMP演算法,第一遍讀肯定亂七八糟,不知所云,不要怕,淡定百度之,存在筆記中,經常翻並理解;3、串聯階段,形成知識結構,書內的聯繫搞清楚,比如TCP和UDP的原理都讀過了,可以對比下啊,然後TCP有哪些應用協議,比如telnet,比如http,然後telnet埠號多少,telnet是怎麼實現,http訪問的過程是如何的,UDP有哪些協議,噢!DNS,DNS是怎麼實現的,如何搭建DNS伺服器等等,這樣層層推進,就跟德軍的裝甲兵團在歐陸上推進一樣; 最關鍵的就是結構形成,無結構不讀書,因為一個個散點是無法固定的,最後還是忘,跟沒讀沒什麼兩樣,但是這時候也會很疲勞,不想繼續深入了,無限風光在險峰,堅持吧,技巧只是一個小小的方面,重要的是堅持以及保持好奇。 以上~~有兩種閱讀
1.為了獲取信息而閱讀2.為了增進理解力而閱讀
讀經典大體上是屬於後一種的, 所以閱讀速度慢也是應該的~
PS: 推薦閱讀《如何閱讀一本書》, 該講的它都講了建議: 邊讀邊做筆記課後題儘力完成一章結束後整理筆記(整理的過程可以幫助你消化, 至於以後會不會去看又是另外一回事了~)首先不是CS專業人士,試著從當年自己看英語原著大部頭的經驗說說吧。 當年剛拿到那本書時,翻開一看,覺得滿頁單詞有一半是生詞,一個晚上七點開始看,三四個小時只看了三四頁。基本上一句話就要翻兩遍牛津詞典去查生詞,還要把生詞摘抄下來,速度慢,效率低,即使查完一整頁的單詞,往回一想,還是不知道這一頁在講什麼,當時那股挫敗感和焦慮情緒幾乎使得我放棄。但還好,當時咬牙堅持下來了。這樣每天堅持看兩個月之後,發現一頁裡面不認識的單詞越來越少了,看書的速度也越來越快了,也能看懂了。
現在回想起來,當時自己也有你的疑惑,一本大部頭,怎樣才能高效率地看完?
現在我想跟你分享的是:當時看英文原版大部頭時,有個最基本的問題——單詞量太少!所以每看一頁都那麼艱難。 我想題主也是類似的問題,剛開始看時自然有好多知識點不懂,而CS類的書籍邏輯性又強,假如前面的章節沒弄懂,後面的章節自然更看不懂,所以才會效率慢。 所以題主也不要急躁,堅持一段時間,把基礎知識點都吃透,做好知識點歸類總結,形成知識點體系,到後面慢慢也就能更高效率地學習了,貴在堅持!難帶不都是買來放在書架上,早晚拜一拜就好了么……然後寫代碼的時候Google之…… (太羞恥了…… 於是匿名吧
根據自己的實際情況,選擇你所在領域合適難度的書來讀,應該就不會遇到這種看哪哪不會的問題。
選好書之後,我也贊同其他答主提到的,先略讀,記住一些重點,沒事再多翻幾遍,讀的過程適當記筆記,有實踐的跟著寫例子,熟悉之後就可以放在手邊當字典查了。
實在要看難一點的,不妨當作睡前讀物,一看就著,有助睡眠。接觸計算機專業已經六年了,這六年時間裡肯定要讀很多計算機相關的專業書籍。坦白說,這六年里我養成的讀書習慣自己並不太滿意,總覺得效果沒有那麼明顯,效率並沒有那麼高。
現在有閑暇時間,反思了自己以前讀書習慣存在的問題,也搜索了一些小有成就的大神分享的讀書心得,再結合自己的習慣,制定了下面幾點策略。算是分享,更是一種自我鞭策。
我簡單的將專業書籍分成了入門級和進階級兩類。不管哪一類書,我覺得第一位的還是實踐,裡面的代碼還是要自己敲一敲。但是,我這裡先不討論實踐的問題,而是將重點放在單純的閱讀這一層面。
對於入門級,個人認為就是讓你知道「有什麼是什麼怎麼做」而已。所以,對於這類書籍,一般就是列一下全書的框架,進行一下簡單的層次劃分,然後在框架的基礎上進行全書通讀,讀完基本就能夠知道「有什麼是什麼怎麼做」。
對於進階級的書籍,個人認為就是讓你知道「為什麼以及怎麼高效地做」。對此,我做出的策略就是以下三點:
1.通讀前列出框架,進行層次劃分。
以前讀書基本就是上來就讀,可是很多時候會發現,讀過之後很快就會忘記自己讀過的內容,而且各章節之間也很孤立,不能融會貫通。一次偶然機會讓大牛推薦幾本比較經典的書籍,大牛就將要推薦的書的內容列的清清楚楚。這本書從哪幾部分講的,每部分大概講了一下什麼東西大牛都記得清清楚楚。我突然意識到,也許這就是一種很好的方法啊。又回想了一下自己考研複習階段對於專業課的複習也是採用類似方法,似乎確實比盲目的通讀印象更深刻。2.讀時要自己深入知識點,有問題就查資料。
之前讀書時候很多東西都是似懂非懂模稜兩可。進階級書籍想一遍全部讀懂幾乎不可能,很多時候只能通過通讀泛讀精讀這樣一遍一遍的讀才會讀懂的更多,這確實是一種特別有效的方法。但我在這裡想能不能通過一遍就儘可能多的讀懂更多呢?我覺得就是要在讀的過程中自己主動地深入。比如作者講了一個機制,那你可以查一些資料看一下這個機制的原理,產生原因等等,很多書中寫的不是那麼詳細,而你又恰好不懂或者你覺得你應該搞懂這部分內容,那就自己查資料搞懂。當然,這樣做的代價就是拉長了每一遍閱讀的周期。3.讀後針對具體知識點整理博客。
根據實際工作學習中的體會來看,很多時候為了解決實際問題而去學習研究往往特別高效並且理解更加深刻。比如我想使用某種機制來實現我自定義的某種功能,那我在研究這種機制時候往往需要搞得很清楚,盡量避免似懂非懂。所以說,實踐中學習是最好的學習方法。但這裡我僅僅是討論純粹的閱讀,暫時先排除掉實踐。那排除實踐之後怎麼才能深刻的理解書籍內容呢?那就是寫博客。給別人講總會驅使自己盡量避免錯誤和模糊。在閱讀過程中,可以針對某部分內容,用前面提到的第二點的方法,搞得越懂越好,搞懂之後就自己整理成技術博客。整理成博客既能夠給大家分享一些技術內容,也能夠讓自己產生成就感,而且可以讓自己實時回顧知識點,並促進前面提到的第二點方法的執行。說了這麼多,其實更多的還是紙上談兵,說起來容易可是做起來並不是很容易,實際效果有待檢驗。人往往會延續以前的習慣,因為那樣代價小並且對自己來說更輕鬆舒服。但要進步就要不斷的突破,準備以後強制自己按照目前指定的策略進行閱讀,檢驗方法,也鍛煉一下自制力。一家之言,僅供參考,若能引發大家點點靈感,不勝榮幸!
有的書第一遍讀的確很難懂,我也讀過好幾本大部頭的書,有簡單的有難的。
第一遍讀不懂可能不是你的原因,可能是作者沒有細講,這時你可以上網查查資料或者找另一本書看看這個知識點在別的書上是怎麼講的,再回頭看看,這種辦法可以解決大部分問題。
如果經過以上步驟還是沒有懂,果斷跳過,因為這可能是你知識還沒有積澱到一定程度,隨著學習的深入,你可能就漸漸領會了曾經搞不懂的問題。
看書認真固然重要,但效率也很重要,經典好書那麼多,如果看的太慢,那麼什麼時候能看完!同樣大學狗,不是大神,就說一下我的方法吧。我認為最重要的一點:絕對不要把自己讀煩了。首先翻一翻,知道每章講什麼。如果不難啃,就按順序來一遍,不求甚解,只要自己能想通就好,睡覺或者睡醒的時候想一下有些什麼內容,能回憶幾個關鍵詞就好。每天定量,如果超額完成就獎勵自己一下,比如玩個遊戲什麼的。一天之內看的久了就換本書,每過幾天就休息一下,這天不看。第一遍先看完,以後遇到問題想不起來再回來翻。如果比較難,那就先挑一個自己感興趣的部分,當中有不懂的部分就針對這部分到前面找,或者博客論壇找一找。這部分看完就遞歸,再挑一個感興趣的。。。不要讓自己厭煩,從而效率低下,浪費時間。而且也不要擔心一遍記不住,以後隨手翻一翻,哪部分感覺陌生就再看一遍,有問題多去書上找(所以我都是看實體書,翻起來方便,&>_
帶著問題讀
要學項目,先看視頻,跟著寫,然後再想著自己獨立開發,至於書呢,我覺得,一開始以技術為主,然後,再提升。
慢慢讀,一天幾頁挺快了。經典的書籍並沒有那麼多,關鍵是讀懂。。。
我的經驗是在考試前閱讀效果最好
CS1.5還有專業書籍?
推薦閱讀:
※怎麼學習教育學?
※有什麼手機壁紙一看就想學習?
※既然數學這麼重要,為什麼歐美國家對數學的要求卻很低?
※高效的學習方法有哪些?
※如何時刻讓自己努力學習??