每个程序员书柜必备的编程书籍
“
原文参考了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平台化实践,
京东能提供哪些参考经验?
喜欢我们的会点赞,爱我们的会分享!
如何成为 SRE?先了解这些真相和面试情况
我几年来一直在推文中讲话和怒吼,一次又一次地被问到同样的问题:“如何成为 SRE?”
我的回答通常是漫无边际的。这么久,有时候我甚至都没有回信。可以说的太多了!太多的历史、太多的内容、太多由于不同个人情况而产生的因素。
所以,在这里表达一些我关于如何成为 SRE 的正式的回应:我认为它是什么,我是如何成为 SRE 的,要成为 SRE 你应该做些什么。本文是一本指南,可用作书签、参考和分享。 它提供了一些见解,读者可以根据具体情况进行映射,以帮助开始自己特定的路径。
希望你在旅程中发现这些内容很有用。
目录
定义现实我自己的路你的道路面试资源定义
那么,什么是 SRE(网站可靠性工程)? 根据 Google SRE 的书:“SRE 就是软件工程师设计一个运维团队的过程。”由于多种原因,这个定义有点争议,尤其是它的含义是运维团队无法进行合理的系统设计,而不是运维团队经常资源不足。这个定义的争议性还在于它暗含着所有的 SRE 都在日复一日地对后端系统进行编码,而这在 Google 甚至都不正确。
虽然谷歌投入了相当多的资金来对外宣传 SRE 的定义,但业内人士根据自己的情况开始实践 SRE,这样就导致了公司与公司之间有很大差异。而对它的定义,我看到的 SRE 指的是:
负责事件响应的团队;负责内部部署工具的团队;负责数据中心的团队;负责所有工程可靠性流程的团队;负责容器平台的团队;负责数据库的团队;负责网络的团队;负责监控的团队;嵌入开发团队中,做开发人员不负责的任务的团队我想明确一点:本指南不是关于 Google SRE 的 。Google SRE 有自身 SRE 的实践风格,某种程度来说是一个完全不同的学科。其他大公司可能会采用 Google SRE 的一部分,但我不知道谷歌以外谁会完全这样实施。如果你想成为 Google SRE,那完全没问题,但是这篇文章并不想这样引导。
那么,SRE 更广泛的定义是什么呢?很难为所有公司确定一个定义,就像很难为所有公司定义软件工程一样。如果软件工程师(SE)是由代码定义的,那么 SRE 也是软件工程师。那么,SRE 和需要 on-call 的软件工程师之间有什么区别呢?
如果你非要让我说,我会将网站可靠性工程定义为:“大规模构建和维护可靠的 SaaS 平台的实践。” 我认为 SRE 适用于拥有大型 SaaS 产品的公司,他们通常有高流量的网站和相关服务。也就是说,我是按照“网站可靠性”的字面意思来下的定义。
(你可能认为大型的内部服务(例如数据库)需要 SRE,但我的观点是这样的服务可能支持更大的面向客户的平台)。
一个需要 on-call 的软件工程师 知道代码如何工作、破解和修复。网站可靠性工程师 知道代码要如何适应公司的架构,并且需要设置整个系统以保证服务成功运行。
那么根据这个定义,SRE 的一些关键技能覆盖哪些领域?
软件工程分布式系统设计操作系统网络数据库安全可靠性最佳实践故障排除客户支持有人会抱怨“太多了!”,确实如此。SRE 是一门广泛的学科,因为运行大型分布式站点需要很多的技能。事实上,许多 SRE 倾向于专注上述的一种或两种技能。你可能也发现了,有的公司通常有多个 SRE 团队,支持平台上的不同领域。也有的团队可能正在实践 SRE 但叫法不同,例如叫基础设施工程或生产工程。你还会发现有些拥有 SRE 团队的公司根本就没有在实践 SRE。我鼓励大家把注意力集中在工作本身上,不用太纠结 SRE 的实际含义是什么。
现实
每当有人问我如何成为 SRE 时,通常他们最后会问自己为什么要做 SRE。这样说似乎不太礼貌,让我们花点时间来解释一些可能对该领域的误解。根据 Google 的深度营销与行业整体情况,期望与现实之间可能存在很大差异。
期望
拥有一件皮夹克收入比开发人员多每个人都听你说的话有权推迟交付实践,调整错误的优先级一直研究跨技术的新兴事物几乎不干体力活,只是一直在编码如果要求 on-call(译者 :随叫随到,SRE 在 Google 的特色之一)还态度粗鲁,可以随时挂断呼叫现实
收入与开发人员一样考虑到 on-call 的负担,实际收入可能比开发人员还少要对自己的东西 on-call有时还要对开发人员的东西 on-call!可以一连几个月不写代码同时,你需要知道如何读代码并诊断代码问题可能要负责可靠性,但无权修复它需要高级的客户支持技能,来说服开发人员采用大规模系统运行的最佳实践上述现实并非在每个地方都是如此,但还是比很多人期望的要真实。有时你要为新的花哨平台构建工具,有时候需要与 Puppet(一个自动化部署工具)和 DNS 作斗争。你需要具备灵活性并积累各种技能来完成工作。
SRE 的其他一些现实
解决 StackOverflow 无法解决的真正有趣的问题;有机会在整个软件 / 硬件堆栈中学习各种领域;体验大规模问题的快感,比如部署数千台服务器或缓解 DDoS 攻击;推进公司的全新流程;磨练沟通技巧,比如解决内部开发过程中的纠纷,以及对公开事故的很长的事后分析;作为负责和维护生产平台的人,得到该有的信任;与各领域和职业生涯中的工程专业人士合作。有一个非常老套的说法:如果是为了权力和荣耀,可能会感到失望。成为 SRE,因为你对这个工作感兴趣。
我自己的路
有时人们会根据我职业生涯中的具体步骤来追问:书名,公司,会议等。他们希望得到尽可能多的信息,以便尝试复制我的道路。问题是,我的道路不容易复制。
我普通的道路
在计算机和互联网环境中长大,也就是说如果无聊我可以闲逛拥有电影学位经济衰退期间毕业,无法在创意领域找到工作获得了一份技术支持的工作来支付学生贷款对服务器管理的职位着迷成为了一名光荣的接待员 / 销售代表很无聊地成长,晚上开始学习 Python留下来为不同公司提供更好的支持工作结识了很酷的开发人员,不断地在晚上学习 Python应聘了 Python 工作没得到 Python 工作应聘了内部工具的工作获得了这样的共苦Ops 同事休了陪产假,暂时接过他的职务SRE 经理要我加入 SRE 团队如果回放,这就是一个电影学生成为科技工作者的故事。 只要努力工作,你也会实现自己的梦想! 但这条道路是他人无法复制的,例如,当我面试支持方面的工作时,我是一个年轻的、白人、纯女性打扮的女人,由年长的、有家室的白种男性雇佣。 他们决定“给我个机会”,并说我让他们想起了他们的女儿,其中有个人甚至基于他小女儿的学校作业面试了我! 做这种关联的感觉并不好,虽然它确实对我有利,但我无法帮助你复制它。
我认为我的道路中可以而且应该复制的,是不断学习 。我的整个科技生涯就是我做的工作和我正在学习的工作。我不断阅读书籍,观看讲座,上课,学习新语言,与业界朋友交谈。我不会满足于现状,如果对当前正在做的工作不感兴趣,我会在晚上找到一些有趣的东西,然后会付诸行动。最终,这些新技能可以帮助我完成目前的工作或保证下一个工作。
我没有做到,但是你应该去做的是利用你的社区 。在开始一家科技公司的工作之前,我还不知道技术社区是怎么一回事,我一个人一直在抨击 Python 问题,而不是参加聚会并获得帮助。有一段时间我找不到工作,也不了解技术工作相关的情况。后来我终于找到了工作,但我认为这更多的是一些运气的成分而不是我的能力。利用你的社区吧!它会帮助你找到一份工作。
你的道路
我遇到过各种不同背景的人,他们都想要成为 SRE。有些人已经是开发人员,有些人还在训练营,有些人在做 QA 或营销,他们都想知道下一步应该是什么。
官方的答案是“看情况”,这是认真思考权衡所有情况后的答案!但我知道这个答案没有什么用,所以让我们以不同的方式来往下说。
如果我现在试图成为 SRE,会做两件事:
找到离我最近的 SRE 组织(请记住,它可能不会被称为“SRE”!)。 弄清楚成为 SRE 我需要跳(hop) 几次。你可能不熟悉这个术语 - “跳跃”(hops)。它是一种网络概念,指的是数据包在来源和目标之间发生的路由网络设备(路由器、网桥等)的数量。在家用 wifi 上的笔记本电脑和朋友的笔记本电脑之间传输的数据包,可能比在笔记本电脑和另一个国家 / 地区的朋友的笔记本电脑之间传输的数据包少。同样地,我认为与 SRE 团队合作的开发人员,比学习电影毕业后想要成为 SRE 的人之间的跳跃会更少。
职业生涯中的跳跃就像是技能和网络(人际网络!)间的组合 。这是一个持续的过程,找到需要什么技能来进行下一跳,并找到能帮助你成功的人。你的下一跳很可能不是一个 SRE 工作,但它会让你更接近 SRE!
与计算机网络非常相似,社交网络越大,道路就越有效率。这取决于谁帮助你、拥有的技能和时间,你的道路可能比同一个地方的其他人更长或更短。一个人的道路可能看起来像新兵训练营 - 自由职业者 - 兼职开发人员 - 副业做做运维 - 系统管理员 - 运维 - SRE。而另一个人可能会在刚毕业就找到 SRE 团队的实习机会。不同的人有不同的机会,你需要找到符合自己实际情况的机会。
因此,先找到 SRE 有哪些相关的技能然后缩小这些技能范围。缩小到什么程度呢,就是如果你拥有了这部分技能,你就可以得到一份更接近 SRE 的新工作。然后重复。
例如,如果不知道如何编程:学会编程!去训练营,参加在线课程,获得计算机科学学位,做一切合适的事情。扩展人际网络并找到招聘人员,或做自由职业。尽量让你的简历上有开发经历,然后在新职位中学习下一个技能,例如网络或数据库。参加更多的课程,找到更多的聚会,换新工作,一步步接近 SRE。
最难的部分,是如何让你的脚踏进那道门槛。一旦有了开发人员或系统管理员的工作,一旦可以在简历上展示出某种形式的“工程师”,你就有空间来呼吸。坚持那份工作 1 到 2 年,获得一些经验,建立自己的网络,并开始下一个支点。这需要时间,但会是你职业生涯剩余的时间中,成为 SRE 并超越它的一个方法。
面试
无论你过程如何,最终都会碰到 SRE 工作的面试。恭喜!不同公司和团队的 SRE 面试是不同的,具体取决于你的职责。因此,提前研究好工作岗位(无论如何你都应该这样做),并准备好要涵盖的主要主题。
除了在所有面试中常见的行为方面的问题之外,SRE 的面试还会包括编码、故障排除和可靠性方面的问题。
编码
无论是带回家的脚本问题还是现场的白板面试,你都不得不编码。通常他们会告诉你哪些语言是可以接受的。如果他们没有告诉你,请提问。通常,任何面向对象的语言都要会(Python、Ruby、C ++、Java 等),Go 是一个例外。一般的建议是描述你正在思考的一切,但这方法在以前对我无效的。花时间静静地考虑你自己的方法,然后解释你将要做什么,如果需要就不断重复。如果没有明确计时、还可以带回家的作业,那就花上你所需要的所有时间!员工肯定被安排在候选人之前去做这些作业,许多编码任务都没有计时,因此你可能需要花比他们认为的还多的时间。如果他们问你需要多长时间,请给一个合理的谎言。除非它恰好是他们专有的应用程序,否则他们无法分辨。(译者 :不赞成谎言,更合适的是一个合理的预估)故障排除
他们希望看到你的思考方式,以及对系统的理解程度。可能采取经验示例的形式,即告诉“碰到过的的故障以及自己的贡献”。也可能采取谜题的形式,即“时区 A 的开发人员抱怨每天下午 3 点网络连接会速度慢,你会怎么调查这个?“随意提问(“我有 root 吗?”)并在墙上抛出示例(“我会先查看日志,以防开发人员并不认为应该看那里。”)这些问题的关键在于了解你对以前使用过的系统的熟悉程度、所拥有的体验以及碰到过的不常见的例子。重点是判断深度,而不是正确性。可以放心地说,“这就是我所知道的”或“我不知道,但我会试试它。”可靠性
整个工作中,对可靠性的要求是明显的。编写代码时,应该编写异常处理和测试。如果没时间,请写下来或解释你将如何解决这个问题。会测试什么?怎样测?会如何进行变更?会怎么回滚?在进行故障排除时,考虑可靠性以及每个步骤所承担的风险。是否建议重启还在处理生产事务的服务器?如何确保故障不再发生?对于入门级 SRE,我希望能够使用一种灵活的编程语言,比如 Python。可以创建一个小的应用程序,编写测试并处理异常。还希望看到像 Linux 这样的操作系统方面的一些能力,可以在命令行上搜索文件系统,知道如何 grep 日志,可以 ping 一个域。希望看到大规模技能方面的一些预见,例如使用配置管理系统或 CI 工具。可能无法负担运行 AWS 实例的费用,但也许已经使用免费的 Heroku 帐户,并在免费的监控 add-ons 程序中检出了你的应用程序指标。无论在 SRE 职业生涯中,无论是 Kubernetes 还是 MySQL 还是边缘网络,这些基础的技能都将帮助你取得成功。
一个有趣的部分,每次面试结束时都应该留出时间让你 提问 ; 也就是说,你要面试公司。应该提前计划出这些问题,并写下来以供参考。要注意他们的答案。要从感觉上了解他们的工作文化、项目和团队的健康状况。
可能不会第一次得到你梦寐以求的工作,但是询问其中的一些问题,可以帮你了解这项工作将如何为下一次求职提供帮助。
“过去六个月你做了哪些项目?”
SRE 的工作是周期性的,是主动和被动的混合体。六个月涵盖两个季度,可以很好地了解如何平衡你的工作。在那段时间编了什么代码吗?或者手动停用了 1,000 台服务器?如果创建了什么,是否写了什么文档?“你最后一次被呼叫的时间是什么时候,是因为什么?”
呼叫发生了。我们准备好了 on-call,因为我们希望在某个时候被呼叫。但是,“主数据库发生了故障,已经通知到了所有的人”,和“这个旧的服务器无法 ping,这就是重要的一切,但没人有时间修复它”,这两者是有区别的。“你所有的开发团队都 on-call 吗?”
分配 on-call 的任务,是 DevOps 文化的关键部分,应该知道公司处于什么阶段。所有开发团队都 on-call 吗?到了这个阶段吗?如果是,它有多久了?哪些团队还没有 on-call?适当的时候问这个问题,你会希望了解开发团队以及团队之间的关系。如果觉得这个话题还可以继续,可以问问需要你 on-call 的内容是什么。答案可能很明显,但可能是另一个团队尚未替换旧的 Nagios,你会被安排它的安装 on-call。问这些问题不是来确保呆在最好的公司,而是要清楚你想要的是什么 。例如,如果喜欢未来的队友和福利套餐,但是知道自己正在进行可怕的 on-call 轮换,那么你可以在薪资谈判中提到这一点。重复一遍,可能不会第一次尝试就得到梦寐以求的工作,所有的公司都有其优点和缺点。牢牢地记住哪些因素破坏了双方的印象,并尽力去搞清楚哪些公司存在这个因素。
资源
现在,你已经了解了什么是 SRE,并且有一条通向它的道路。下一步就是发展你的技能!
如上所述,通往 SRE 有很多道路,包括计算机科学学位和编码训练营。但那些要花钱,并且可能对你来说遥不可及。可以利用免费资源进入市场,我认为每个人都应该拥有同样的机会。
以下是 SRE/Ops/Systems 社区提供的免费教育资源的合集,我还没有亲自把所有的都使用过,所以也没有什么排名,但每一个都强烈推荐。这里提供了这些材料的不同类型,以便你根据自己的学习方式进行选择。
你在这里的所有学习都不要停下来。 选择看起来很有趣的内容,如果不能解决问题,请选择其它内容。使用以下列表作为学习指南,来作为填补你空白的备忘单,它甚至还是检查你是否会享受 SRE 工作的一个好方法!
一般 / 多个主题
Ops School (docs collection)SRE Weekly (newsletter)SREcon (conference videos)DevOpsDays (conference videos)Eli the Computer Guy (videos)Katacoda (interactive training)Sysadmin Casts (podcast)The Google SRE Book (book)The Geek stuff (blog)DevOps BootCamp (course)Coursera (courses)Architecture
The System Design Primer (guide)Distributed Systems (videos)Cloud
The Open Guide to Amazon Web Services (docs)Architecting Distributed Cloud Apps (videos)Databases
sqlzoo (interactive SQL training)Andy Pavlo’s courses (online course material)Readings in Database Systems (book)Intro to SQL: Querying and managing data (online course with videos)MongoDB University (courses)Git
Introduction to git (video)Ry’s Git Tutorial (book)Learn git branching (interactive tutorial)Git Immersion (interactive tutorial)Networking
How DNS Works (comic)Understanding IP Addressing: Everything You Ever Wanted To Know (whitepaper)Beej’s Guide to Network Programming (book)Operating system internals
Operating system basics (video)Unix system calls p1 (video)Unix system calls p2 (video)fork() and exec() (video)Wizard Zines (online zines, mostly free)NAND2Tetris (online course / book)Programming from the Ground Up (book)MIT’S Operating System Engineering (course)Crash Course Computer Science (videos)Intro to Operating Systems (videos)Operating Systems: Three Easy Pieces (book)Programming
Codecademy (interactive tutorials)Learn Python (interactive tutorials)Awesome Python (curated list of resources)Automate the Boring Stuff (book)Learn to Program (book / tutorial)Higher-Order Perl (book)Puppet
Puppet Learning VM (interactive tutorial)Security
The Big Blog Post of Information Security Training Materials (blog)Cyber Aces (courses)Over the Wire (capture the flag games)Unix / Linux operations
The Unix Workbench (book)Advanced bash scripting guide (book)Introduction to Linux (online course)Unix toolbox (cheatsheet)Command Line Challenge (games)Vim
VIM Adventures (interactive game)相关问答
求问小霸王游戏卡里的几个游戏英文名?1.TheLegendofKage2.Tetris3.Bombman4.Pacman5.CircusCharlie几百合一的有时都不按这个命名的,,,我举的这五个是正常时...
横格本能做什么好玩的?横格本能(Tetris)是一款经典的益智游戏,以下是一些玩横格本能时可以尝试的有趣活动:1.挑战高分:尽量在有限的时间内消除更多的行,争取得到更高的分数。可...
路虎俄罗斯方块是什么型号?1路虎俄罗斯方块是LH-TETRIS型号。2LH-TETRIS型号是指路虎俄罗斯方块的具体型号,它是一款经典的俄罗斯方块游戏。3路虎俄罗斯方块是一款非常受欢迎的游戏,...
俄罗斯方块的背景音乐都分别叫什么名称?“DanceoftheSugarPlumFairy”是著名的古典音乐作品,来自于柴可夫斯基的《胡桃夹子》。“TurkishMarch”则是莫扎特的钢琴奏鸣曲第11号中的一首,因其旋...
N85和N82哪个好?[回答]N85可是号称比N96还要强的机器82是拍照的机器拍照是85比不过82导航都半径八两..游戏嘛差距来了85有游戏专用按键哦双向滑盖82的屏幕2.4英寸QVGA(...
娱乐行业的俄罗斯方块游戏规则?娱乐行业的俄罗斯方块(Tetris)游戏是一款非常经典的游戏,其规则如下:1.游戏开始后,方块会从屏幕顶部落下,玩家可以通过左右移动和旋转方块,让方块落到屏...
switch游戏怎么下载最便宜?会员免费游戏在Eshop商店的【NintendoswitchOnline】界面能下载《Tetris99》和《FamilyComputer》,其他的大部分免费游戏则需要会员才能进行联机,可以在搜...
要重新购买怎么办? - Microsoft Community[回答]这个需要您致电MSStore了。400-882-2059
在switch的在线商店中,有哪些可玩性比较高的免费游戏值得下载?以下游戏支持中文1,宝可梦探险寻宝(PokemonQuest)2,传说对决(ArenaofValor)3,神之浩劫(SMITE)4,星际战甲(Wardrame)5,枪火游侠(Palad...
哪一个版本的俄罗斯方块最好玩?个人喜好不同,无法判断哪一个版本最好玩。但从游戏发展的角度来看,最早的俄罗斯方块(Tetris)是最经典和最受欢迎的版本,因为它简单易懂,且有挑战性和可玩性...