报价
HOME
报价
正文内容
nand基础书籍 每个程序员书柜必备的编程书籍
发布时间 : 2024-10-11
作者 : 小编
访问数量 : 23
扫码分享至微信

每个程序员书柜必备的编程书籍

原文参考了Dan Luu的博客,经作者授权,由InfoQ编译、整理并分享。

http://danluu.com/programming-books/

一提到有关编程方面的书籍,你就会想起江湖中传说的“每个程序员必读的12本计算机科学书籍”,然而,这份清单并没有什么实用性。因为,计算机科学领域非常宽泛,几乎所有程序员都可以阅读任何主题,就算某个主题很重要,但由于读者的学习偏好天悬地隔,因此对所有读者而言,某个主题并不存在所谓“最好的”书籍。

本文是我已经阅读过的主题和书籍的清单。这些都是我很熟悉的主题,也许你可以在此文中,了解关于该主题更多的情况,并阅读其他相关书籍。换而言之,就是说你为什么需要阅读另一本书。

算法、数据结构、复杂性

为什么要关心算法、数据结构和复杂性? 好吧,有一个实用的结论:在工作中,即使你从来没有用到这些东西,但是,大多数一流的支付公司在面试中会测试这些内容。我决不瞎扯,算法真的很有用,就像我发现数学很有用一样。任何特定算法适用于任何特定问题的概率很低,但从总体上说明什么类型的问题如何解决,什么样的问题难以处理,通常当近似有效时就有用了。

《Cracking the Coding Interview》

作者:McDowell

出版社:CareerCup; 6th edition (July 1, 2015)

中文版:《程序员面试金典》

译者:李琳骁、漆犇

出版社:人民邮电出版社,第五版

《程序员面试金典》的作者McDowell,是原Google资深面试官的经验之作,层层紧扣了程序员面试的每一个环节,全面详尽介绍了程序员应当如何应对面试才能脱颖而出。

该书涉及到面试流程解析、面试官的幕后决策及可能提出的问题、面试前的准备工作、对面试结果的处理等内容,还涵盖了数据结构、概念与算法、知识类问题和附加面试题四个方面,为读者提供了来自Google、Facebook、Microsoft等多家知名公司的编程面试题,并为每一道面试题分别给出了详细的解决方案。

我会向那些并没有真正掌握算法、但又想通过面试的程序员推荐这本书。这本书读起来尚可,不过并不能真正教会你知识,如果想真正掌握算法和数据结构,那么继续往下看。

《Algorithms》

作者:Dasgupta、Papadimitriou、Vazirani

出版社:McGraw-Hill Education

中文版:《算法概论》

译者: 王沛、唐扬斌、刘齐军

出版社:清华大学出版社

《算法概论》是一本适合入门的读物,但却不失深度以及广度,读来让人兴趣盎然。我认为,认真读完这本书,并且思考每章后面的习题,会对算法有一个很好的大局观。当然要掌握算法,只靠这一本书是不够的,不过算作最佳入门是当之无愧的。

该书全面介绍了算法的基本知识,将算法分成类(例如分治法、,或贪婪算法),在表达每一种技术时,强调每个算法背后的数学思想,让你掌握如何判断应该使用什么样的算法来解决特定的问题。

该书合理挑选主题,厘清了一条算法这门学问的线索,对结构的精心安排,对问题的数学结构的剖析,从而推出一个算法的过程的讲解。长度适宜,仅有三百多页,可以利用几个周末进行阅读。

不过,我知道有些读者不会喜欢这本书,因为它包括了太多的数学思想。如果是你,我猜你可能喜欢Skiena著的那本书。

《The Algorithm Design Manual》

作者:Skiena

出版社:Springer; 2nd edition (July 26, 2008)

《The Algorithm Design Manual》要比Dasgupta所著的那本《Algorithms》更长,更全面,也更实用,而且涉及到的数学也更少。它差不多就是试图教你如何识别问题并使用正确的算法来解决问题、以及给出一个清晰的算法解释的那本书。

该书内容丰富,各个主题几乎无不涉及,从常见的各种数据结构到算法策略、可计算性。如果想当做教科书,该书每章结尾都有很多练习,值得推荐。这本书充满了激情的“战争故事”,显示了算法在现实世界编程的影响。

《Introduction to Algorithms》

作者:Cormen、Leiserson、Rivest、Stein(CLRS)

出版社:The MIT Press; 3rd edition (July 31, 2009)

中文版:《算法导论》

译者:殷建平、徐云、王刚、刘晓光、苏明、邹恒明、王宏志

出版社:机械工业出版社; 第1版 (2013年1月1日)

在江湖中流传的各种版本“所有程序员必读之书”的清单中,《算法导论》就占据了半壁江山。这本书将严谨性和全面性融为一体,深入讨论了各种算法。实际上,几乎没有读者会读完整本书。不过,全书各章自成体系,可以作为独立的学习单元。它是全球读者最多的算法圣经。

该书的特点是选材经典、内容翔实、结构合理、逻辑清晰。每章前半部分介绍了讲授和学习算法的有效方法,后半部分为更专业的读者和求知欲强的学生提供了更引人入胜的资料来讨论这个迷人领域的各种可能性和挑战,对本科生的数据结构课程和研究生的算法课程而言是非常棒的教科书。

比如说,有整整一章是关于Van Emde Boas树,写得很工整,这有点奇怪,像的平衡树结构的插入、删除、就像查找、继承一样好,也许以前的书籍可能如此,但它是第一个没有包含Van Emde Boas树的算法导论。

《Algorithm Design》

作者:Kleinberg、Tardos

出版社:PEARSON EDUCATION; 1 edition (2013)

《Algorithm Design》广受好评,堪比CLRS所著《Introduction to Algorithms》,被推荐为关于算法设计和分析的一本不可多得的优秀入门书。我发现,这本书与CLRS所著的书相比,该书将直观性与严谨性完美结合起来。覆盖面比较宽广,凡属串行算法的经典论题,都有所涉猎。

《Advanced Data Structures》

作者:Demaine

《Advanced Data Structures》是一套讲稿和笔记,而非一本书。如果你想要一套条理清楚但不难综合的数据结构的学习资料,在大多本科课程中,你不大可能看到,因此这套讲课和笔记,功德无量。

这些笔记没有出单行本的计划,所以如果您尚未看过这些资料,就必须观看教学视频。

《Purely Functional Data Structures》

作者:Okasaki

Cambridge University Press (June 13, 1999)

出版社: Cambridge University Press

《Purely Functional Data Structures》读起来很有趣,但不同于其他算法和数据结构的读物的是,我从这本书中,还没能得到真正解决实际问题的重要能力。

在我读完这本书后过了几年,有人告诉我,推理出纯函数冗余数据结构的性能并不难。我就向他们请教这本书中把我难倒的证明部分,我并不是在讨论那些晦涩难懂的超难习题,而是说这本书的主要内容,作者有太多过于明显的解释性的东西。但是并没有人解释。这种东西的推理比大家说的还要难。

《Higher Order Perl》

作者:Dominus

出版社: Morgan Kaufmann Publishers

中文版:《华章程序员书库:高阶Perl》

译者:滕家海

出版社:机械工业出版社

《高阶Perl》在Perl领域深入探讨了各种最新的主题,如递归、迭代器、过滤器、划分、数值方法、高阶函数、惰性求值等内容,并将这些转换成现实变成工作中强有力的实用工具:HTML处理、数据库访问、网页抓取、家庭理财等等。

该书恰当地介绍了使用Perl的函数式编程。通过这本书的学习,你可能像Python或Ruby那样很容易进行工作。

不过,如果你跟得上潮流,你会发现这本书可能有点过时,因为讲解的是2005年的Perl 5,而现在是2015年12月25日发行的Perl 6。不过,这本书提到的思想,目前已成主流。

《Algorithms》

作者:Levitin

出版社:Pearson; 3 edition (October 9, 2011)

“强化学习的其他特点,包括:章节摘要,习题提示。这是一本详细的解决方案手册。”、“学生通过习题提示和章节摘要进一步支持学习。”其中一个广告甚至印在书上。

当我看到这两个广告后,就在亚马逊下了订单购买《Algorithms》。但在我拿到这本书后,我唯一的自学资源却是在雅虎问答(Yahoo Answers)里的一些帖子,在那里你能找到提示或者解答。

最后,我拿起了Dasgupta的著作来取代了这本书,因为他的网站资源可以免费使用。

《Probability and Computing: Randomized Algorithms and Probabilistic Analysis》

作者:Mitzenmacher、Upfal

出版社: Cambridge University Press (January 31, 2005)

我获得的算法知识可能比其他任何算法书籍讲述的都多。许多随机算法移植到其他应用程序虽然很琐碎,但却可以简化很多事情。

《Probability and Computing: Randomized Algorithms and Probabilistic Analysis》有关概率学的介绍部分很翔实,就算读者不具备任何概率学的背景也能轻松入门。此外,的内容(例如,)对许多计算机科学理论的证明很有用,这些在我所阅读到的概率学介绍内容中都没有提到。

《Introduction to the Theory of Computation》

作者:Sipser

出版社:Cengage Learning; 3 edition (June 27, 2012)

中文版:《计算理论导引》

译者:段磊、唐常杰

出版社:机械工业出版社,第一版

《计算理论导引》以独特的视角,系统介绍了计算理论的三大板块:自动机与语言、可计算性理论、计算复杂性理论。讲述了宽泛的数学原理,没有拘泥于某些低层次的细节。

在证明之前,都有直观的“证明思路”,帮助读者理解数学形式下蕴涵的概念。很多重要的结果,如定理,都被作为练习题。所以你真的需要做这些关键练习题。但是,大多数关键练习题没有提供答案,因此你也无法知道你解答是否正确。

如果想选择更为现代的主题,也许可以阅读Aurora和Barak的著作。

《Computation》

作者:Bernhardt

《Computation》这部教学影片涵盖了一些计算机理论的重点部分。影片讲解令人愉悦,为了观看Bernhardt讲解的内容,这个影片我已经观看不止一次了。该影片的受众是那些没有计算机科学背景的一般程序员。

《An Introduction to Computational Learning Theory》

作者:Kearns & Vazirani

出版社:The MIT Press (August 15, 1994)

《An Introduction to Computational Learning Theory》是一本非常经典的读物。但是这本书已经过时(InfoQ注:该书1994年出版,距今已经22年了),而且漏洞百出,没有勘误。我最终从几门课程拼凑了一些笔记,一个是Klivans的著作,另一个是Blum的著作。

操作系统

为什么要关心操作系统?因为,掌握一些关于操作系统的知识,可以让你节省几天或一周的调试时间。 这是Julia Evans博客上经常提到的话题,我发现,就我个人经验来说,确实如此。

那些建立可行的系统并了解一些操作系统知识的人,却没有发觉如果有操作系统知识的话会很节省时间,这点我很难想象。

可是,读过操作系统书籍的人往往有偏见——正是做这方面的相关人士,如果你是骨灰级玩家,除非阅读这些,你可能得不到同样的结果。

《Operating System Concepts》

作者:Silberchatz、Galvin、Gagne

出版社:Wiley; 9 edition (December 17, 2012)

中文版:《操作系统概念》(第七版)(翻译版)

译者:郑扣根

出版社:高等教育出版社; 第1版 (2010年1月1日)

好吧,这是Comet Book成为标准之前,我们在Wisconsin就用过的一本书。

《操作系统概念》涵盖了高阶概念并击中要点,但是在技术层次的深度稍显不足,没有详细阐述事情是如何工作的,也没有清晰列出更高级的主题。

顺便说一下,我听说了关于Comet书籍的好消息,但是我不敢妄言,毕竟我还没有阅读过。

《xv6》

作者:Cox、Kasshoek、Morris

这本《xv6》真的太棒了!它解释了你如何能够在真实系统上有效运作,你可以设想自己实现一个可执行的操作系统。按照本书写作的设计,作者倾向于简单的实现而非优化的实现,因此,书中使用的算法、数据结构和平常的生产系统完全不同。

这本书与介绍现代操作系统如何工作的书籍配合阅读,比如Love著的《Linux Kernel Development》或者Russinovich著的《Windows Internals》,学习效果会更好。

《Linux Kernel Development》

作者:Love

出版社:Addison-Wesley Professional; 3 edition (July 2, 2010)

《Linux Kernel Development》的书名可能有误导之嫌,这不是关于Linux内核开发的读物,基本上是一本阐述Linux内核如何工作的书籍:事物是如何契合的,使用了什么算法和数据结构等等。我阅读的是第二版,现在已经完全过时了。

第三版内容有所更新,但是也引进了一些错误和矛盾之处。而且,这一版本仍然过时,这本书2010年出版,讲的是内核2.6.34。虽然如此,该书仍然不啻一本优秀的介绍现代操作系统原理的读物。

该书还有一个缺点,在作者拿Linux和Windows进行比较时,有失客观,基本上就是每次比较的时候,就宣扬Linux是明确无疑的正确选择,Windows总是干蠢事。总体来说,Linux和Windows我都喜欢,在有些领域,Windows做得更好。而且在有些地区,Windows已经领先很多年了。但在这本书中,你甭想看到类似这些评价。

《Windows Internals》

作者:Russinovich、Solomon、Ionescu

出版社:Microsoft Press; 6 edition (March 25, 2012)

中文版:《深入解析Windows操作系统:第6版(上册)》

译者:潘爱民、范德成

出版社:出版社: 电子工业出版社; 第1版 (2014年4月1日)

《深入解析Windows操作系统》是阐述现代操作系统如何工作最全面的一本书,只不过碰巧这本书是关于微软Windows。作为从*nix走过来的人,看到Windows和*nix不同的差异,这样的阅读非常有趣。

然而,该书并非简单的入门书,在阅读本书之前你必须掌握一些操作系统知识。

如果想买这本书,你要等到2017年初发行的第七版。

《The Little Book of Semaphores》

作者:Downey

《The Little Book of Semaphores》是一本这样的读物:列出一个主题,通常从操作系统的教科书中抽取一两个章节,然后拼凑成为自己长达300页的书。

这本书是一系列的习题,有点像小型提纲,但更多的是阐述。它首先解释了什么是信号量,然后给出构建高并发原语知识的一系列习题。

在我开始编写并发线程代码时,这本书提供了很大的帮助。我订阅了Butler Lampson学院关于并发的资料,我喜欢把并发相关代码塞到别人写的黑盒。但是有时候你坚持自己写黑盒的话,如果是这样,这本书有很好的导论,要求思考方式才可能写出不是完全错误的并发代码。

我希望有朝一日,能有这样的一本书问世:既照顾低水平的读者,又兼顾高水平读者,我很喜欢这样的写作设计。从几个指令集原语不同的内存模型的体系结构(如x86和Alpha),而不是从信号量开始讲起。如果今天我写低劣的低级线程代码,我会更喜欢用C++ 11的线程原语,所以我想用这些东西而非信号量。如果由我来写线程代码的话,我可能会用Win32 API来编写。但到目前为止,还不存在这样的一本书。以后如果有这样一本书问世,那将是最好不过的了。

我听说Doug Lee的Java并发编程非常不错,但我只泛泛而读没有深入研读。

计算机体系架构

为什么要关心计算机体系架构?当你进行底层性能优化的时候,你所学到的具体事实和细节,将会非常有用。但是,真正的价值就是学习如何在性能和其他因素进行权衡,无论是功耗、成本、体积、重量,亦或者其他因素。

从理论上讲,这种推理应该不分专业进行教授,但我的经验是,那些学习计算机体系结构的人更可能会“得出”那种推理和粗略的计算:才能让他们抛开一个没有理由在性能上2倍或10倍(或100倍)的因素。听上去很显然,但是我想到大公司的多个生产系统放弃10到100倍的性能,而以一个标准来运行,甚至2倍的性能差异,都足以支付VP的薪水。全是因为人们没有意识到他们的设计带来的性能影响。

《Computer Architecture: A Quantitative Approach》

作者:Hennessy、Patterson

《Computer Architecture: A Quantitative Approach》教你如何用多约束(如性能、TCO(总开销)、功率等)进行系统设计,以及如何推论权衡。它主要以微处理器和超级计算机为例。

该书的新版增加了实质性的补充,这个版本才是你真正想要的读物。比如,新版增加了一个关于数据中心设计的章节,回答了以下问题:用于电力、功率分布、制冷的运营开支OPEX/资本支出CAPEX,以及支持团队和机器的支付费用,使用低功耗机器对tail larency的结果质量及影响(以必应搜索的结果为例),在设计数据中心时应该考虑哪些其他因素。

假设读者具备一些背景,但背景已在附录中提供,并且可免费在线获取。

《Modern Processor Design》

作者:Shen、Lipasti

出版社:Waveland Press, Inc.; 1 edition (July 30, 2013)

《Modern Processor Design》展示了设计Pentium Pro(1995年)时代高性能微处理器所需要了解的大部分内容。因为这种处理器的复杂性,阐述清楚绝非易事。另外,还介绍了一些更为先进的想法和从各种工作负荷可以运行的平行计算的范围(以及你可能会如何进行如此计算)。该书有一个很长的章节,是关于值预测,因为作者发明了这个概念,当第一版发行的时候,还很热门。

对于纯CPU架构,这本可得到的读物大概是最好的。

《Readings in Computer Architecture》

作者:Hill、Jouppi、Sohi

出版社:Morgan Kaufmann; 1 edition (September 23, 1999)

因为历史原因而阅读,看看我们所理解的解释有多好。比如,比较Amdal关于定律的论文(没有公式,只有一幅并非显而易见的图表的两张纸),相对与现代教科书的表述(一个段落,一个公式,或者一幅图表来阐明,虽然通常来说足够清晰,不需要额外的图表)。

糟糕的是,《Readings in Computer Architecture]》看上去让你后退得更远。因为计算机架构真的是很年轻的领域,这里没有什么真正难以理解的东西。如果你想看到一个动人心魄的例子,例如我们怎样更好解释这一些,像比较Maxwell在方程组的最初论文与现代对同一事物的解释。如果你喜欢历史的话,这本书很有趣。但是如果你只是想学习的话,它勉为其难。

博弈算法理论、拍卖理论、机制设计

为什么要关注这些知识(博弈算法理论、拍卖理论、机制设计)?因为这些知识介绍了世界上最大的科技公司在广告收入的运作方式,而这些广告是通过拍卖来销售的。该领域介绍了它们运作的方法和理由。另外,当你尝试弄明白如何设计有效分配资源的系统,这些知识就派上用场了。此外,如果你玩桌游,拍卖理论解释了为什么通过拍卖机制来固化博弈失衡是重要的,往往使游戏更糟。

尤其对设计公司内部激励相容制度(粗略的说,就是如何创建能提供人们出于私心而追求最佳利益的全局最优结果的系统)的人员而言,这些书应为必读书籍。如果你曾在两家大公司供职过,其中一家建立了有效的内部激励相容制度,而另一家没有建立相应制度。你就会发现,没有建立内部激励相容制度的那家大公司烧了大把大把的钱,因为这些人建立了超级没用的激励系统。

这个领域展现了这么一幅画卷,让你了解什么样的机制会带来什么样的结果。通过阅读案例研究,你会得到一个耗资数百万甚至数十亿美元的错误列表,洋洋洒洒,也很有趣。

《Auction Theory》

作者:Krishna

出版社:Academic Press; 2 edition (August 26, 2009)

中文版:《拍卖理论》

译者:罗德明、奚锡灿

出版社:中国人民大学出版社

上一次我阅读《拍卖理论》的时候,它是当时唯一对拍卖理论进行全面且最近介绍的一本书。在第一章中,涵盖了经典的第二价格拍卖的结论,然后涵盖了风险规避、竞标操纵、多个拍卖、非对称信息和其他现实世界的问题。

该书涵盖了拍卖的大部分理论,对深入理解拍卖理论的主要脉络非常必要。但这本书相当枯燥无趣,不大可能激起阅读欲望。除非你对这个主题感兴趣。需要了解基本的概率学和微积分学的知识。该书对致力拍卖研究的研究生是不可或缺的读物。

《Snipers, Shills, and Sharks: eBay and Human Behavior》

作者:Steighlitz

出版社: Princeton University Press (April 1, 2007)

《Snipers, Shills, and Sharks: eBay and Human Behavior》看上去似乎是专门为外行介绍拍卖理论、带有娱乐性质的书籍。该书解释了eBuy的工作方式及理由,正如书名的副标题所言,作者还探讨了人类在eBuy和其他地方拍卖中的怪癖行为。这本书妙趣横生,无需读者具备数学背景,可能包含了Krishna所著《Auction Theory》的少量内容,能让读者对拍卖理论产生兴趣。

《Combinatorial Auctions》

作者:Crampton、Shoham、Steinberg

出版社: The MIT Press

《Combinatorial Auctions》所讨论的是,是像美国通信委员会(FCC)那次频段拍卖,由于拍卖机制设计中的“漏洞”引起数亿甚至数十亿美元的价差被摆上台面的案例(InfoQ注:有兴趣的读者可以通过google检索“美国拍卖600MHz频段”来了解这个事件)。该书虽然是由不同作者共同撰写的读物,但读起来仍然行云流水一气呵成,让我乐意阅读。

这本书在组合拍卖领域有着深度和广度,于细微处见功夫,它还罗列了详细的作者和主题索引,排版质量非常棒,以至于可以跳过开头提到的Krishna的著作进行阅读,但我不会推荐它。这本书对于想了解组合拍卖的研究人员和从业者,都是必不可少的读物。

《Multiagent Systems:Algorithmic,Game-Theoretic,and Logical Foundations》

作者:Shoham、Leyton-Brown

出版社:Cambridge University Press; 1 edition (December 15, 2008)

《Multiagent Systems:Algorithmic,Game-Theoretic,and Logical Foundations》最槽的就是书名了。然而,它是Multiagent System方面最值得阅读的读物之一。

该书涵盖了基本的博弈论、拍卖理论,以及在计算机科学中读者可能不知道的其他经典主题,囊括了很多新颖的前沿理论,还有计算机科学和这些主题的交集内容,比如博弈学习模型等,甚至还有逻辑学的内容(这也是Shoham最关注的方向,将博弈理论上升到哲学层次)。这本书非常有特色,前面几章有很多例子,计算机科学学术味很浓。该书假定读者对主题没有特定的背景。

《Algorithmic Game Theory》

作者:Nisan、Roughgarden、Tardos、Vazirani

出版社:Cambridge University Press; 1 edition (September 24, 2007)

《Algorithmic Game Theory》包含了博弈算法理论的各种调查结果。要求读者具有相当数量的背景(首先要阅读过Shoham和Leyton-Brown的著作),例如第五章基本上是Devanur、Papadimitriou、Saberi和Vazirani的JACM论文:

《Market Equilibrium via a Primal-Dual Algorithm for a Convex Program》(《通过用于Convex程序的原始对偶算法的市场均衡》),并引出一些相关问题,让读者有更上一层楼的动机。如果你深入了这本书的话,会发现该书阐述很棒,而且很有趣。但如果你想通过阅读一本书来窥探一个领域的话,它未必是你想要的那种书。

杂项

《Site Reliability Engineering》

作者:Beyer、Jones、Petoff、Murphy

出版社:O'Reilly Media; 1 edition (April 16, 2016)

中文版:《SRE:Google运维解密》

译者:孙宇聪

出版社:电子工业出版社; 第1版 (2016年10月1日)

《SRE:Google运维解密》可以让读者学习到Google工程师在提高系统部署规模、改进可靠性和资源利用效率方面的指导思想与具体实践——这些都是可以立即直接应用的宝贵经验。任何一个想要创建、扩展大规模集成系统的人都应该阅读,该书针对如何构建一个可长期维护的系统提供了非常宝贵的实践经验。

要看更丰富的简要说明,请阅读这本22页的该书的笔记。

《Refactoring》

作者:Fowler、Beck、Brant、Opdyke、Roberts

出版社:Addison-Wesley Professional; 1 edition (July 8, 1999)

中文版:《重构:改善既有代码的设计》

译者:熊节

出版社:人民邮电出版社; 第2版 (2015年8月1日)

那时候当我读这本《重构:改善既有代码的设计》时,由于它在关于代码异味的单独章节所花的篇幅,使得这本书非常值这个价。该书非常成功,因为它使重构和代码异味的观念成为主流。

Steve Yegge曾对这本书不吝赞誉之词:

2003年10月,我第一次阅读这本书,有一种不寒而栗的感觉。如果你意识到,当你想离职时,你已经工作5年。转天我就随意问周围:“嗯,你已经读过重构方面的书,对吧?我只是随便问问,因为我很久以前读过,当然不是现在。”在我所调查的20个人中,只有一个人读过。感谢上帝,所有的人都很尴尬,不只是我。

……

如果你是资深工程师,你会发现该书中至少80%,都是你所熟知的东西。但该书罗列了所有的名称,并客观地讨论这些技术的利弊,这一点很有用。它戳穿了我刚成为程序员时所珍藏的若干个“秘籍”的真相。不注释代码?局部变量是万恶之源?这疯子是狂人吗?要不要阅读这本书,取决于你自己!

《Peopleware》

作者:Demarco、Lister

出版社:Addison-Wesley Professional; 3 edition (June 28, 2013)

中文版:《人件(原书第3版)(珍藏版)》

译者:肖然、张逸、滕云

出版社:机械工业出版社; 第1版 (2014年9月1日)

在大学时我读到这本《人件》,该书似乎很令人信服,甚至所有的研究结果都支持该书的观点:不设置截止日期就比设置截止日期要好;办公室比隔间要好,等等。所有开发人员跟我讨论的时候,基本都赞同这些观点。

但实际上每家成功的公司都是以截然不同的方式运作的。甚至微软公司也从个人办公室转为开放式办公室进行了建筑改造。是不是这些观点都无所谓?如果真的很重要的话,那些公司怎么会成为真正信徒,像Fog Creek公司不去践踏竞争对手?

因为该书符合我的“偏见”,我就希望这本书是正确的。但是,荟萃分析(InfoQ注:Meta分析,指将多个研究结果整合在一起的统计方法)的理念让我用鉴定的眼光重读来查证主要来源。

《Renegades of the Empire》

作者:Drummond

出版社:Crown; 1 edition (November 16, 1999)

《Renegades of the Empire》讲述了DirectX历程的故事。它还揭示了今天的微软狼性文化是怎么形成的。阅读介绍:

微软未必会雇佣像盖茨的人(虽然企业园区有不少这样的人),但会招聘那些有着更为显著的盖茨特征的人——傲慢、进取心和高智商。

……

因为嘲笑某人的想法是“愚蠢的”,或者更为槽糕的是,“胡说八道”——盖茨因此臭名昭著——只是为了看他如何捍卫一个位置。这种敌对的管理技术贯穿一系列的命令,创造了一种冲突的文化。

……

微软建立了达尔文的秩序,资源经常被掠夺,囤积力量、财富和威望。一名外出休假的经理回来时可能会发现他的部门被竞争对手袭击,他的项目被勒令降级或者完全取缔。

在微软面试:

“你喜欢微软什么呢?”“比尔踢屁股。”St. John说,“我喜欢踢屁股。我喜欢那种扼杀竞争对手和支配市场的感觉。”

结果St. John被雇佣了。多年来他没有犯任何错误。这本书就讲述了他的故事,以及像他那样的员工的故事。如果你想在微软公司谋差,你就需要读这本书。我希望我加入之前就读过这本书而不是之后!

数学

为什么要关注数学?从纯ROI(InfoQ注:Return On Investment,投资回报率)观点来看,我怀疑,对于99%的工作,学习数学是值得的。据我所知,我用数学比大多数程序员要多,但我并没有那么经常使用数学。不过,有正确的数学背景可能会派上用场。我很享受学习数学的乐趣。

《Introduction to Probability》

作者:Bertsekas

出版社:Athena Scientific; 2nd edition (July 15, 2008)

中文版:《概率导论(第2版)》(修订版)

译者:郑忠国、童行伟

出版社:人民邮电出版社; 第1版 (2016年1月1日)

《概率导论》是入门的大学课程,对 阐述定义比较严谨、直观。对任何关心严密推导的读者而言,该书后面有一些更为详细的习题。有很多可用解决方案的练习题,使得本书更适宜作为自学用书。

《A First Course in Probability》

作者:Ross

出版社:Pearson Prentice Hall; 8th edition (January 7, 2009)

中文版:《华章教育·华章数学译丛:概率论基础教程(原书第9版) 》

译者:童行伟、梁宝生

出版社:机械工业出版社; 第1版 (2014年1月1日)

为了使学生购买《概率论基础教程》,该书经常推出新版本,亚马逊定价更是高达174美元,我曾跟作者请教过这个问题,他抱怨说,这几年,二手书市场破坏了教科书的收入,而作者的版税并不多,所以要有更多收入,就不得不保持每两年推出新版的节奏来保证版税收入。

新作者要编写前人著过的经典书籍,经常大发牢骚,因为最早的作者通常比后来的作者拿更多的版税,即使他的后续版本并没有什么更新。

我在Wisconsin学习概率学的时候,该书是一本标准的教科书。我真的想不起有谁发现这本书有所帮助。

《Introductory Combinatorics》

作者:Brualdi

出版社:Pearson; 5 edition (January 7, 2009)

中文版:《组合数学(原书第5版) 》

译者:冯速

出版社:机械工业出版社; 第1版 (2012年5月1日)

Brualdi是一名大教授,是我大学生涯最好的教授之一。但是他著的《组合数学》充满了错误,而且也不特别清晰。自从我使用该书后,有两个新版本,但从亚马逊评论来看,这本书仍然有很多错误。

至于另一本基础入门型的教科书,我听过关于Camina和Lewis合著的《An Introduction to Enumeration (Springer Undergraduate Mathematics Series)》好消息,但我自己没有读过。此外,Lovasz的《Combinatorial Problems and Exercises (AMS Chelsea Publishing)》是一本关于组合数学的名著,但它并未被广为人知。

《Calculus》

作者:Apostol

出版社:Wiley; 2nd edition (January 16, 1991)

《Calculus》第一卷涵盖了你所期望的微积分I和微积分II的内容。第二卷涵盖了线性代数和多元微积分。在多元微积分之前,讲述线性代数,这样使得多元微积分更易理解。

从编程角度来看,微积分学也是很有意义的。因为我在微积分得到的价值观就是近似应用等等。教授这一连串的概念,很清晰。

如果你没有教授或助教帮你的话,该书可能是一本粗略的入门书。Spring SUMS系列丛书在各门功课上更易自学,但我并没有读过它们的微积分书籍,因此,我不敢妄下结论来推荐。

《Calculus》

作者:Stewart

出版社:Cengage Learning; 7 edition (2012)

中文版:《微积分(第六版)》(双语教材)

译者:张乃岳

出版社:中国人民大学出版社; 第1版 (2014年10月1日)

《微积分》是那些作者通过无关紧要的变更推出新版来赚钱的众多书籍中的一本。这是Wisconsin大学Non-Honor学位的标准教科书。结果是,我教了很多人用Apostol的那本书所教授的方法来计算复杂的微积分,对许多人而言,更直观一些。

该书采用的方式是,对于某种类型的问题,你应该将该模式匹配很多可能的公式,然后套用该公式。而Apostle更多的是教授你一些技巧和直觉,让你足以应付各种各样的问题。我不知道你为什么会买这本书,除非你需要一些类。

硬件基础

为什么要关注硬件基础?人们经常宣称,要成为优秀程序员,你必须理解所用的每一个抽象概念。这是无稽之谈,因为现代计算过于复杂,以至于任何人都不可能真正完全理解到底发生了什么事情。事实上,现代计算之所以能高效完成它所做的工作,是因为它不需要程序员深入了解底层的相关内容,大部分也低于你的水平。

话虽如此,如果你对底层软件充满好奇,这里有一些适合你的入门书籍。

《nand2tetris》

作者:Nisan、Shocken

如果你只想读一本单一内容的书,那么非这本《nand2tetris》莫属。它是一本关于逻辑门和布尔逻辑的“101级”入门书。正如书名所示,它带你从与非门(NAND gate)到编一个可用的俄罗斯方块游戏。

《Fundamentals of Logic Design》

作者:Roth

出版社:CL Engineering; 5 edition (June 11, 2003)

《Fundamentals of Logic Design》在关于逻辑门和逻辑设计的细节上比《nand2tetris》还要多。该书有大量习题,似乎是为自学而著。注意,上面的链接是第五版,目前有更贵的新版本,但似乎没有什么改进,而且新版也有很多错误,而且更昂贵。

《CMOS VLSI Design》

作者:Weste、Harris、Bannerjee

出版社:Pearson; 4 edition (March 11, 2010)

中文版:《CMOS超大规模集成电路设计(第4版) 》

译者:周润德

出版社:电子工业出版社; 第1版 (2012年7月1日)

逻辑门下一级的就是VLSI(very large scale integration),即超大规模集成电路。然而,在今天真的没有任何意义。

《CMOS超大规模集成电路设计》比其他书籍更有广度和深度,并且阐述极为清晰。在探索设计空间,比如,加法器的章节,不仅仅提及了几种不同的类型,而且也提供了问题和解决方案,非常适合自学。

《CMOS Digital Integrated Circuits》

作者:Kang、Leblebici

《CMOS Digital Integrated Circuits》是Wisconsin当前的教科书。但这本书很难跟上,助教基本上重新解释了几乎所有的必要项目和考试。我觉得它是参考书而不是用来学习的读物。

与West等人相比,Weste 花费了更多的精力讨论设计中的折衷,如,创建并行前缀树加法器时,在设计空间的某个特定点,它意味着什么?

《Semiconductor Device Fundamentals》

作者:Pierret

出版社:Addison Wesley; 2nd edition (April 12, 1996)

超大规模集成电路(VLSI)下一级,也就是晶体管,你将了解晶体管实际上是如何工作的。

《Semiconductor Device Fundamentals》真正完美地解说了固态设备(SSD)。该书指出了你要真正理解诸如波段图解的这些东西,需要知道什么。然后用这些基础原理和清晰的解释,给你建立一个良好的思想模型,理解不同类型的交汇点和设备的工作原理。

《Pentium Pro and Pentium II System Architecture》

作者:Shanley

出版社:Addison-Wesley Professional; 2 edition (January 10, 1998)

与本文提到的其他书不同,《Pentium Pro and Pentium II System Architecture》是关于实践而非理论。它有点像Windows内部,因为它涉及一个真实的工作系统的细节。主题包括硬件总线协议、I/O实际上是如何工作的(如APIC,Advanced Programmable Interrupt Controller,即高级可编程终端控制器)等等。

实际介绍的问题,就是从8080的CPU以来,复杂性一直呈指数级的增长。当你学得越深,你就越容易理解系统重要的可移动部分,而知识越不相关。因为总线和I/O协议不得不操作多处理器,这本书似乎妥协了,这些系统包含了现代系统中的许多元素,只不过是以更简单的形式。

未尽事宜

在这些我喜欢的读物中,我会说,这些图书中,软件读物最多占据25%、硬件读物占据5%。一般说来,未在清单中罗列出来的读物更为专业。清单还缺少很多领域的主题,如PL,关于如何学习编程语言的实用书籍、网络等等。

未涉及某些领域的原因有多种,比如我没有列出任何PL相关书籍,因为我不阅读PL方面的书籍。我没有提到网络是因为我虽然读过一些书,但我这方面的了解程度不足以提供有用书籍的建议。

绝大部分硬件相关的书籍都没有包含在内,因为它们涉及到你不会关心的内容,除非你是专家(比如容错电路设计(《Skew-Tolerant Circuit Design (The Morgan Kaufmann Series in Computer Architecture and Design》,Harris著)或超快光学《Ultrafast Optics》,Weiner著))同样也适用于数学和计算机科学理论。

我遗落了相当数量的一些我认为是名著的读物,因为在我日常编程生活中基本没有机会用到,比如极值组合论(Extremal Combinatorics)。我也没有罗列那些我没有读完的书籍,除非我停下来,因为这些书籍极为晦涩难读。因为我没有读完像SICP和The Little Schemer的书籍,这意味着我无法列出经典的清单。那些书籍很好,只是我没有完成阅读的原因。

清单中还不包括历史和文化相关的书籍,像《Inside Intel》或《Masters of Doom》。我可能会在未来某个时候,在清单中添加一个类别,就是我一直尝试的实验,像Julia Evans(意识流,文字更少或者没有草稿)那样撰写。

我必须回去重读十多年前曾经阅读过的书,然后写出有意义的评论,但这不符合我这个实验。关于这一点,因为这份清单是根据我记忆写的,几年前我就几乎没再读过那些所有的书,而且可能有所遗忘很多书,我打算日后将补充。

今日荐号:细说云计算

探讨云计算的一切,关注云平台架构、网络、存储与分发。这里有干货,也有闲聊。

今日荐文

点击下方图片即可阅读

大规模Nginx平台化实践,

京东能提供哪些参考经验?

喜欢我们的会点赞,爱我们的会分享!

真·程序员必修书单

本文作者:削微寒

迫近年关,很多人都写了 19 年的总结和 20 年的展望。我在回想 2019 年的时候,想到自己只读完了几本‘杂’书,真正技术的书籍一本也没有读完。焦虑就悄然涌上心头,有种不学习就退步的烦躁。然后我回想起了之前看到的一个网站:

Teach Yourself Computer Science :https://teachyourselfcs.com/GitHub 上的中文翻译 :https://github.com/keithnull/TeachYourselfCS-CN

现在的技术书籍很多,怎么才能找到其中的精华,从而让我花在书籍上的时间‘劳有所获’,哪些书籍值得花时间多读几遍?

下面要介绍的内容就是为了解决以下两个问题:

你应该学习哪些科目 ,为什么要学?这些科目对应的最好的学习资料(书籍、视频) 是什么?

接下来,你将得到答案。(我寻找的书单要来啦!)

一、概览

按照列出的顺序,借助建议的书籍和视频课程,学习下面的 9 门科目。如果你是一个自学成才的工程师,或者从编程培训班毕业,那么你很有必要学习计算机科学。

(我本科喂了 Dota,编程算是自学的。工作了后我深刻的体会到,这些科目的重要性。)

二、为什么要学习计算机科学

软件工程师分为两种:

一种充分理解了计算机科学,从而有能力应对充满挑战的创造性工作;另一种仅仅凭着对一些高级工具的熟悉而勉强应付。(直白有力,直击心灵)

这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。

全球短信系统每日收发约 200 亿条信息,而仅仅靠 57 名工程师,现在的 WhatsApp 每日收发 420 亿条。

— Benedict Evans (@BenedictEvans)

第一种工程师总是寻求深入学习计算机科学的方法 ,或是通过传统的方法学习,或是在职业生涯中永无止息地学习;

第二种工程师通常浮于表面 ,只学习某些特定的工具和技术,而不研究其底层的基本原理,仅仅在技术潮流的风向改变时学习新的技能。

如今,涌入计算机行业的人数激增,然而计算机专业的毕业生数量基本上未曾改变。第二种工程师的供过于求正在开始减少他们的工作机会,使他们无法涉足行业内更加有意义的工作。对你而言,不论正在努力成为第一种工程师,还是只想让自己的职业生涯更加安全,学习计算机科学是唯一可靠的途径。

(成为不可或缺的人才,而不是可以随意被替代的熟练工。我的热血沸腾起来了,我要知道如何成为真·程序员 !)

三、分科目指引

注意:因为篇幅问题,我删除了视频部分的推荐。有需求的小伙伴,可点击阅读原文。

3.1 编程

大多数计算机专业本科教学以程序设计“导论”作为开始。这类课程的最佳版本不仅能满足初学者的需要,还适用于那些在初学编程阶段遗漏了某些有益的概念和程序设计模式的人。

对于这部分内容,我们的标准推荐是这部经典著作:《计算机程序的构造和解释》 。在网络上,这本书既可供免费阅读(英文版)

我们建议至少学完 SICP 的前三章,并完成配套的习题。如果需要额外的练习,可以去解决一些小的程序设计问题,比如exercism

(这本书我读完序章就睡着了,我要擦干口水,扶我起来)

3.2 计算机架构

计算机架构——有时候又被称为“计算机系统”或者“计算机组成”——是了解软件底层的的重要视角。根据我们的经验,这是自学的软件工程师最容易忽视的领域。

《计算机系统要素》 ,又名“从与非门到俄罗斯方块”(“Nand2Tetris”)。这本书规模宏大,让读者对计算机内的所有部分如何协同工作有完全的认识。这本书的每一章节对应如何构建计算机整体系统中的一小部分,从用 HDL(硬件描述语言)写基本的逻辑门电路出发,途经 CPU 和汇编,最终抵达诸如俄罗斯方块这般规模的应用程序。

我们推荐把此书的前六章读完,并完成对应的项目练习。这么做,你将更加深入地理解,计算机架构和运行其上的软件之间的关系。

这本书的前半部分(包括所有对应的项目)均可从Nand2Tetris 的网站上 免费获得。

硬件是平台。

— Mike Acton, Engine Director at Insomniac Games

(不明白游戏平台的规则,很难成为超级玩家)

3.3 算法与数据结构

正如几十年来的共识,我们认为计算机科学教育所赋予人们的最大能量在于对常见算法和数据结构的熟悉。此外,这也可以训练一个人对于各种问题的解决能力,有助于其他领域的学习。

关于算法与数据结构,有成百上千的书可供使用,但是我们的最爱是 Steven Skiena 编写的 《算法设计手册》 。显而易见,他对此充满热爱,迫不及待地想要帮助其他人理解。在我们看来,这本书给人一种焕然一新的体验,完全不同于那些更加经常被推荐的书。

至于练习,我们推荐学生在Leetcode 上解决问题。Leetcode 上的问题往往有趣且带有良好的解法和讨论。此外,在竞争日益激烈的软件行业,这些问题可以帮助你评估自己应对技术面试中常见问题的能力。我们建议解决大约 100 道随机挑选的 Leetcode 问题,作为学习的一部分。

最后,我们强烈推荐 《怎样解题》 。这本书极为优秀且独特,指导人们解决广义上的问题,因而一如其适用于数学,它适用于计算机科学。

我可以广泛推荐的方法只有一个:写之前先思考。

— Richard Hamming

(我这个算法渣默默的捧起了《我的第一本算法书》,上面的推荐的书明年再战!)

3.4 数学知识

从某个角度说,计算机科学是应用数学的一个“发育过度”的分支。尽管许多软件工程师试图——并且在不同程度上成功做到——忽视这一点,我们鼓励你用学习来拥抱数学。如若成功,比起那些没有掌握数学的人,你将获得巨大的竞争优势。

对于计算机科学,数学中最相关的领域是“离散数学”,其中的“离散”与“连续”相对立,大致上指的是应用数学中那些有趣的主题,而不是微积分之类的。由于定义比较含糊,试图掌握离散数学的全部内容是没有意义的。较为现实的学习目标是,了解逻辑、排列组合、概率论、集合论、图论以及密码学相关的一些数论知识。考虑到线性代数在计算机图形学和机器学习中的重要性,该领域同样值得学习。

学习离散数学,我们建议从 László Lovász 的课程笔记 开始。Lovász 教授成功地让这些内容浅显易懂且符合直觉,因此,比起正式的教材,这更适合初学者。

对于更加高阶的学习,我们推荐 《计算机科学中的数学》 ,MIT 同名课程的课程笔记,篇幅与书籍相当(事实上,现已出版)。

对于线性代数,我们建议从 Essence of linear algebra 系列视频开始,然后再去学习 Gilbert Strang 的《线性代数导论》

如果人们不相信数学是简单的,那么只能是因为他们没有意识到生活有多么复杂。

— John von Neumann

(放我一条活路)

3.5 操作系统

《操作系统概念》 (“恐龙书”)和 《现代操作系统》 是操作系统领域的经典书籍。二者都因为写作风格,长达 1000 页的篇幅以及每隔几年就增加内容来鼓励人们购买“最新版本”招致了一些批评。

《操作系统导论》(Operating Systems: Three Easy Pieces) 是一个不错的替代品,并且可在网上免费获得(英文版) 。我们格外喜欢这本书的结构,并且认为这本书的习题很值得一做。

在读完《操作系统导论》后,我们鼓励你探索特定操作系统的设计。可以借助“{OS name} Internals”风格的书籍。

为了巩固对操作系统的理解,阅读小型系统内核的代码并且为其增加特性是一个很不错的方法。

(写一个小型系统内核很酷)

3.6 计算机网络

鉴于有那么多关于网络服务端和客户端的软件工程,计算机网络是计算机科学中价值最为“立竿见影”的领域之一。我们的学生,系统性地学习了计算机网络,最终能够理解那些曾困扰他们多年的术语、概念和协议。

在这一主题上,我们最爱的书籍是 《计算机网络:自顶向下方法》 。书中的小项目和习题相当值得练习,尤其是其中的“Wireshark labs”(这部分在网上可以获得 )。

对于计算机网络的学习,做项目比完成小的习题更有益。一些可能的项目有:HTTP 服务器,基于 UDP 的聊天 APP、迷你TCP栈 、代理、负载均衡器或者分布式哈希表。

你无法盯着水晶球预见未来,未来的互联网何去何从取决于社会。

— Bob Kahn

(之前有人给我推荐过,我没买来看。然而现在正在读:真香~)

3.7 数据库

比起其他主题,自学数据库系统需要更多的付出。这是一个相对年轻的研究领域,并且出于很强的商业动机,研究者把想法藏在紧闭的门后。此外,许多原本有潜力写出优秀教材的作者反而选择了加入或创立公司。

鉴于如上情况,我们鼓励自学者大体上抛弃教材,而是从2015 年春季学期的 CS 186 课程 (Joe Hellerstein 在 Berkeley 的数据库课程)开始,然后前往阅读论文。

对于初学者,有一篇格外值得提及的论文:“Architecture of a Database System ”。这篇论文提供了独特的对关系型数据库管理系统(RDBMS)如何工作的高层次观点,是后续学习的实用梗概。

《Readings in Database Systems》 ,或者以数据库“红书” 更为人知,是由 Peter Bailis,Joe Hellerstein 和 Michael Stonebraker 编纂的论文合集。对于那些想要在 CS 186 课程的水平更进一步的学习者,“红书”应当是下一步。

如果你坚持一定要一本导论教材,那我们推荐 Ramakrishnan 和 Gehrke 所著的 《数据库管理系统:原理与设计》

如果没有编写足够数量的代码,很难巩固数据库理论。CS 186 课程的学生给 Spark 添加特性,倒是不错的项目,不过我们仅仅建议从零实现一个简单的关系型数据库管理系统。自然,它将不会有太多的特性,但是即便只实现典型的关系型数据库管理系统每个方面最基础的功能,也是相当有启发的。

(国内做数据库的公司越来越多了,但这块我还啃不下先放放)

3.8 编程语言与编译器

多数程序员学习编程语言的知识,而多数计算机科学家学习编程语言 相关 的知识。这使得计算机科学家比起程序员拥有显著的优势,即便在编程领域!因为他们的知识可以推而广之:相较只学习过特定编程语言的人,他们可以更深入更快速地理解新的编程语言。

权威的导论书籍是《编译原理》 ,通常称为“龙书”。不幸的是,这本书不是为自学者而设计的,而是供教师从中挑选一些主题用于 1-2 学期的教学。因此十分重要的是,你需要从中甄选主题,而且最好是在导师的帮助下。

对于项目练习,我们建议为诸如 COOL 的简单教学语言或者你所感兴趣的某个语言的一个子集写一个编译器。如果感觉这样的项目让人生畏,可以先从 Make a Lisp 开始,在一步步的指引下完成项目。

不要做一个只写样板代码的程序员。相反,给用户和其他程序员创造工具。从纺织工业和钢铁工业中学习历史教训:你想制造机器和工具,还是操作这些机器?

— Ras Bodik 在他的编译器课程伊始

(我说为什么大神学习一门语言那么快!)

3.9 分布式系统

随着计算机在数量上的增加,计算机同样开始**分散((。尽管商业公司过去愿意购买越来越大的大型机,现在的典型情况是,甚至很小的应用程序都同时在多台机器上运行。思考这样做的利弊权衡,即是分布式系统的研究所在,也是越来越重要的一项技能。

对于自学者,我们推荐的教材是 Maarten van Steen 和 Andrew Tanenbaum 所著的《分布式系统原理与范型》(中文第二版英文第三版 )。相较之前的版本,第三版有巨大的改进,并且多亏了其作者的慷慨,这本书在网上可以免费获得。考虑到分布式系统是一个迅速变化的领域,没有教材可以完全作为路标指引,不过就我们所见,这本书是基础扎实的最佳总览。

不管选择怎样的教材或者其他辅助资料,学习分布式系统必然要求阅读论文。这里 有一个不错的论文清单.

(工作中会遇到,安排上)

四、常见问题解答

4.1 人工智能/计算机图形学/XX主题怎么样?

我们试图把计算机科学主题清单限制到那些我们认为每一个软件工程师 都应该了解的内容,不限于专业或行业。拥有了这些基础,你将能更加轻松地挑选教材或论文,然而无需指引地学习核心概念。在这里,我们给出一些其他常见主题的自学起点:

人工智能:通过观看视频并完成Pacman项目来学习 Berkeley 的 AI 课程 。至于教材,使用 Russell 和 Norvig 编写的 《人工智能:一种现代方法》 。机器学习:学习吴恩达在 Coursera 上的课程。耐心学习,先确保理解了基础概念再奔向类如深度学习的诱人新主题。计算机图形学:学习 Berkeley CS 184 课程 的材料,使用《计算机图形学:原理及实践》 作为教材。

4.2 一定要严格遵守推荐的学习次序吗?

事实上,所有主题之间都有一定程度的重叠,彼此循环引用。以离散数学和算法的关系为例:先学习数学可以帮助你更深入地分析和理解算法,然而先学习算法可以为学习离散数学提供更大的动力和应用背景。理想情况下,你将在你的职业生涯多次重温二者。

因此,我们所推荐的次序主要是为了帮助你起步 ……如果你出于某种强烈的原因而倾向以不同的顺序学习,那也没有关系,勇敢开始吧!不过在我们看来,最重要的“先决条件”是:先学计算机架构再学操作系统或数据库,先学计算机网络和操作系统再学分布式系统。

4.3 这份指引的目标受众是?

我们面向自学的软件工程师、培训班学生、“早熟的”高中生或者想要通过自学补充正式教育的大学生。关于何时开启这段自学旅程,完全取决于个人,不过多数人在有一定的职业经历后深入学习计算机科学理论会获益匪浅。比如:我们注意到,如果学生在工作中曾经使用过数据库,他们会喜爱 学习数据库系统课程;如果学生从事过一两个 Web 项目,他们会喜爱 学习计算机网络。

4.4 XX 编程语言怎么样?

学习一门特定的编程语言和学习计算机科学的一个领域完全不在一个维度——相比之下,学习语言容易缺乏价值 。如果你已经了解了一些语言,我们强烈建议遵照我们的指引,然后在学习的空当中习得语言,或者暂且不管以后再说。如果你已经把编程学得不错了(比如学完了《计算机程序的构造和解释》),尤其是如果你学习过编译器,那么面对一门新的语言,你只需要花一个周末稍多的时间即可基本掌握。

4.5 XX 流行技术怎么样?

没有任何一种技术的重要程度可以达到学习其使用足以成为计算机科学教学的核心部分。不过,你对学习那门技术充满热情,这很不错。诀窍是先从特定的技术回退到基本的领域或概念,判断这门流行技术在技术的宏观大局中位于何处,然后才深入学习这门技术。

五、最后

鸣谢本文的原作者:Ozan Onay 和 Myles Byrne,译者:keithnull

以上就是本文推荐的书单了,20 年的读书计划可以安排起来了。本片文章不是一篇广告,买书的方式请自行寻找,说到广告那就去 HG 的群里潜水吧。各大有电商平台减价的时候,群里会有积极的小伙伴通知大家的,毕竟技术书籍都不便宜,大家都盯着呢。

最后,《代码大全》中有一句话我很喜欢:

“作为一个初学者或者进阶者,这并没有什么错。当一个有能力的程序员而不是领导者,这也没有什么错。真正的错误是,当你知道应该如何去提高时仍然选择做一名初学者。”

希望上面的书单能够为你点亮成为:真·程序员 的前进之路。

快餐知识能够速成,能够快速感受到实现的快感,同样的门槛也是比较低的。真正的技术是有一定门槛的,同时需要付出成倍的时间,一定要沉下心耐住寂寞。

你选择吃顿快餐,还是谈一场刻骨铭心的恋爱?

相关问答

Flash ROM是什么意思、?-ZOL问答

应该是nand吧,nand更像硬盘而nor更像内存有用(0)回复zjb_99513824关机重启,不能关机就取电池再开机,如果不是硬件问题就会解决,祝你好运啊有用(0)回复RA...

库克都要哪些个人成就?

乔布斯曾经说过:“蒂姆·库克是我迄今招来的最好的员工。”1998年初,乔布斯重新回到苹果才一年多时间。苹果公司在此之前曾陷入严重的发展困局,苹果电脑的市...

牛皮纸袋被弄上油了,怎么去处啊 - guannandi 的回答 - 懂得

如果书本上有潮湿迹,可用明矾溶液涂洗.如果是铁锈斑迹,可用草酸或柠檬酸液擦去,然后用清水将书页洗一下,用吸墨纸夹好书页,晾干即可。清除书上污迹...

大冢爱《樱桃》的日文歌词加中文翻译?

《樱桃》作词:大冢爱作曲:大冢爱歌手:大冢爱日文:爱し合う2人幸せの空隣どおしあなたとあたしさくらんぼ手帐开くともう2年たつなぁってやっぱ...

终极蜘蛛侠备份以前的存档在什么地方

[回答]Z5/SCDS争的头破血流的情况下,又一款号称“3免”的SLOT1烧录卡悄然问世了。它就是本次评测的产品---DSFIRECARD。产品简介:DSFIREC...它就...

石家庄的县级市新乐市未来发展前景怎样?

以下内容来自手机互动百科新乐市以下内容来自手机互动百科,版权归互动百科所有。新乐市是河北省石家庄市县级文化经济强市,为河北省重要的经济、文化、政治...

是什么原因让内存价格暴涨?

中国制造不出什么产品,该产品的价格就会大幅溢价,在中国市场赚取超额利润。中国的制造行业聚焦制造出哪项产品,该产品就必然会降价。这已经是世界制造行业的...

可欧平板开机一直出现两个企鹅-ZOL问答

有企鹅就代表是有系统的,企鹅3S后消失有可能是你的平板死机了,也有可能是你的平板的nandflash掉文件了。一般是掉文件的可能性比较大,这时你可以通过进recove...

大家觉得漫威和DC中,这些英雄谁最强?排名如何?

从小到大,看了无数的超级英雄电影,每一部都不同,每一部有每一部的特点,美国动漫超级英雄的两大阵营漫威和DC两边都各有千秋。实在是难以排名,如果非要给这些...

请问,诺基亚N85是款什么类型的手机?

[回答]基本功能手机类型拍照手机;智能手机;3G手机;音乐手机上市日期2008年09月手机制式GSM/GPRS/EDGE/WCDMA/HSDPA支持频段WCDMA(3G),GSM850/900/18...

 寻欢网  抄手游廊 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部