每个程序员书柜必备的编程书籍
“
原文参考了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平台化实践,
京东能提供哪些参考经验?
喜欢我们的会点赞,爱我们的会分享!
「收藏」Flash闪存颗粒和工艺知识深度解析
[收藏] Flash闪存颗粒和工艺知识深度解析
原创: Hardy 架构师技术联盟 5天前
Wafer即晶圆,是半导体组件“晶片”或“芯片”的基材,从沙子里面高温拉伸生长出来的高纯度硅晶体柱(Crystal Ingot)上切下来的圆形薄片称为“晶圆”。采用精密“光罩”通过感光制程得到所需的“光阻”,再对硅材进行精密的蚀刻凹槽,继续以金属真空蒸着制程,于是在各自独立的“晶粒”(Die)上完成其各种微型组件及微细线路。对晶圆背面则还需另行蒸着上黄金层,以做为晶粒固着(Die Attach) 于脚架上的用途。
以上流程称为Wafer Fabrication。早期在小集成电路时代,每一个6吋的晶圆上制作数以千计的晶粒,现在次微米线宽的大型VLSI,每一个8吋的晶圆上也只能完成一两百个大型芯片。我们NAND Flash的Wafer,目前主要采用8寸和12寸晶圆,一片晶圆上也只能做出一两百颗NAND Flash芯片来。
NAND Flash Wafer
Wafer的制造虽动辄投资数百亿,但却是所有电子工业的基础。晶圆的原始材料是硅,而地壳表面有用之不竭的二氧化硅。二氧化硅矿石经由电弧炉提炼,盐酸氯化,并经蒸馏后,制成了高纯度的多晶硅,其纯度高达99.99%以上。晶圆制造厂再将此多晶硅融解,再在融液里种入籽晶,然后将其慢慢拉出,以形成圆柱状的单晶硅晶棒,由于硅晶棒是由一颗晶面取向确定的籽晶在熔融态的硅原料中逐渐生成,此过程称为“长晶”。硅晶棒再经过切段,滚磨,切片,倒角,抛光,激光刻,封装后,即成为集成电路工厂的基本原料——硅晶圆片,这就是“晶圆”。
下图是NAND Flash生产简要流程:
Die 就是芯片未封装前的晶粒,是从硅晶圆(Wafer)上用激光切割而成的小片(Die)。每一个Die就是一个独立的功能芯片,它无数个晶体管电路组成,但最终将被作为一个单位而被封装起来成为我们常见的闪存颗粒,CPU等常见芯片。
什么是ink Die
在晶圆制造过程中,会对Wafer中的每个Die进行严格测试,通过测试的Die,就是Good Die,未通过测试的即为Ink Die。这个测试过程完成后,会出一张Mapping图,在Mapping里面会用颜色标记出不良的Die,故称Ink Die。
Flash芯片封装分类
目前NAND Flash封装方式多采取TSOP、FBGA与LGA等方式,由于受到终端电子产品转向轻薄短小的趋势影响,因而缩小体积与低成本的封装方式成为NAND Flash封装发展的主流趋势。
TSOP: (Thin smaller outline package )封装技术,为目前最广泛使用于NAND Flash的封装技术,首先先在芯片的周围做出引脚,采用SMT技术(表面安装技术)直接附着在PCB板的表面。TSOP封装时,寄生参数减小,因而适合高频的相关应用,操作方便,可靠性与成品率高,同时具有价格便宜等优点,因此于目前得到了极为广泛的应用。
BGA: (Ball Grid Array也称为锡球数组封装或锡脚封装体 )封装方式,主要应用于计算机的内存、主机板芯片组等大规模集成电路的封装领域,FBGA 封装技术的特点在于虽然导线数增多,但导线间距并不小,因而提升了组装良率,虽然功率增加,但FBGA能够大幅改善电热性能,使重量减少,信号传输顺利,提升了可靠性。
采用FBGA新技术封装的内存,可以使所有计算机中的内存在体积不变的情况下容量提升数倍,与TSOP相比,具有更小的体积与更好的散热性能,FBGA封装技术使每平方英寸的储存量有很大的提升,体积却只有TSOP封装的三分之一,与传统TSOP封装模式相比,FBGA封装方式有加快传输速度并提供有效的散热途径,FBGA封装除了具备极佳的电气性能与散热效果外,也提供内存极佳的稳定性与更多未来应用的扩充性。
LGA: (Land Grid Array ) 触点陈列封装,亦即在底面制作有数组状态坦电极触点的封装,装配时插入插座即可,现有227 触点(1.27mm中心距)和447 触点(2.54mm 中心距)的陶瓷LGA,应用于高速逻辑 LSI 电路,由于引线的阻电抗小,对高速LSI 相当适用的,但由于插座制作复杂,成本较高,普及率较低,但未来需求可望逐渐增加。
Flash芯片封装叠Die(Stack Die)
由于NAND Flash单颗Die的容量有限,为了实现更高的容量,需要在一个封装片内堆叠几个Die。在Wire Bond的时候,用金线互连。
目前单颗Die的容量最高的为Micron公司的MLC 4GB,目前最先进的堆叠技术可以叠8层,因此理论上MLC单颗封装片可以做到32GB。Micron公司计划在09年Q4推出此容量的封装片。
Flash芯片TSOP封装和BGA封装的内部结构
TSOP封装只需要一个引脚框架,把NAND FLASH Die的Pad打线(Wire Bond)连接到引进框架上面即可。封装技术简单,成本低。但其打线方式只能从两边打线,因此stack die就比较困难。
BGA封装与TSOP封装不同在于其采用了Substrate,用电路板来对引脚走线,因此可以进行四面打线,这样在进行叠die的时候,就变得更加容易操作。但成本会比TSOP要高。
Flash芯片封装的尺寸,一些封装方式尺寸比较:
NAND Flash出货有两种产品样式:
一种是Wafer,即晶圆出货,这种产品样式一般客户采购回去需要再测试和COB封装等,这种客户多为闪存卡大客户。
一种是封装片出货,NAND Flash目前最普遍采用的是48TSOP1的封装方式,现货市场均为TSOP的封装片。
NAND Flash按工艺可分为SLC与MLC
SLC英文全称(Single Level Cell)即单层式单元储存。SLC技术特点是在浮置闸极与源极之中的氧化薄膜更薄,在写入数据时通过对浮置闸极的电荷加电压,然后透过源极,即可将所储存的电荷消除,通过这样的方式,便可储存1个信息单元,这种技术能提供快速的程序编程与读取,不过此技术受限于Silicon efficiency的问题,必须要用较先进的流程强化技术,才能向上提升SLC制程技术。
MLC英文全称(Multi Level Cell)即多层式单元储存。Intel在1997年9月最先开发成功MLC,其作用是将两个单位的信息存入一个Floating Gate(闪存存储单元中存放电荷的部分),然后利用不同电位(Level)的电荷,通过内存储存的电压控制精准读写。MLC通过使用大量的电压等级,每一个单元储存两位数据,数据密度比较大。SLC架构是0和1两个值,而MLC架构可以一次储存4个以上的值。因此,MLC架构可以有比较高的储存密度。
TLC英文全称(Triple Level Cell)即一个单元可以存储单元可以存储3bit,因此需要8个等级的电位进行编码解码才能实现。其实TLC是属于MLC的一种。
SLC和MLC的基本特性表
Flash坏块的形成
NAND Flash的存储原理是,在写入(Program)的时候利用F-N隧道效应(Tunnel Injection隧道注入)的方法使浮栅充电,即注入电荷;在擦除(Erase)的时候也是是利用F-N隧道效应(Tunnel Release隧道释放)将浮栅上的电荷释放。
隧道注入和隧道释放的产生都需要十几伏的瞬间高电压条件,这对浮栅上下的氧化层会造成一定损伤,因此这样重复的操作(P/E Cycle)是有限的。SLC大概是100K次,MLC大概是10K次。达到读写寿命极限的时候存储单元就会出现失效,然后就会造成数据块擦除失效,以及写入失效,于是就会被标记起来,作为坏块,并将这个标记信息存放在Spare Area里面,后续操作这个Block时,需要Check一下这个信息。
Flash固有坏块
由于制造工艺的原因,通常普通的NAND FLASH从出厂开始就有坏块了,一般在2‰以下。一般芯片原厂都会在出厂时都会将坏块第一个page的spare area的第6个byte标记为不等于0xff的值。
NAND Flash的存储单元是有使用寿命的
NAND Flash的存储原理是,在写入(Program)的时候利用F-N隧道效应(Tunnel Injection隧道注入)的方法使浮栅充电,即注入电荷;在擦除(Erase)的时候也是是利用F-N隧道效应(Tunnel Release隧道释放)将浮栅上的电荷释放。隧道注入和隧道释放的产生都需要20V左右瞬间高电压条件,这对浮栅上下的氧化层会造成一定损伤,因此这样重复的操作(P/E Cycle)是有限的。SLC大概是100K次,MLC大概是10K次。
三星估算的SSD硬盘的寿命
如果每天对SSD写入4.8GB的数据,假设SSD总容量为16GB,那么,你至少需要3.34天才能对整个SSD的每个单元擦写一次;如果此SSD为擦写次数为100K的SLC单元,那么,你至少需要3.34×100K天才能使这个SSD完全失效;3.34×100K天=913年,因此16G的SSD可以使用913年 。那么,如果是MLC的话,也至少可以使用91.3年。
晶圆制程工艺发展历史
芯片制程工艺是指晶圆内部晶体管之间的连线间距。按技术述语来说,也就是指芯片上最基本功能单元门电路和门电路间连线的宽度。
主流厂商的晶圆制程工艺以及下一代制程工艺的情况,如下表。
芯片制造工艺在1995年以后,从0.5微米、0.35微米、0.25微米、0.18微米、0.15微米、0.13微米、90纳米、75纳米、65纳米一直发展到目前最新的34纳米。
一步步印证了摩尔定律的神奇。以90纳米制造工艺为例,此时门电路间的连线宽度为90纳米。我们知道,1微米相当于1/60头发丝大小,经过计算我们可以算出,0.045微米(45纳米)相当于1/1333头发丝大小。可别小看这1/1333头发丝大小,这微小的连线宽度决定了芯片的实际性能,芯片生产厂商为此不遗余力地减小晶体管间的连线宽度,以提高在单位面积上所集成的晶体管数量。采用34纳米制造工艺之后,与65纳米工艺相比,绝对不是简单地令连线宽度减少了31纳米,而是芯片制造工艺上的一个质的飞跃。
目前最先实现34nm工艺的是Intel和Micron联合投资的IM,此技术被最先应用在了NAND FLASH上面,可见NAND FLASH的制程工艺跳跃是所有IC中最快的。
晶圆技术的发展都是受生产力驱动,必须向更小的制程间距和更大的晶圆尺寸发展。制程从2.0um、0.5um、0.18um、90nm一直到目前的34nm,晶圆尺寸从最初的5英寸发展到目前的12英寸,每次更迭都是一次巨大的技术跳跃,凝聚了人类科技的结晶,也一次次印证了摩尔定律的神奇。
晶圆尺寸的大约每9年切换一次。而晶圆制程由最初的几年更迭一次,到目前的基本上每年都能更迭一次。
更多内容和“闪存技术、产品和发展趋势全面解析”全面的闪存技术电子书,请点击“了解更多”查阅。
相关问答
数电中两个对叠的三角形符号是什么?答:在数字电子中,两个对叠的三角形符号通常表示与非门(NANDgate)。与非门是一种基本的逻辑门电路,它接受两个或多个输入信号,并生成一个输出信号。当输入...
【请问, and 在美式发音里连读或者快读的时候到底发什么音?听c...[最佳回答]and在连读时发音为"ən",这是在句中弱化了的缘故.与后连读时用"n"与后连读.类似如:http://zhidao.baidu.com/question/36...
and 跟 andn 指令的区别"AND"和"ANDN"都是计算机指令中的逻辑操作指令,用于操作二进制位的逻辑运算。它们的主要区别在于操作的方式和结果的不同:1.AND(按位与)指令:AN...
【数学分析中的确界(supremumandinfimum)具有些什么性质?求...[回答]设S为R的一个数集.若存在数M(L),使得对一切x∈S,都有x≤M(x≥L),则称S为有上界(下界)的数集,数M(L)称为S的一个上界(下界).若数集S既有上...若...
and 英语什么意思?你好,我是【爱与喜欢的区别】,很高兴为你解答。and意思是和;加;接着;那么。1、and译为“和”、“并”,此时,and用来连接语法作用相同的词、短语或句子。(...(...
【I'mavailable12 nnand 1pmaswelltomorrow这是聊天记录中间的...[最佳回答]既然是聊天就随意了,估计不是老外写的.nn=noon中午
什么时候单词弱读 and 什么情况下需要强读注意什么情况下弱读_...[最佳回答]你用and表示并列的时候,就要弱读,因为强调的是前后两者~比如~buyeggsandpotatoes~中间的and发音成n就可以了~但是当你要强调后面的内容,表示“还...
andon是什么意思?Andon系统作为精益生产制造管理的一个核心工具,在制造过程中发现了生产缺陷/异常时;能通过系统在最短的时间里将信息传递出去,使问题能够快速解决;使生产能...
and is是什么意思?同学你好哦~Andistheisland''smanufacturing而且是岛上的制造业manufacturingn.制造;制造业Butwedohaves...
英语中u和n表示什么?u指you.n指andU是不可数的意思,n.是名词的意思。U是单词uncountable的缩写。uncountable:adj.(名词)不可数的例句:Anuncountablenounis...