推荐一些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内核)。全部这些对于每一个人都是很是技术性的,并不容易,可是值得您阅读。

相关文章
相关标签/搜索