如何正確閱讀計算機科學書籍?

文章推薦指數: 80 %
投票人數:10人

如何正確閱讀計算機科學書籍?

轉:編程派

作者:Joshua Nie

來源:http://joshuais.me/how-to-read-technology-book/

作為一個研發工程師,無論你是否喜愛閱讀,相信你都一定讀過不少關於計算機技術的書籍。

這其中不乏《21 天學會 JAVA》這樣的語言入門書籍,也有《算法導論》這樣的專題書籍,也有《人月神話》這樣關於軟體管理學的實用性的書籍。

也許你已經讀過他們中的大部分,也許你現在還在不斷地購入新的書籍來補充你的知識庫。

但請稍等一下,你是否思考過這樣的問題,面對大量的計算機科學書籍,你是否都真正讀懂了它們呢?有多少本書,當你將他放在書架上之後,就再也沒有重新打開過?有多少知識是真正被存儲在你的大腦中,並隨時可以提供調用?拿到一本書後,高效閱讀的正確姿勢的什麼?

如果你有以上的疑惑,那麼接下來,我們將一起探討一個問題,如何閱讀一本計算機科學類書籍。

閱讀的四種層次

首先,我們先要學會如何閱讀。

你可能會覺得不可思議,我已經接受過高等教育,怎麼可能還不會閱讀。

然而可悲的是,現代教育體系中,恰恰忽略了對閱讀能力的訓練。

我們在初中之後,閱讀水平就幾乎沒有機會再得到提升。

總體來說,閱讀分為四種層次,分別是:

  • 基礎閱讀

  • 檢視閱讀

  • 分析閱讀

  • 主題閱讀

這其中的概念來源於莫提默·J·艾德勒和查爾斯·范多倫的著作《如何閱讀一本書(How To Read A Book)》,這裡我必須對其中的概念做簡單的總結,以便在後續的篇幅中,我們能統一對閱讀名詞的理解。

基礎閱讀

當我們完成中學學業後,我們中的絕大部分人,都已經掌握了基礎閱讀的能力。

在這個層次中,我們關心的是,書里的每句話是什麼意思。

這是一個最基礎的層次。

檢視閱讀

檢視閱讀,我們也可以稱之為快速閱讀。

快速瀏覽全書,了解書的主題,架構全書,提出核心問題。

這並不是很新鮮的概念,但很多人可能並沒有思考過,為什麼要做檢視閱讀。

檢視閱讀作用是為了幫助我們篩選這本書是否值得閱讀,同時為接下來的分析閱讀打下基礎。

在這個層次中,我們關心的是,這本書在講什麼。

分析閱讀

分析閱讀是一個更為高級的閱讀層次,目標讓我們能充分理解本書,與作者對話。

其中包含了多個階段,這裡不再詳述,有興趣的同學可以研讀原著。

主題閱讀

當我們跨越過分析閱讀後,這本書已經被我們掌握。

此時,我們會就相同的主題,閱讀不同的書籍,找出其中關聯與矛盾,傾聽不同的作者的不同聲音,從而對某個主題產生更加深刻的認識。

這個階段,我們關注的不再是某一本書,而是一個具體的問題。

計算機科學書籍的特徵

原著中針對不同類型的書籍,給予了不同的閱讀建議。

但由於所著時間很早,就計算機科學類圖書的閱讀建議,在書中並沒有專門設計章節闡述。

根據我的閱讀經歷,深感計算機科學類書籍,較其他類型圖書有著其獨特性:

單本書籍的信息量大

相較其他學科,絕大多數計算機科學類書籍並不是以得出結論並且論證結論為核心,而偏重於闡述方法和解釋原理。

有很多計算機書籍旨在剖析某個系統。

這裡的系統不僅僅指代諸如作業系統這樣的實體系統,還包括一門語言或者一套管理方法論這樣的理論系統。

而系統通常是由多個部分組成的綜合體,這其中勢必包含不同組成部分的不同細節,信息量之大可見一斑。

注重實踐

計算機科學是一門實用性的學科。

這裡的實用性可以理解為,計算機科學誕生的目的就是為了解決實際問題。

因此,幾乎所有的計算機科學書籍,都是以指導實踐為目標而作。

更新速度快

計算機科學的更迭速度可以準確地被描述為日新月異。

有些技術很快地火爆起來,又很快地消亡,所以有些書也就跟著很快地淹沒在時代的進程中。

分類細緻但同質度高

計算機科學對自己有著過分清晰的劃分,不同的技術之間往往邊界清晰。

我們很少見作業系統和資料庫系統在同一本書中論述,也不常見集不同語言之成的大作。

由於領域劃分細緻,相同領域的書籍,多數時候往往論述的是同樣的主題。

閱讀計算機科學書籍的誤區

絕大多數讀者的錯誤意識在於把所有的書籍都認為是層層推進的論述過程。

這樣的閱讀經驗一旦沿用在計算機科學類書籍中,就會感覺舉步維艱。

前文說過,大多數的計算機書籍都是在剖析系統,一個系統又是由許多相互關聯的部分組成。

解讀這類書籍,如同拆解一個機械,我們在拆解的過程,常常會犯下這些錯誤。

通讀全書

在你的頭腦中沒有對全書的結構有整體了解的情況下,從頭至尾通讀全書,意味著試圖從細節窺視一個系統的全貌。

這是一種低效的讀書方式。

當讀到中落時,你會因為沒有全局概念,而迷失在各種細節中,以至於完全失去了閱讀的方向和目標。

跳過序言

序言往往是很多人忽略的內容,似乎序言只是重複了正文的內容。

而正因為如此,序言以簡短精鍊的語言,為你分解了整本書的架構,幫助你把握系統的整體。

這項工作本來應該是讀者在閱讀全書之前的必備工作,絕大多數的作者都已經幫你完成了,而你需要做的僅僅是認真的閱讀它。

脫離實踐

前文說過,計算機科學類書籍重視實踐,脫離了實踐,往往就不能完全理解書中所述的理論和方法,過目就忘,紙上談兵。

忽視基礎

封裝在計算機的世界中是一個非常重要的概念。

計算機的發展史,總的來說就是一部封裝史:將底層不斷包裝,提供簡單的調用方式,由此不斷的擴展計算機的邊界和能力。

新的技術層出不窮,而他們的很多所依賴的環境和系統,從設計之初就沒有發生過質的變化。

有時,在追逐新的技術之前,深入了解他們所在的系統;在學習新的算法之前,掌握好其基礎的數學原理。

只有牢固的基礎才能支撐足夠結實的上層建築。

閱讀計算機科學書籍的建議

當了解閱讀誤區後,你們是不是已經發現閱讀這類書籍的核心原理呢?那就是將整本書當做一個系統,從整體到局部,層層遞進,逐步剖析。

根據這個核心原理,我總結了一些好的實踐方式。

檢視閱讀

當你拿到一本計算機科學書籍,第一步就應該快速瀏覽序言和目錄,然後用檢視閱讀的方式整理出整本書的大綱。

這樣,你對這本書是介紹理論還是關注實踐,所屬什麼分類,哪些問題是本書將會討論,而哪些問題是不被詳細討論的,這些信息你都會有整體上的認知。

這時,你就可以很輕鬆地判斷,這本書值不值的閱讀,哪些內容是你已經熟知的,哪些內容是你關注的重點,這樣做閱讀的效率將會大大的提高。

如果從來沒有使用過這種閱讀方式,開始實踐時,會受到一定的心理上的阻力。

可能你對某個專有名詞完全沒有概念,以至於整章的內容都模稜兩可。

這時,你應該堅持繼續閱讀,對不甚理解的內容,先記住有這樣的概念。

絕大多數的時候,經過檢視閱讀後,過程中的問題都會有所釋懷,剩下依然沒有明白的內容,視其重要性,再決定是否對其進行分析閱讀。

提取問題

當你了解了整本書的全貌,一般而言,你會發現,有些章節你已經熟悉,有些章節你全然不知。

這時就要對這些章節進行分析閱讀。

分析閱讀的很多步驟和方法在《如何閱讀一本書(How To Read A Book)》有詳細的介紹,這裡不展開細說。

但有時,你在閱讀的過程中,會發現閱讀的興趣在下降。

信息量愈大,閱讀的動力愈弱,最後你就迷失在信息的汪洋之中。

我們應該如何避免這樣的信息疲勞呢?答案就是去掉冗餘的干擾信息。

在上一個建議中,我們強調了檢視閱讀的重要性。

那檢視閱讀的成果是什麼呢?那就是你對每個部分(不一定是書中給你劃分的章節)所提出的問題,也可以稱之為閱讀目標。

而你要做的就是,找到這些問題的答案,完成自己的閱讀目標。

這樣做過濾了很多作者認為重要,其實和你關心的主旨沒有聯繫的信息,減少了信息疲勞。

同時,不同部分之間有關聯的問題,可以幫助你更好的串聯全書闡述的核心概念,把握整本書的主要脈絡。

例如,我在閱讀《深入理解計算機系統》的異常控制流時,就提出這樣的問題:進程是如何管理內存?而部分的答案,在下一個章節虛擬內存中。

當我解答這個問題時,我就會將這兩個分離的章節的內容,通過一個問題聯繫在一起,加深了自己的理解。

持續重讀

一本經典優秀的計算機科學書籍,值得你反覆的閱讀。

不要覺得整本書我已經完全理解,就再也不需要重新回顧閱讀了。

因為此類書籍存在大量信息,而這些信息並沒有必要占據我們大腦有限的記憶存儲空間。

我們要做的就是認真做好第一條建議,當我們需要使用這些書籍解決問題的時候,能第一時間在其中找到我們需要的信息。

毫不誇張的說,計算機科學類的書籍生來就是供人反覆翻閱的。

鑑別爛書

作為閱讀愛好者,誰能說自己沒讀過幾本爛書呢。

在計算機科學這個類別中,爛書的比例一點也不比其他學科低。

信息重複(抄襲),結構混亂,論證不清晰(作者對某個技術一知半解)等等,都是爛書的特徵。

關於爛書,我們要做的就是第一時間將其鑑別出來,然後放到自己的黑名單中。

具體如何鑑別爛書,由於本篇幅太長,我可能會新開一篇文章單獨討論。

結語

以上就是我對於如何閱讀計算機科學類書籍的理解。

本來想縮短些篇幅,但最後還是決定保留那些我覺得應該詳細論述的部分。

畢竟這篇文章的初心並非是廁所讀物,而是一個閱讀愛好者認真地與讀者探討一個嚴肅的話題。

如果可以,我希望在通過我不斷地探索,閱讀能力的持續提升,我還能在此寶地繼續這個話題,完善我的理論。

我在下面列出我認為經典優秀的計算機科學書籍,也歡迎大家補充,排名不分先後。

  • 《算法導論》Thomas H.Cormen、 Charles E.Leiserson

  • 《深入理解計算機系統》Randal E. Bryant

  • 《人月神話》Frederick P.Brooks

  • 《編程珠璣》Jon Bentley

  • 《高性能 MySQL》施瓦茨 (Baron Schwartz)、 扎伊采夫 (Peter Zaitsev)

  • 《代碼大全》Steve McConnell

  • 《程式設計師修煉之道:從小工到專家》亨特(Andrew Hunt)、 托馬斯(David Thomas)


請為這篇文章評分?


相關文章 

如何閱讀計算機類書籍

作為從事軟體開發工作的人來說,閱讀計算機類相關書籍一定是不可或缺的。面對浩如煙海的計算機書籍,我們是否思考過,如何才能真正的讀懂它們。所以如何閱讀計算機類書籍是我們要思考的問題。

除了基礎閱讀,還要學會這三種閱讀方法

很多人看書,都是從正文的第一頁開始,從頭看到尾,中間遇到不懂的地方,還要去找度娘查詢。直到讀完最後一頁,才開始回憶整本書的框架和主要內容,但經常會因為前面看的東西太多而忘記說了些什麼,只好重新翻...

《如何閱讀一本書》——書評及內容綱要

文章目錄★為啥要推薦這本書?★此書的影響力★閱讀的目的★主動閱讀 vs 被動閱讀★閱讀的層次★如何讀不同類型的書籍★閱讀與心智的成長★為啥要推薦這本書?  俺寫博客奉行一個宗旨——【