當前位置: 華文星空 > 知識

電腦的書籍動輒幾百上千頁,作為學生真的有必要啃這些大書嗎?如果有必要,該如何提高效率的看書?

2020-07-24知識

我在知乎寫了 60 多篇的技術文章 ,平均每一篇都 1W+字,寫的內容都是電腦基礎類的,比如電腦網絡、作業系統、電腦組成、數據庫等等, 在寫這些文章的時候,看了很多答住所說的動輒幾百上千頁的電腦書。

作為過來人,中途也踩過很多坑,浪費了很多的時間,好在及時反思,調整了看書的方法,後面學習的效率立竿見影。

所以, 我教大家怎麽看這些厚的不行的電腦書!

一、 不要直接選擇困難模式

大家應該知道電腦書裏有個黑皮系列的書,黑皮系列的書有一個共同的特點就是 厚重

我相信不少小夥伴在想要學習電腦基礎類知識的時候,就買了這類黑皮書,書到貨後,我們滿懷信心,舉著厚重的黑皮書,下決心要把這些黑皮書一頁一頁地攻讀下來,結果不過幾天就被勸退了,然後就只有前幾頁是有翻閱的痕跡,剩下的幾百頁都完全是新的,最終這些厚厚的黑皮書就成了 墊顯視器的神器

黑皮系列的書確實都是經典書,豆瓣評分都很高,知識點很全面,是好書無疑。但是這類書並不適合新手入門,你想想我們學習中文的時候,你是拿著新華字典學的嗎?很顯然不是。

黑皮書就好像遊戲裏「困難模式」,新人一上來就玩這個模式,根本就體會不到遊戲的樂趣了,解除安裝了遊戲那還是小事,如果留下心裏陰影,造成不可逆的傷害,這就非常不好了。

說白了,這些厚的不行的電腦書不適合入門,我們應該先從「簡單模式」慢慢過渡, 要屠龍,得先從新手村起步

就拿我親身經歷舉例。

當初在學習電腦網絡的時候,看見大家都說【電腦網絡-自頂向下】和【TCP/IP 詳解】這兩本書好,我立馬買了學習,這本也是黑皮系列大厚書,奈何小林當時太菜,根本就砍不動這本書,砍兩下,刀鈍了,就想睡覺。

後面又找了一波書,發現【圖解 TCP/IP】、 【圖解 HTTP】、【網絡是怎麽連線的】這幾本書都不厚,而且搭配了很多圖,我又立馬買回來學習。

這幾本書讀起來不會太困難,不出一個月,我就把這三本書看完了,立馬對電腦網絡有了個整體且清晰的認識,終於知道了網絡七層模型是什麽,也知道了兩台電腦是如何透過網絡進行相互通訊的,也知道 HTTP、DNS、TCP、UDP、IP、ICMP、DHCP、ARP 這些常見的協定是用來幹嘛的了,成功突破了新手村。

雖然突破了新手村,但是學的知識還不夠深入。

所以,我後面回來看【電腦網絡-自頂向下】和【TCP/IP 詳解】這兩本厚厚的書,不過這次就不會那麽吃力了。

後面回看這兩本書時,我也沒有選擇從頭看到尾,因為有些內容和在新手村看的書的內容積比重疊了,而且由於在新手村裏知道了哪幾個協定是常見的,於是就選擇了這幾個協定的章節進行深入學習,比如:

  • 我想進一步學習 TCP 協定的特性,於是就跳到【TCP/IP 詳解】書裏講 TCP 協定的幾個章節,我就從中學到了 TCP 流量控制、超時重傳、擁塞控制等等。
  • 我想進一步學習 IP 協定,於是就跳到【電腦網絡-自頂向下】書裏講 IP 協定的章節,我就從中學到了 IP 協定更多的細節,IP 包頭的各個欄位用途、尋址、路由轉發的原理等等。
  • 看了黑皮書,我也深刻感受到黑皮系列的書確實經典,知識體系很全面,也很細節。

    但是這種大且全的書並不意味著適合入門,新手很容易就在各種細節中迷失,而且書上有些不常用的協定我們是可以選擇不看的,如果不知道重點很容易就把時間浪費在這些地方,得不償失。

    我是在新手村學習裏抓到學習電腦網絡的方向,也就是把「 鍵入網址,到網頁顯示,期間發生了什麽? 」這個問題所涉及到的協定都要掌握,比如 HTTP、DNS、TCP、UDP、IP、ARP、MAC 等等,然後再查黑皮書對應的章節來深入學習對應的協定。

    就這樣學成電腦網絡後,我在知乎共輸出了 20 多篇圖解網絡系列的文章,總字數高達 15W 字,並且手繪的圖共有 500 張, 收獲了很多讀者的認可和支持,不少讀者跑來感激我,說我的圖解網絡在面試中幫助到他們,不少人拿到了阿裏、騰訊、字節等大廠的Offer。

    為了幫忙閱讀我把 圖解網絡 整理成了PDF,大家可以作為面基突擊的手冊,開源給大家下載:

    不僅僅是電腦網絡,我在學習作業系統、電腦組成原理、網絡編程等等也是用這套方法,都是先看新手村的書,得知了哪些是重點知識後,再跳到黑皮書裏對應該知識的章節進行深入學習。

    當初在學網絡編程的時候,看見網上的人都說 UNP(Unix 網絡編程)、APUE(Unix 高級環境編程)這兩本書是網絡編程聖經的書,那麽好學的小林,那肯定毫無猶豫買了。

    書到貨後,我瞬間就懵逼了,這兩本書是我買過最厚的書,這尼瑪怎麽學?

    跟著書本的節奏,學了一段的時間,是懂了些 Linux 網絡和系統 API 的用法,摸索來摸索去都是各個 API 的細節, 始終不知道高並行網絡框架是如何實作的

    後面我又重新找了一波關於網絡編程的書,找到了這兩本:【TCP/IP 網絡編程】和【Linux高效能伺服器編程】。

  • 【TCP/IP 網絡編程】絕對是新手村級別的書,書裏的內容不會有過多的術語,作者都用大白話來表達,配圖也很清晰,也有介紹我想知道的網絡框架,雖然是比較基礎的多行程伺服端模型、多執行緒伺服端模型、異步 IO 模型。而且最後一章實作了簡單的 HTTP 伺服端,讓我知道了從程式碼角度是怎麽解析 HTTP 報文的,以及狀態機是如何實作和運轉的。
  • 【Linux高效能伺服器編程】這本書主要是網絡框架為主,前幾章關於網絡基礎知識對於掌握了電腦網絡知識的同學可以直接跳過的,你看,很多知識是想通的,當我們知道掌握了這塊知識後,在學習新一本書的時候,就可以跳過重疊的內容。在這本書我學到了,Reactor、Proactor、訊號、定時器、多行程編程、多執行緒編程、行程池和執行緒池等。
  • 這兩本書讓我大概知道了如果一個伺服端要服務多個客戶端時,不是就簡單寫個 socket 編程就完事,而是還要結合 IO 多路復用 + 多執行緒的思想,也就是 Reactor 的設計理念,知道了這些事情後,後面我在看很多開源框架的網絡模型時候,發現大多數基於 Reactor 的思想來實作的。

    有了網絡編程總體的視角後,在需要深入理解 socket api 中各種內容設定(超時、非阻塞 IO、阻塞 IO 等)和例外處理就要回歸 APUE 這本書。

    到這裏我才知道 UNP 和 APUE 為什麽會被稱為網絡編程聖經級別的書,原因是書裏各種細節和異常都寫的很全,也很細致,可以應對工作中很多問題。

    但是事實證明,它並不是個入門級的書,所以 UNP 和 APUE 的用途比較像字典,在需要的時候去查閱就好。

    學習算機組成也一樣,我先看【程式是怎麽樣跑起來的】這本書,知道了程式跑起來的大概過程以及涉及到的知識點,然後帶著這個問題,從【電腦組成與設計】這本黑皮書找到每一部份的細節,透過進一步學習,知道了程式編譯過程,知道了 Intel x86 的指令結構,知道了電腦是如何儲存並計算浮點數的,知道了 CPU 執行程式的工作流程,知道了電腦儲存結構金字塔模型等等。

    所以,大家在學習的時候,應該避免直接學大而全的書,我們要先從入門級別的書看起,抓住了主線重點知識後,再透過查閱這類大而全的書來進行深入學習。

    二、 不要只局限學一本書

    我在學習的時候,有個習慣,喜歡找同類別的書一起學,就不會說學作業系統的時候,就只看一本理論書,而是結合 Linux 系統編程和內核分析的書一起看, 一層層的深入一個知識點

    比如,我在學習作業系統的時候,在【現代作業系統】學了「行程與執行緒」的內容,而這本書介紹的內容比較概念性的,知識點也比較籠統,不夠具體。

    然後我就會去學【Unix 高級環境編程】第 7 章「行程環境」、第 8 章「行程控制」、第 11 章「執行緒」、第 12 章「執行緒控制」、第 15 章「行程間通訊」,這一系列章節看完後,就知道了 Linux 是如果透過建立行程和執行緒,不只局限於理論了,還學會了套用。

    當然這還不夠,我還會去學【深入 Linux 內核架構】第 2 章關於行程和執行緒的Linux 源碼分析,發現 Linux 中行程和執行緒實際上都是用一個結構體 task_struct 來表示的。讓我很驚嘆的是, Linux 作業系統對於行程和執行緒的建立,都是呼叫 do_fork 函數實作的。

    只不過傳遞的參數不同,透過參數的不同來控制是復制父行程的資源(記憶體、檔描述、信號標等),還是參照父行程的資源,這樣會更加深刻知道行程和執行緒的區別。

    我學成作業系統後,也寫了 圖解作業系統 系列文章,現在已整理成PDF。

    現在開源給大家下載:

    再比如,我在學習電腦網絡的時候,在【圖解 TCP/IP】學到了第六章關於 TCP 超時重傳、流量控制、擁塞控制等內容,這本書講的比較淺。

    為了更深入理解 TCP,我就會去看【TCP/IP 詳解】第 17 到 24 章,這幾章都是詳細介紹了 TCP,在這裏會學到更全面的 TCP,比如 同時開啟或關閉、negle 演算法、往返時間 RTT 的計算、還有擁塞控制、快速重傳、快速恢復、慢啟動這些過程中的擁塞視窗是怎麽變化的等等。

    但是我在學【TCP/IP 詳解】遇到了點困難,因為書裏的案例有些地方看的不清晰,也不容易懂,特別是那些 TCP 抓包圖,看到瞎眼。

    後面我找到了本神書:【TCP/IP Guide】,很可惜只有英文的,我只看了這本書講滑動視窗和流量控制的章節,因為這本書的精華就是這兩個,其他的一般般,這兩個章節的配圖特別多,也很清晰。

    我就在這知道了發送視窗和接收視窗的工作過程,也知道了滑動視窗對流量的影響,也知道了作業系統記憶體緊張的時候,也會影響滑動視窗,以及糊塗視窗症候群等等。

    所以在學習一個知識的時候,大家不一定要把一本書從頭看到尾後,才去學另外一本書。

    最好的方式是在一本書看完某個章節的知識點後,馬上去學另外一本相對比較深入的書的對應章節的內容,這樣一層一層的深入下去,你對這個知識點的掌握就會很深刻了。

    三、 不要只看不動

    電腦類的知識都比較龐大,單純只看很容易就忘記的了,當然即使做了筆記也會忘記。

    就像小林寫了很多文章,每篇文章的內容我也不一定都記得住,但是當我回看文章後,知識點很快會被喚醒起來。

    所以記筆記的好處在於後面復習的時候,可以很快就能回想起來。

    記筆記的方式有很多種,手寫在筆記本、在書上標註、在 world 文件記錄等等,但這些我覺得都不是好的方式。

    我覺得比較好的方式是 思維導圖 ,把思維導圖當作一課自己的知識樹,每深入學一個知識點的時候,就開一個分支去記錄,記錄的內容最好是用自己的話來描述,而不是復制書上的內容,這樣只是單純的 copy,最好經過自己大腦的思考,用自己的話做個小總結,這樣的知識點不容易忘。

    還有很多知識其實可以結合 生活中的場景 來記憶,這樣想忘記都難,比如阻塞 IO、非阻塞 IO、同步 IO 和異步 IO,我之前文章用去飯堂打菜的場景來介紹它們之間的區別。

    再比如介紹各種行程排程演算法,我之前文章用銀行業務辦理的場景來介紹。

    曾經我也苦惱於那些晦澀難弄的電腦基礎知識,但在我啃了一本又一本的書,看了一個又一個的影片後,終於對這些「家夥」有了認識。

    我想著,這世界上肯定有一些朋友也跟我有一樣的苦惱,為此下決心,用圖解 + 通熟易懂的講解來幫助大家理解,利用工作之余,堅持輸出圖解文章兩年之久,我的文章都匯總到了網站:

    網站內容共 1000 張圖 + 50 萬字,網站宗旨讓天下沒有難懂的八股文!(口嗨一下,大家不要當真),網站地址(https:// xiaolincoding.com ):

    希望圖解網站成為你們上班摸魚必備網站哈哈!

    如果對你有幫助,別忘記給個三連呀,這對我非常重要

    也歡迎大家關註 @小林coding