推薦一些CS書籍

推薦一些CS書籍html

人少走的路

Quora提出了許多相似的問題,例如:「我如何在yyy月中學習xxx」。一般,「 xxx」是一些特定的新鮮技術。每一個人都想快速學習,但事實是,全部值得的東西都須要努力工做和足夠的時間,沒有捷徑。git

對於編程,從一開始就得到編程的樂趣是最重要的,而後應該創建信心以便進一步學習。最終,計算機科學的核心知識對於您的長期職業將是必不可少的。程序員

***技術應運而生,但原理卻趨於保持不變。***對於那些想成爲一名優秀的程序員的人來講,狹窄的方法是更好、更長的方法。所以,請閱讀最好的經典計算機科學書籍🙂。github

img

圍繞互聯網,教科書,視頻講座等,學習了大量有關CS的資源。網站eachyourselfcs.com涵蓋了大部份內容。面試

通用編程

對於通常編程類別,最重要的是向讀者展現CS或工程學的最終基本概念,編程的美感和樂趣。算法

好的通用編程書籍不只告訴您如何作,還解釋了其背後的緣由。編程

整體上良好的編程風格和慣例與特定的編程語言或技術無關。網絡

這些將幫助您如何思考,將幫助您成爲更好的程序員。數據結構

< 務實的程序員:從旅途到大師 >

主

本書討論了軟件開發的許多不一樣方面的最佳實踐和主要陷阱。它提供有關元編程,少許語言,測試,純文本界面以及開發的許多其餘方面的建議。併發

對於大多數問題和狀況,有不少相似的建議,須要長期投資,不要重複。若是發現須要重複的步驟,請使其自動化。若是您找到了一些須要掌握的工具,請學習使用最多的工具,以避免重複學習。

例如,一個建議是選擇一個編輯器並熟練使用它,這是真的。對我來講,我已經使用Emacs已有近10年的時間了,開始學習新編程時沒有新的學習曲線。

< 代碼完成 >

抄送

就像是新程序員的聖經。初版大約在25年前出版,但對於開發人員來講仍然值得一讀。本書涵蓋了當今與軟件構建相關的一系列普遍問題,而且編寫得層次分明。

它甚至使用一章來教您如何爲變量,方法,類選擇名稱。編碼不只僅是解決問題。咱們正在寫一些別人會讀的東西。這就是爲何在編寫代碼時命名很重要的本質。

若是您認爲編程只是寫做的一部分,那麼我固然會…

-大衛·海尼邁爾·漢森

<代碼完成>涵蓋其餘部分,例如調試,測試,錯誤處理,設計。這些是大多數編程語言和系統的通用部分,有時不會枯燥。

< 計算機程序的結構和解釋 >

SICP將向您展現代碼的美妙之處,如何構建一種小型語言,如何構建一個好的抽象模型,什麼是遞歸,併發,流和抽象。本書將教您用於控制大型軟件系統的知識複雜性的技術。

傻瓜忽略了複雜性。實用主義者遭受了它。有些人能夠避免。天才將其刪除。

-艾倫·佩利斯(Alan Perlis)

它將改變您對編程的見解,改變您對計算的見解,它有助於您對計算機科學的基礎有紮實的瞭解。

有一個在線版本:http : //sarabander.github.io/sicp/

算法

只有10%的程序員能夠編寫二進制搜索,這會讓您感到驚訝嗎?

的確,許多程序員對算法沒有足夠的知識和理解,大多數程序員都會有一些面試的實踐,而後在找到工做後就流連忘返。可是算法對於解決問題是必不可少的。

有不少關於數據結構和算法的教科書,可是這些是個人最愛:

< 編程珍珠 >

這本書易於閱讀,包含許多小故事。當計算機的內存和磁盤尺寸縮小時,它將使編程回到80年代,古老的程序員須要在沒有那麼多現代工具的狀況下巧妙地編寫代碼。解決問題意味着正確思考,找到正確的算法和數據結構。像手工藝品同樣編程。本書將向您展現設計算法的過程和樂趣。

其餘書籍

初學者:Robert Sedgewick系列是不錯的選擇,它帶有C / Java示例代碼。

中:《算法設計手冊》《算法介紹》,第二本包含更多的數學部分,頁數更多。

高級:<計算機編程的藝術>,它們很難閱讀,最好將其用做參考書:)

若是某人太勇敢以致於他們認爲本身知道一切,那麼Knuth將會幫助他們瞭解這個世界是複雜的。

- 比爾蓋茨

在線評委

掌握算法須要長時間的自主學習。即便您沒有準備面試,保持練習也很是有幫助,我建議您使用這兩個網站LeetCodeHackerRank這兩個容易和中等的問題。

編程語言和編譯器

幾乎每一個程序員都會在工做中學習幾種語言,甚至在某些狀況下甚至能夠設計DSL,可是實際上不多有程序員會使用編譯器。

有些編譯器在吃代碼時會花費不少時間,您至少應該瞭解發生了什麼。🙂不管如何,編譯器技術包含了計算機科學的許多經典方面,值得研究。

對於編程語言類別,咱們應該學習語言的核心概念,包括語義,計算模型和程序元素。這是瞭解編程語言將來發展的基礎。

若是咱們對語言元素有深刻的瞭解,那麼使用新的編程語言將很是容易。

< 編程語言基礎 >

eopl

EOPL是許多大學使用的教科書,全部代碼都在此處

這本書實際上很是有趣,咱們用幾行代碼爲一種小語言構建瞭解釋器!而後,咱們用抽象技術對其進行擴展:數據類型,函數,連續性,類型和類型檢查器,類型推斷,模塊,OOP等。

本書爲您帶來了計算機編程中最基本的知識:計算機語言的解釋器只是另外一個程序。–哈爾·阿伯森(Hal Abelson)

與解釋器打交道時,跳過了大部分解析過程,而且對代碼生成部分的處理也很少。但這足以學習編程語言的核心概念。

EOPL並非一本容易的書,若是您不能遵循的替代方法,沒有太多練習的練習,它仍然爲您提供學習語言的全貌。

其餘書籍

還有其餘一些經典的教科書,例如「 The Dragon Book」:<編譯器:原理,技術和工具>

若是您喜歡學習函數式編譯器,那麼這些書是最好的書:

< Lisp in Small Pieces>:這本書將描述Lisp的語義和整個Lisp語言家族的實現,並提供完整的代碼。

< 繼續進行編譯>:本書在實際的編譯器中使用繼續進行編譯,語言是Standard ML。它涵蓋了全部詳細信息,包括運行時和GC。

專案

我推薦一些很棒的自學項目,這些項目足夠小,若是您徹底理解它們的代碼,您將對編譯技術產生更多的興趣:

8cc:8cc是C編程語言的編譯器。編譯器能夠自行編譯。該代碼乾淨且易於閱讀。

構建本身的Lisp:告訴您如何在大約1000行C代碼中構建Lisp解釋器。

tcc:另外一個C編譯器,生成大於8cc的x86代碼。

系統

適當的

<UNIX環境中的高級編程>

史蒂文斯(Stevens)的經典著做,它教您Unix上的編程接口,並涵蓋了訪問Unix / Linux OS所需的幾乎全部知識。這是研究OS內部的良好準備。

< FreeBSD操做系統的設計和實現 >

它組織得很好,還能夠告訴您OS的概念,解釋詳細的數據結構和實現算法,尤爲是解釋設計緣由。密鑰代碼也列出了註釋。

其餘

有許多小內核可供玩。製做一個小的內核會花費不少時間,若是您有足夠的興趣和時間,爲何不嘗試一下,這些連接將幫助您:

OS dev.org包括許多很好的參考資源。

xv6:MIT xv6是根據經典的Lions代碼編寫的,相關的課程視頻很是有幫助。

如何製做計算機操做系統:本教程爲您提供了構建玩具OS的分步說明。

計算機網絡

對於網絡學習,有許多歷史和理論部分,包含各類協議,對某些人來講可能很是枯燥。可是請記住,您不須要記住每一個角落的全部知識,重點是瞭解網絡解決了什麼問題,爲何這樣設計協議,如何使用網絡的相關API。

< 計算機網絡:自上而下的方法 >

聯網

首先,咱們須要對OSI模型有一個全面瞭解,瞭解爲何將它分爲七個層,每一層中的數據格式是什麼。這本書描述了Internet的工做原理,應用程序如何經過網絡相互交互,詳細解釋了算法和協議,還描述了網絡的歷史。

請記住使用wireshark或tcpdump進行練習。

<TCP / IP圖解,第1〜3卷 >(amzn.to/31CfVcq)

因爲這些年來TCP / IP不斷髮展,請使用這些書的新版本。這些書可幫助您更深刻地瞭解TCP / IP,第2捲包含有關如何實現TCP / IP協議(代碼的關鍵聯網部分)的完整說明(BSD 4.3內核)。全部這些對於每一個人都是很是技術性的,並不容易,可是值得您閱讀。

相關文章
相關標籤/搜索