35

我一直是一个很大程度上独立的学习者,我从维基百科和各种书籍中收集我能学到的东西。但是,我担心我可能会因无意中遗漏主题和概念而使我的自我教育产生偏差。我的目标是自学相当于顶尖大学的计算机科学本科学位(不管是哪一所)。

为此,我购买并开始阅读一些学术教科书:

以及我在一所平庸的州立大学上过的课留下的一些教科书:

我的问题是:

  • 此系列未涵盖哪些主题?
  • 有没有比这里列出的书更严谨或更透彻(甚至更容易阅读)的书?
  • 有没有浪费我时间的书?
  • 我应该按什么顺序阅读这些书?
  • 麻省理工学院或斯坦福大学(或 UCB 或 CMU ......)本科生学到了哪些我可能会错过的知识?

欢迎软件工程书籍,但仅限于学术研究。我知道 Code Complete 和 Pragmatic Programmer,但我正在寻找一种更具理论性的方法。谢谢!

4

22 回答 22

13

我看到的最大的两个遗漏:

对于操作系统,我更喜欢 Tanenbaum 而不是 Silberschatz,但两者都很好:

关于订单,这将取决于您的兴趣。没有太多先决条件,编译器自动机是最明显的一个。先读自动机书,再读龙书。

我不知道您拥有的所有书籍,但我知道的那些已经足够好,所以这可能意味着其他的也不错。

您还缺少一些逻辑离散数学书籍。

我们不要忘记一些数据库理论书籍!

于 2008-09-27T15:07:24.457 回答
12

我发现最好的方法是选择你最喜欢的大学,访问他们的网站,查看学位课程。许多大的都为每门课程出版了他们的必读读物。麻省理工学院的开放课件就是一个很好的例子。

顺便说一句,这也适用于非 CS 学位课程。

于 2008-09-27T15:09:10.240 回答
9

Don Knuth 的计算机编程艺术

于 2008-09-27T15:05:53.210 回答
6

麻省理工学院几年前推出了他们的“OpenCourseWare”计划。他们将书籍/家庭作业/讲座放在网上,因此您可以按照麻省理工学院的课程进行学习:

http://web.mit.edu/catalogue/degre.engin.ch6.shtml

于 2009-06-08T03:34:07.687 回答
4

顶尖大学的许多课程不使用教科书,因为可用的书都不够好。(我在普林斯顿接受教育,在哈佛任教 8 年。)当有人推荐一本书时,询问这本书是否真的很好,或者它是否只是该领域中最好的

例如,在编译器方面,我不是“龙书”的忠实粉丝;我从不喜欢这种方法,而且当前版本已经过时了。我认为你最好读一本像 Michael Scott 的Programming Language Pragmatics这样的书,虽然有点漫不经心,但它是一本很好读的书。(我从来没有教过它,所以我不能说学生们是怎么想的。)我不知道有一本关于自学者编译器构造的好书,尽管你可以看看 Cooper 和 Torczon 的Engineering a Compiler因为它是最新的,由业内两位最优秀的编译器工程师编写。

于 2008-12-20T03:53:22.020 回答
3

对不起,你不能用读一本书或几本书来代替四年的大学,不管书有多好。如果可以,为什么会有人上大学?

于 2009-01-17T18:11:25.273 回答
3

首先,我不会担心它。但是如果你想要一本书来学习一些抽象的 CS 思想,我会推荐The Turing OmnibusTheoretical Introduction to Programming

如果我决定雇佣两名程序员,但两人都没有太多经验,但一名拥有 CS 学位而另一名没有,我会雇佣拥有 CS 学位的人。但是当你比较两个有十几年经验的程序员时,学历就无关紧要了。

于 2009-01-17T18:13:15.690 回答
3

我可能无法推荐最好的书籍,但是您缺少几个重要的主题:

  • 统计数据
  • 线性代数
  • 图论和离散数学
  • 计算机图形学
  • 科学计算
  • 计算机网络
  • 软件工程
  • 数据结构

一些可能被认为更“可选”的主题可能是:

  • 密码学
  • 图像/图案处理和识别
  • 生物信息学
  • 互联网计算
  • 经典物理学
于 2009-06-08T04:29:07.603 回答
3

计算系统的元素

本书将带您从硬件设计的基础知识一直到用面向对象语言编写程序。使用模拟器,您可以构建一台完整的计算机。然后你编写一个汇编程序、一个操作系统、一个编译器(用于编译为在 VM 上运行的面向对象语言),然后是使用该语言编写的游戏。

这是很多工作,但作者已经仔细地使任务尽可能简单。您必须努力完成这一任务,但它为您提供了计算机编程的完整视角。

您可以查看一些示例章节,也可以在此处玩模拟器。

强烈推荐!(即使是 CS 毕业生)

于 2009-06-08T04:58:34.610 回答
2
  • Discrete Math I & II (my private school)
  • Physics I (Missouri most state schools)
  • Statistics I
  • Cryptography(optional but I liked it)
  • OpenGL in C++ (optional but neat)
  • Systems analysis and Design(Software engineering from the business perspective. The class was so so.)

  • Ethics.

  • Networking (teaches network algorithms, bit patterns dealing with network data).

    There are some things that to comprehend them require help; not necessarily a Professor(tho they do that for a living), but maybe a friend that has taken the class or studied the field.

Reading books on these subjects doesn't mean you know them. Doing math on the math, coding on the code, and so on is what helps you understand, and shows you know the subject in the end.

于 2008-09-27T15:46:34.657 回答
2

我认为您可以使用大多数其他书籍作为参考,并完全吸收Programming Pearls。这样做会让你比我见过的 90% 的程序员更好。

于 2008-09-27T16:05:51.040 回答
1

你还应该有一本关于通用数据库的书,而不是深入了解 Oracle、MySQL、SQL Server 等的细节。

我推荐:数据库系统:全书

于 2008-09-27T19:35:20.787 回答
1

计算机编程的概念、技术和模型似乎对我所见过的各种高级语言编程风格和技术有最广泛的概述。

于 2009-06-17T05:11:29.877 回答
1

I don't know how is it in the US, but in my country we study discrete mathematics and an introduction to graph theory before formal languages and automata.

Also, I don't see any book covering computer networks... why don't you try Andrew Tanenbaum's Computer Networks?

于 2008-09-27T15:12:37.813 回答
1

Before anything else, read Computer Science: a Modern Introduction. This will give you a good grounding and overview of the subjects there are to pursue.

Introduction to Algorithms is very good. For an introduction to functional programming, I recommend working through ML for the working programmer.

Areas that differentiate the computer scientist from the programmer: a grounding in discrete mathematics, a basic understanding of VLSI and systems architecture, an understanding of the basics of cryptography and security, an understanding of computability theory, an understanding of information theory.

于 2008-09-27T15:12:47.983 回答
1

This is a pretty good list. The two topics I would definitely add to the mix are discrete math, and networks. Other topics that may be interesting to you are compilers, computer graphics, distributed operating systems. There are also cool sub-fields of AI, like computer vision and machine learning. And in order to handle all that, you definitely need linear algebra and probability.

And it goes without saying that you cannot really do computer science by just reading books. To really understand each topic, you have to do projects in it. I would also suggest looking at MIT's Open Courseware, where professors post syllabus, lecture notes, and assignments.

于 2008-09-27T15:15:04.547 回答
1

具体数学

于 2008-09-27T16:05:52.023 回答
0

即使我在同一平面上:下班后的空闲时间学习计算机科学;这些是我现在书架上的一些书

  1. 应用 UML 和模式 - Larman
  2. 算法简介 - Cormen
  3. 离散数学及其应用 - 罗森
  4. 软件工程
  5. UNIX 环境中的高级编程

完成后将进一步更新此列表... :-)

于 2010-10-14T13:34:00.943 回答
0

我会将计算理论导论添加到列表中

于 2009-06-08T04:12:17.980 回答
0

Books on Professional Software Development covering how software projects work, different methodologies, and design patters are great. Web-design knowledge is also very useful when it comes to employment.

I don't understand why you are trying to do this yourself though. Even a 'mediocre-at-best' university will be able to teach you the skills far better than you can teach yourself. It's all about meeting people who have experience actually working in the computing industry.

It's not about the university it's about the effort you put in that determines how well you do.

My answer is perhaps unhelpful to you though because I don't know where you are from. In Scotland where I live I got to go to University for free, this may not be the case for you.

于 2008-09-27T15:50:30.607 回答
0

文件结构:使用 C++ 的面向对象方法

很多关于块设备和文件结构的好信息,在你列出的任何书籍中都找不到。由于人们不喜欢他的代码示例,它在亚马逊上得到了一些批评性评论,但这本书的重点是教授概念,而不是提供剪切和粘贴代码示例。

还要确保获得一本关于编译器的书

于 2008-11-25T21:25:00.363 回答
0

“四人帮”设计模式书。我在大学上的设计模式课程可能是我上过的最有益的课程。

于 2009-06-17T05:24:59.657 回答