如果你能回到过去,告诉自己在开发人员职业生涯的开始读一本书,你会读哪本书?
我希望这份清单是多样的,涵盖范围很广。
搜索:使用右上角的搜索框。要搜索当前问题的答案,使用inquestion:this。例如:
inquestion:this "Code Complete"
如果你能回到过去,告诉自己在开发人员职业生涯的开始读一本书,你会读哪本书?
我希望这份清单是多样的,涵盖范围很广。
搜索:使用右上角的搜索框。要搜索当前问题的答案,使用inquestion:this。例如:
inquestion:this "Code Complete"
代码完成(第二版),作者:Steve McConnell 实用的程序员 计算机程序的结构与解释“, 由Kernighan和Ritchie编写的C编程语言 Cormen, Leiserson, Rivest & Stein的《算法导论》 四人组的设计模式 重构:改进现有代码的设计 神秘的人月 Donald Knuth的《计算机编程的艺术》 编译器:原则、技术和工具,作者:Alfred V. Aho, Ravi Sethi和Jeffrey D. Ullman Gödel,埃舍尔,道格拉斯·霍夫施塔特的巴赫 干净的代码:敏捷软件工艺手册,作者:Robert C. Martin 有效的C + + 更有效的c++ Charles Petzold的《CODE Jon Bentley的Programming Pearls 有效地使用遗留代码,作者:Michael C. Feathers 德马科和利斯特设计的Peopleware Peter Seibel的《Coders at Work》 费曼先生,你肯定是在开玩笑! Effective Java第二版 Martin Fowler的《企业应用程序体系结构模式》 小策划者 经验丰富的策划者 为什么是Ruby指南 囚犯在经营疯人院:为什么高科技产品让我们疯狂,以及如何恢复理智 Unix编程的艺术 测试驱动开发:通过Kent Beck的例子 敏捷开发人员的实践 别让我思考 敏捷软件开发,原则,模式和实践,作者:Robert C. Martin Eric Evans的领域驱动设计 唐纳德·诺曼的《日常事物的设计》 Andrei Alexandrescu的现代c++设计 最佳软件写作I作者:Joel Spolsky Kernighan和Pike的《编程实践》 实用主义思维和学习:重构你的湿件Andy Hunt著 Steve McConnel的《软件评估:揭开黑艺术的神秘面纱》 《激情程序员(我的工作去了印度)》作者:Chad Fowler 黑客:计算机革命的英雄 算法+数据结构=程序 编写可靠的代码 JavaScript -好的部分 37信号的真实生活 《编程基础》作者:Karl Seguin 计算机图形学:C语言原理与实践(第二版) 用Java思考,作者:Bruce Eckel 计算系统的要素 Joshua Kerievsky的《重构模式》 Andrew S. Tanenbaum的《现代操作系统》 注释图灵 唐纳德·诺曼著的《让我们聪明的东西》 克里斯托弗·亚历山大的永恒建筑方式 截止日期:汤姆·德马科的一本关于项目管理的小说 c++编程语言(第三版),作者Stroustrup 企业应用程序体系结构模式 计算机系统——程序员的视角 《c#中的敏捷原则、模式和实践》,作者:Robert C. Martin 成长中的面向对象软件,由测试引导 框架设计指南:Brad Abrams 大卫·韦斯特的《客体思维》 《UNIX环境下的高级编程》作者:W. Richard Stevens 黑客和画家:来自计算机时代的大想法 特蕾西·基德的《新机器的灵魂》 CLR via c# by Jeffrey Richter 克里斯托弗·亚历山大的永恒建筑方式 Steve Metsker编写的c#设计模式 路易斯·卡罗尔的《爱丽丝梦游仙境》 罗伯特·m·皮尔西格的《摩托车保养的禅与艺术》 关于脸-交互设计的要点 《每个人都来了:没有组织的组织的力量》,克莱·舍基著 编程之道 自然的计算之美 编写可靠的代码,作者:Steve Maguire 菲利普和亚历克斯的网络出版指南 Grady Booch的面向对象分析和应用设计 Joshua Bloch的《Effective Java》 可计算性,n.j.卡特兰 编程大师 道德经 高效的程序员 凯文·米特尼克的《欺骗的艺术》 《职业程序员:不完美世界的游击战术》作者:Christopher Duncan 人工智能编程范式:通用Lisp的案例研究 末日大师 Andy Hunt、Dave Thomas和Matt Hargett用NUnit编写的c#实用单元测试 《如何解决问题》作者:George Polya 保罗·科埃略的《炼金术士》 Smalltalk-80:语言及其实现 编写安全代码(第二版)作者:Michael Howard 由Philip Wadler和Richard Bird编写的函数式编程导论 没有错误!大卫·蒂伦著 Jason Freid和DHH的返工 JUnit在行动
代码完成是第一选择,但我也会引用Gang of Four的设计模式和Craig Larman的应用UML和模式。
克里斯托弗·亚历山大(Christopher Alexander)的《永恒的建筑方式》(The Timeless Way of Building)是另一个伟大的作品。尽管它是关于架构的,但它包含在我已经读过的许多优秀编程书籍的参考书目中。
另一本,我从中学到很多新东西,是克里夫顿·诺克的《数据访问模式》。
我已经有一段时间了,所以我发现的大多数有影响力的书在今天并不一定适用。我相信理解你所开发的平台(包括硬件和操作系统)是非常重要的。我也认为从别人的错误中学习很重要。所以我想推荐两本书:
计算灾难和寻找愚蠢:二十多年的高科技营销灾难
K&R
@胡安:我了解胡安,我知道——但有些东西只有真正着手手头的任务才能学到。整天用抽象的概念说话只会让你变成一个学究。正是在抽象的运用中,我们才真正领悟到它们存在的原因。: P
提到Alan Cooper的《The are Running The Asylum》真是让人大开眼界,自从我读了那本书后,任何与我合作过的开发者都听我提到过它所支持的理念。+1
我有几篇(相当老的)关于这个主题的博客文章
http://www.spindriftpages.net/blog/dave/2005/11/17/c-books/ http://www.spindriftpages.net/blog/dave/2005/06/06/good-oo-books/ http://www.spindriftpages.net/blog/dave/2005/05/11/really-great-it-books/ 虽然是一本好书,我找到了代码 读起来相当乏味(a 我承认这是有争议的观点)。 我喜欢 杰弗瑞·里克特和书乔尔 斯波斯基写道 Eric Meyer的CSS书籍也很不错
除了它们在我书架上的排列顺序外,没有特别的顺序:
实用的程序员 福勒的rafacoring 有效地使用Feathers的遗留代码。这实际上是重构的一个伙伴卷。 Fowler提炼的UML。它的其他优点之一是简洁。 Steve Maguire编写的调试开发过程 设计模式(又名“四人组”)由Gamma等人
Kent Beck的实现模式。
可选文字 http://ecx.images-amazon.com/images/I/51JHn-6oNwL._SL500_AA240_.jpg
你可以学习如何通过编程与人交流。
除了其他人的建议,我建议你要么买一本《SICP》,要么在网上阅读。这是我读过的为数不多的几本书之一,我觉得它极大地提高了我在软件设计方面的技能,特别是在创建良好的抽象层方面。
有一本与编程没有直接关系,但也是程序员(IMO)的好书是《具体数学》(Concrete Mathematics)。其中的大部分主题(如果不是全部的话)对程序员来说都是有用的,而且它比我迄今为止读过的任何其他数学书籍都能更好地解释问题。
我认为《Unix编程的艺术》是一本优秀的书,作者是Eric S. Raymond这样的优秀黑客/天才,他试图让我们理解软件设计的一些原则(主要是简单性)。这本书是每一个要在Unix平台下开始一个项目的编程人员的必读之书。
我有几本对我有强烈影响的好书,但到目前为止我还没有在这个清单上看到:
唐纳德·诺曼的《日常事物心理学》。为他人设计的一般原则。这似乎对UI很有好处,但如果你仔细想想,它几乎在任何地方都有应用程序,只要有一个界面,除了原始开发人员之外的人就必须与之打交道;例如,一个API,并以这样一种方式设计接口,使其他开发人员形成正确的心智模型,并从API本身获得适当的反馈。
《软件测试的艺术》作者:Glen Myers。对测试软件的良好的、一般的介绍;对于程序员来说,阅读有助于他们像测试人员一样思考,即思考可能出现的错误并为此做好准备。
顺便说一句,我知道这个问题是“最具影响力的一本书”,但讨论似乎已经变成了列出供开发人员阅读的好书,所以我希望我列出两本好书而不是一本能得到谅解。
虽然我同意上面的许多书都是必读的(实用程序员、神秘的人月、计算机编程艺术和SICP立刻映入我的脑海),但我想走一个稍微不同的方向,推荐Edsger Dijkstra的《编程规程》。尽管它已经有32年的历史了,但它对“可验证性设计”的强调仍然非常重要(即使“可验证性”意味着“证明”而不是“单元测试”)。
我最近读了《代码中的梦想》,觉得这本书很有趣。也许从我开始阅读钱德勒1.0的那一天起,情况就更加如此了。读到一个由有才能的人组成的项目团队试图“改变世界”的成长痛苦和错误,你会从中学到很多东西。此外,Scott还在书中介绍了许多程序员的知识和智慧,这是一本有趣的读物。
《美丽代码》中有一两件事让我有不同的想法,尤其是关于自顶向下操作符优先级的那一章。
这并不是对这个问题的直接回答,因为我觉得上面已经回答过了,然而,有一本书对我的编码方式产生了明显的影响,那就是《代码阅读》第1卷:开源视角。
可选文字 http://g.bookpool.com/covers/405/0201799405_140_30O.gif
Pro Spring是对控制反转和依赖注入世界的一个极好的介绍。如果你不了解这些实践和它们的含义,那么Pro Spring中主题和技术细节的平衡是非常出色的。它建立了一个伟大的案例和随之而来的个人基础。
我建议的另一本书是Robert Martin的《敏捷软件开发》(ASD)。代码味道、敏捷技术、测试驱动开发、原则……许多不同编程方面的良好平衡。
更传统的经典著作包括臭名昭著的GoF设计模式,Bertrand Meyer的面向对象软件构建,Booch的面向对象分析与设计,Scott Meyer的“有效的c++”系列,以及Gunderloy写的一本不太出名的书,《编码员到开发人员》。
虽然书很好……别忘了收音机!
... 我再补充一点。如果你还没有发现过狩猎,那就来看看吧。它比堆栈溢出更让人上瘾:-)我发现,以我的谷歌类型的习惯——我需要更昂贵的订阅,这样我就可以在任何时候看任何一本书——但我会向任何有兴趣的人推荐这个试验。
(啊,是的,今天来点obj-C,明天来杯可可,花样?soa ?那本食谱里的例子是什么?史蒂夫在第二版里说了什么?我应该买这本书吗?... 如果你想要一些连续性和上下文,像这样的订阅是很好的…)
用户曾经碰过您的代码吗?如果你不是只做后端工作,我推荐关于脸:用户界面设计的要点——现在是第三版(链接)。我曾经认为我的用户很愚蠢,因为他们没有“理解”我的界面。当然,我错了。About Face让我改变了想法。
Pete Goodliffe的《Code Craft》是一本好书!
代码工艺http://ecx.images-amazon.com/images/I/51WZ9AEC3GL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg
这里有两个我没有看到提到的: 我希望我能更早地阅读Koenig和Moo的《c++反思》。正是这本书让我对OO概念产生了真正的兴趣。 我推荐Michael Abrash的《代码优化禅宗》(Zen of Code Optimization)给那些打算在90年代中期开始编程生涯的人。
托马斯·弗里德曼的《世界是平的》。
要想在编程方面取得卓越的成就,需要投入大量的精力和持续学习的精神,这与医学或法律专业不相上下。它所支付的工资只是这些职业的一小部分,更不用说那些进入金融业的数学高手了。编写代码的工资也在下降,因为在大多数经济体中,这是一个对聪明人和自律者来说相对容易进入的职业。
编程已经被侵蚀到比管道工作还便宜的地步。管道不能“外包”。你不需要每隔一年花2395美元参加一次专业管道工大会,就能获得一套全新的管道技术,这需要你花一年的时间来学习。
如果你生活在北美或欧洲,又年轻又聪明,编程并不是一个理性的职业选择。当然,涉及编程的业务。学习商业,了解足够多的编程知识来完善你的废话探测器:太棒了。但是把你大部分的精力都投入到掌握库、数据结构和算法上呢?只有当编程对你来说不仅仅是一种经济选择时,这才有意义。
如果你热爱编程,并因此打算把它作为你的职业,那么你就有必要冷静地认识到,这些力量正在并将继续使它成为一个越来越难谋生的职业。《世界是平的》不会教你如何给变量命名,但它会让你花6到8个小时沉浸在已经到来的经济现实中。如果你能读懂它,而且不害怕,那就去买《代码完成》吧。
《人工智能编程范式:通用Lisp的案例研究》,作者Peter Norvig
我开始读它是因为我想学习通用Lisp语言。当我读到一半的时候,我意识到这是我迄今为止读过的关于编程的最好的书。
这不是一本严格意义上的开发书籍,我相信我在其他地方提到过它,但我真的认为所有开发人员都应该读这本书,从php到Java再到汇编开发人员。
Code
它汇集了计算机的底层原理,为什么不应该浪费内存,以及计算史上一些更有趣的部分。这是对计算机及其内容的介绍。它让我对低级编程产生了极大的热情,并且比其他任何计算机都更能帮助我理解指针和内存。
我认为代码完整将是这个问题中非常受欢迎的一个,对我来说,它纠正了我的许多坏习惯,并重新肯定了我的好实践。
对于我的Perl背景,我非常喜欢Damian Conway的Perl最佳实践。如果不使用风格和最佳实践,Perl可能是一种令人讨厌的语言,这就是我在阅读(有时编写)的脚本中看到的情况。
我喜欢Head First系列,它们非常好,当你没有心情阅读更严肃的书籍时,它们很容易阅读。
Grady Booch的《面向对象分析和应用程序设计》。我很久以前读过这篇文章,它告诉我可以有一种开发面向对象软件的方法论。从那以后,许多其他的书对我产生了影响,但这本书让我开始了。
由于上面提到的许多原因,这是在“头部优先设计模式”和“Perl测试:一个开发人员的笔记本”之间摇摆不定,对于任何想要编写可维护代码的Perl程序员来说,它都应该是一本圣经。
这让我开始了真正的OOA&D。
应用UML和模式:面向对象分析、设计和迭代开发简介——Craig Larman
这些也在上面:
企业应用程序体系结构中的模式 领域驱动设计——Eric Evans
Robert L Read的《如何成为一名程序员:一个简短、全面和个人的总结》
不完全是一本书,而是一篇文章,但当我开始编程时,这本书绝对是我的灵感来源。喜欢加入部落的想法。值得一读。
Bjarne Stroustrup的《c++的设计与发展》
除了提供了很多c++的背景知识外,它也是一个关于大型程序中涉及的权衡和设计关注点的冗长研究。
BN.com
学习c# 2005,由Jesse Liberty和Brian MacDonald (O'Reilly)编写。
Isbn 10: 0-596-10209-7。
当我第一次在VS2005中从ASP经典的过程代码跳到面向对象的c#代码时,这本书让我走上了正确的道路。
问题是,“哪本书真正影响了您作为开发人员的工作方式?”毫无疑问,Jeff Prosise的《用MFC编程Windows》是对我作为开发人员的工作方式影响最大的一本书。它没有教会我“编程”的基础知识,但它为我和成千上万的其他开发人员打开了Windows平台开发的世界。
在MFC开发之前,我曾经用“Petzold风格”写过一些Windows代码。我很快就决定,作为开发者,我们不值得在Windows平台上费心。当Prosise出版了他的MFC书籍时,我意识到(以及其他成千上万的非windows程序员)我可以创建一个简单易用的界面,用户不仅可以理解,而且实际上喜欢使用。我如饥似渴地读着这本书,在里面做了很多笔记,翻了很多角,最后我买了第二本。
Prosise,杰夫。用MFC第二版编程Windows。 微软出版社1999 ISBN: 1-57231-695-0
福特的《高效程序员》
我还没有完全完成这一点,但我已经为我学到的一些技巧/技巧而兴奋不已,这些技巧/技巧让我变得更有效率。
当然,有很多东西我们都已经知道了(使用键盘快捷键,DRY等)。但也有很多新东西与之相配。细心的读者很快就会发现,这些东西是如何组合在一起产生更大的效果的。
几年前,Bruce Eckel的《Thinking in c++》教会了我很多关于c++的知识,也教会了我把一个问题隔离到一个小“沙盒”中进行研究/分析的重要性。这个技巧极大地影响了我的职业生涯,经常帮助我解决自己和他人的问题。
最近,我参考了以Java方式编写的Thinking in Java。不知何故,这种风格不仅仅是简单的“例子”,而是深刻地抓住了问题的核心。
我是如此感激,以至于我几乎会买Eckel的任何东西,看都不看。
http://ecx.images-amazon.com/images/I/519J3P8ANML._SL500_AA240_.jpg
把我的编程能力提升到了一个新的高度。
唐纳德·诺曼,《日常用品的设计》
不是关于编程本身,而是关于世界上的事物应该如何工作——这是一种可用性心理学。
在设计终端用户界面和api方面,这对我来说是无价的。
从Tom Swan那里掌握c++。这是最好的一种书,它的例子简单到足以教授概念,但也足以解决其他问题。这本书可读性很强,是我上大学后读的第一本书,而且只需要读一遍。
Sedgewick的“C中的算法”(第一版)教会了我所有关于算法的知识,也教会了我所有关于文档和复制/粘贴代码的陷阱,因为这个版本中的所有示例代码都来自“Pascal中的算法”版本,并且只是通过一个简单的代码翻译器传递,它没有针对不同的索引方案进行调整。
实际上,有两本书比较突出。第一个是“代码完成”。尽管已经过时了,这仍然是一本非常有用的书,关于过早优化的危险的章节本身就值回这本书的价格。
第二本书是《日常事物的心理学》(我想现在叫做《日常事物的设计》),这本书改变了我在设计应用程序时对用户界面的思考方式。这让我更加关注用户。
对我来说,“内存作为C和c++中的编程概念”真的让我看到了内存管理是如何工作的。如果你是一个C或c++开发人员,我认为这是一本必读的书。你会勇敢地学习一些东西,或者记住你可能已经忘记的东西。
http://www.amazon.com/Memory-Programming-Concept-C/dp/0521520436
另外,我想提到休·达文和CJ·戴特的《第三个宣言》。如果你对理解数据感兴趣(这在程序员中似乎并不常见),这本书是必读的。当您意识到SQL有多么糟糕时,它也会让您感到悲伤,但它也会帮助您应对这种破坏。了解工具是如何损坏的,可以让您在设计时牢记这些缺陷。
Pragmatic程序员做得很好。然而,当我刚开始工作的时候,真正影响我的是:
Windows 95系统编程秘密
我知道——它听起来和看起来有点俗气,可能有点过时了——但这是基于作者(Matt Pietrek)使用他自己的工具(随书提供的代码)调查的Win95内部结构的一个很棒的解释。请记住,这是在整个开源事件之前,微软仍然对发布内部文档非常谨慎——更不用说源代码了。 里面有一些引用,比如“如果你正在解决一些问题,遇到了一些症结,那么你需要停下来,真正深入地研究它,真正理解它是如何工作的”。我发现这是一个非常好的建议——尤其是现在,当你经常有图书馆的源代码,可以去看看。 它也激励我享受深入研究系统工作原理的乐趣,这在我的职业生涯中被证明是非常宝贵的。
哦,我还想介绍一下Don Box对。net内部的解释。
Schaum的《c++编程大纲》,作者John R Hubbard。
这是我读的第一本编程书,那时我刚开始学习c++。这是一个看到我对编程感兴趣的人送给我的。这本书非常适合初学者——它从基本概念开始,一直到模板和向量。所举的例子非常相关。这本书让你思考和提出更多的问题,并亲自尝试一些事情。
对我影响最大的编程书籍是Allen Holub的《Enough Rope to Shoot Yourself in The Foot》。
书的封面http://ecx.images-amazon.com/images/I/71AE90J735L._SL500_AA240_.gif
哦,那是多久以前的事了。
近年来,它是由“Nicolai M. Josuttis”撰写的“c++标准库”。这是我的圣经。
可选文字 http://ecx.images-amazon.com/images/I/51BT5SKXTCL._SL500_AA240_.jpg
Martin Fowler的《重构:改进现有代码的设计》已经被列出。但我会详细说明它对我的影响。
整本书的本质是关于如何构造代码,以便人类更容易阅读和理解。它强烈地告诉我,我写的代码是为了让我的同事和后继者消费,并可能从中学到一些好的东西。它激励我有意识地以一种方式编程,让人们赞美我的名字,而不是诅咒我,直到永远。
另一本书还没有被提及,但每一个程序员、新手到大师都应该必读,任何编程语言,是Michael Howard的《Writing Secure Code》(第二版),来自mpress。
对我产生真正影响的第一本书是Tom Swan的Mastering Turbo Assembler。
其他有影响的书有Linus Torvalds和David Diamond的《Just For Fun》,当然还有Andrew Hunt和David Thomas的《The Pragmatic Programmer》。
正如很多人列出了头部优先设计模式,我认为这是一本非常好的书,我想看看是否有很多人知道一本名为《设计模式解释:面向对象设计的新视角》的书。
本书出色地论述了设计模式。本书的前半部分非常容易理解,其余章节只需要对已经涵盖的内容有一个坚定的把握。我觉得本书的后半部分不太容易理解的原因是,它涵盖了我作为一个缺乏经验的年轻开发人员所没有使用过的模式。
本标题还介绍了设计模式背后的概念,涵盖了Christopher Alexander在架构方面的最初工作,以及GoF在SmallTalk中首次实现文档模式。
我认为任何喜欢头部优先设计模式,但仍然觉得GoF非常枯燥的人,都应该看看《设计模式解释》,它是一个可读性更强的选择(尽管没有那么全面)。
如何用电脑解决http://g-ecx.images-amazon.com/images/G/01/ciu/31/89/d4ac024128a044c186a18010._AA207_.L.jpg - R.G.Dromey
Craig Larman的《应用UML和模式》。虽然四人组的《设计模式》这本书很有启发性,但我发现直到在编程课上偶然看到Larman的书,我才“明白”如何使用设计模式。
应用UML和设计模式。
它帮助我设计模式,并在“UML as Sketch”的措辞中为我提供了一个对UML有意义的理由。也就是说,UML应该被用作系统的一个简要草图,这样你就不必向别人解释符号(他们要么已经知道UML,要么你给他们一本UML的书来读)。
Robert Sedgewick的算法书。应用程序开发人员的必读。
有多种版本(C, c++, Java)
http://www.cs.princeton.edu/~rs/
如果你在Unix/Linux/MacOS等环境下工作,你必须阅读已故W Richard Stevens的《Unix环境下的高级编程》(也被称为APUE)。如果你不知道文件描述符是如何工作的,或者什么是会话,或者当你守护自己的时候你应该做的所有事情(承认吧,你不知道),那么这本书会告诉你。
之后你会觉得有点不专业,但是如果你想在Unix环境下成为一个专业的程序员(任何语言),你需要阅读这篇文章。
我想说的是《超越代码——用9个简单的步骤学会区分自己》是一本非常好的励志书。我不涉及技术问题,但它描述了与人合作的方式,成为专业人士,……对我来说,如果你需要一些鼓励的话,这本书你可以一遍又一遍地读。除此之外,在3到4个小时内阅读它很便宜,非常容易和愉快。
我的博客上有一篇评论。
尽管我已经从事了多年的专业编程工作,但Rocky Lhotka关于他的CSLA框架的“业务对象”系列还是让我大开眼界。 他的想法让我再次对软件开发模式和理论感到兴奋。它让我对学习如何成为一名更好的开发人员产生了新的兴趣,而不仅仅是学习最新的令人惊叹的控件或库。(不要误解我,我仍然喜欢一本好的技术书籍-你必须跟上!)
《Fortran填色书》作者:Roger Kaufman博士(1978,ISBN:0262610264)
多么愚蠢的概念——比一本“傻瓜”书还要基础!但它适用于任何语言(当然有一些fortran特定的例子),以一种非常容易理解和“令人痛苦的有趣”的方式解释了逻辑、变量、i/o等基本概念。
这足以让一个十岁的孩子对编程产生兴趣……
(在Flickr用户帐户上找到封面照片)
令我惊讶的是,书中居然没有提到这本书:里奥·布罗迪(Leo Brodie)的《出发》(Starting Forth)。毕竟,Forth作为一种基于堆栈的语言,应该适合这个站点的用户……
不可否认,Forth是一种奇怪的语言,现在不太流行。但这本书读起来很有趣。它还有卡通!这本书和布罗迪的另一本书《思考》(Thinking Forth)都可以在网上免费获得。
可选文字 http://ecx.images-amazon.com/images/I/61dECNkdnTL._SL500_AA240_.jpg
c++如何编程适合初学者。这是一本很好的书,有1500页。
《全新思维》,丹尼尔·平克著。这是对我们行业未来的有趣展望。
我想大多数读到这篇文章的人都已经读过上面的书了。所以,我将提供一本书,从不同的角度来看待我们的行业。
可选文字 http://www.danpink.com/images/wnm.jpg
Robert L. Glass的《软件工程的事实与谬误》http://www.codinghorror.com/blog/images/facts-and-fallacies-of-software-engineering.jpg
Robert L. Glass的《软件工程的事实与谬误》是一本非常优秀的书。在我读这本书之前,我已经做了将近10年的专业黑客,但我仍然学到了很多东西。
计算机科学家的离散数学http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg
《计算机科学家的离散数学》作者J.K. Truss。
虽然这并没有教你编程,但它教会了你每个程序员都应该知道的基本数学。你可能还记得大学里的这些东西,但实际上,学习谓词逻辑会提高你的编程技能,如果你想用集合编程,你需要学习集合论。
这里确实有很多有趣的信息,可以让你从不同的角度思考问题。它很方便,只是偶尔拿起来学习一些新东西。
好吧,所以问题不是“最好的编程书是什么”,而是“如果你能告诉自己在职业生涯的开始应该读什么”……
可能是“On Lisp”和SICP,再加上一个CLRS或Udi Manber的“算法:一种创造性的方法”。
算法介绍由Udi Manber http://vig-fp.prenhall.com/bigcovers/0201120372.jpg
前两个课程将教授许多编程技术、模式,并真正打开一个人的思维,发挥他/她自己的创造力;另外两个是不同的。它们更理论化,但也非常重要,专注于设计正确有效的算法(需要大量的数学知识)。
当“优秀编程书籍”的主题出现时,我看到很多人推荐前三本书,但最后一本(Manber写的)是一本很棒的书,但很少有人知道它。真可惜!Manber专注于算法的增量发展,通过使用归纳法进行定理证明。
如果你用C语言写代码,那么《专家C编程》会让你大开眼界。它能回答所有你想知道为什么它会这样工作的问题。彼得·范·德·林登有很棒的写作风格,让晦涩难懂的概念非常容易读懂。所有C开发人员的必读
Fortran IV与Watfor和Watfiv由Cress, Dirkson和Graham。
这本书教会了我第一个编程语言,我当时把它写在穿孔卡片上。三年后,这本书已经破烂不堪,因为我用得太多了。
可选文字 http://g-ecx.images-amazon.com/images/G/01/ciu/4b/83/245d9833e7a03768eaf63110._AA240_.L.jpg
Fortran是一门伟大的语言!它有一个超级优化器,可以生成非常快的代码。它在英国仍然很受欢迎,FTN95现在是一个功能齐全、功能强大的编译器。有时我希望我可以继续使用它,但Delphi是一个非常合适的替代品。
似乎没有人提到Stroustup的《c++程序设计语言》,这是每一个c++程序员都应该读的一本好书。
我还认为每个程序员和经理都应该阅读《极限编程解释:拥抱变化》这本书。书中的许多思想现在都是常识,但这本书对软件工程中追求质量给出了一个聪明而鼓舞人心的描述。
其次,我要推荐Knuth和Gang of Four,它们都是经典之作。
Craig Larman的《应用UML和模式》。
这本书的书名有点误导人;它确实处理了UML和模式,但它涵盖了更多。这本书的副标题告诉你更多:面向对象分析和设计以及迭代开发简介。
系统滑稽:系统如何工作,特别是它们如何失败。便宜地使用它。但是,在你参与过一些失败的项目之前,你可能不会体会到其中的幽默。
书之美在于版权年。
也许书中最深刻的“法则”是:
基本失效模式定理(F.F.T.):复杂系统通常以失效模式运行。
它的思想是,在任何给定的软件中都有失败的部分,这些部分被其他部分的失败或其他部分的验证所掩盖。看看现实世界中Therac-25辐射机的例子,它的软件缺陷被硬件故障保险掩盖了。当硬件故障保护被移除后,多年来一直未被检测到的软件竞争状态导致机器杀死了3个人。
当我开始使用Java进行开发时(直到今天仍在这样做),我不得不推荐该领域的杰出工作:Mr Bunny’s Big Cup o’Java。
摘自作者的简介:
学习Java最好的方法就是把一个Java编程专家的松果体植入你的大脑。遗憾的是,大多数hmo拒绝为这个挽救职业生涯的程序买单,认为Java太过实验性。对于我们这些等不及全面医疗改革的人来说,终于有了另一种治疗方法。 10个医生中有n个推荐兔子先生的爪哇大杯,这里的n是你想要给容易上当受骗的公众留下深刻印象的任何整数。这本书以对这本书的概述开始,然后迅速展开到书本身。看看涵盖的主题: Java 简而言之,MBBCOJ将教你在今天的兔子开发环境中获得成功的职业生涯所需要知道的一切。
光是对像素的洞察就足以缩短我的软件开发寿命。
明确的软件工艺
可选文字 http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg
这本书解释了很多关于软件工程、系统开发的东西。理解不同类型的产品开发之间的差异也非常有用:web VS收缩包装VS IBM框架。当人们构思瀑布模型时,他们的想法是什么?读了这篇文章,我们就会明白(希望如此)
界面耻辱大厅仍然是值得一看的经典。这个网站详细列出了大量的界面设计失误,非常有趣。最初的iarchitect.com网站已经不复存在,但其他人已经在自己的网站上重新建立了居屋计划。
我将补充一些我在这里没有看到但对我有影响的东西:
Yourdon和Constantine,“结构化设计”。你需要知道的关于软件设计的一切都在这里,如果你愿意挖一点。 Leonard Koren,“Wabi-Sabi:艺术家,设计师,诗人和哲学家”。平衡美与实用主义的实用主义哲学。
虽然不是最有影响力,但值得一看的是j.m.库切的《青春》。
《芳华》的叙述者是20世纪50年代南非的一名学生,长期以来一直在策划逃离祖国:逃离母亲令人窒息的爱,逃离失败困扰着他的父亲,以及他确信即将到来的革命。学习数学、读诗、存钱,他努力确保当他来到现实世界时,无论现实世界在哪里,他都准备好充分体验生活,并将其转化为艺术。然而,最后到达伦敦时,他既没有发现诗意,也没有发现浪漫。相反,他屈服于作为一名计算机程序员的单调生活,在这种生活中,随机的、没有爱情的事情并不能让他得到解脱。由于缺乏灵感,他停止了写作。作为一个尴尬的殖民者,一个宪法的局外人,他开始了一段黑暗的朝圣之旅,在这段旅程中,他不断受到考验,不断被发现有缺陷。
青年封面http://img440.imageshack.us/img440/5140/youthgd4.jpg
我现在正在阅读敏捷软件开发,原则,模式和实践。对于那些对XP和面向对象设计感兴趣的人来说,这是一本经典的读物。
可选文字 http://ecx.images-amazon.com/images/I/519J3P8ANML._SL500_AA240_.jpg
Alistair Cockburn的《敏捷软件开发:合作游戏》是一本优秀的书,虽然没有得到广泛的赞扬,但却充满了深刻的见解。
它有什么特别之处?好吧,显然每个人都听说过“敏捷”这个术语,而且现在似乎大多数人都是信徒。不管你信不信,敏捷运动存在的背后都有一些深刻的原则。这本书以精确、科学的方式揭示并阐明了这些原则。一些原则是(顺便说一下,这些是我的,不是Alistair的):
团队软件开发中最困难的事情是让每个人的大脑都有相同的理解。我们正在建造巨大的、精细的、复杂的系统,这些系统在有形世界中是看不见的。你越善于让更多的人分享更深入的理解,你的团队在软件开发中就越有效。这就是结对编程有意义的根本原因。大多数人对它不屑一顾(我一开始也这么认为),但有了这个原则,我强烈建议你再试一次。你最终得到了两个深刻理解你刚刚构建的子系统的人……没有多少其他方法可以如此快速地获得如此深入的信息传输。就像瓦肯人的心灵融合。 你并不总是需要用语言来快速表达深刻的理解。一个必然的结果是:太多的词,你就超过了听者/读者的能力,这意味着你试图实现的理解转换无法发生。考虑到孩子们通过“沉浸”和“吸收”来学习如何说语言。不仅仅是语言……他举了一个孩子在地板上玩火车的例子。走过来的是另一个从未见过火车的孩子……但通过观察其他孩子,他掌握了游戏的要点,并与他们一起玩。人与人之间经常发生这种事。这和关于太多单词的推论一起,帮助您了解在旧的“瀑布”时代,试图编写700页详细的需求规范是多么错误。
里面还有很多东西。我现在要闭嘴了,但是我强烈推荐这本书!
我想到了三本书。
《Unix编程的艺术》作者:Eric S. Raymond。 Rick Cook编译的魔法。 Donald Knuth的《计算机编程的艺术》。
我也喜欢保罗·格雷厄姆的作品。
开始学习Visual c++
当我第一次开始用面向对象语言编程时,我发现这本书不仅是一本关于c++和MFC的全面书籍,它也是我所见过的对面向对象概念最好的解释之一。
当我与刚开始使用面向对象语言编程的开发人员交谈时,我会告诉他们阅读这本书。
c++中的算法对我学习大O符号和各种排序算法的来来去去是无价的。这本书在塞奇威克认为把它分成5本可以赚更多钱之前出版了。
c++ FAQs是一本神奇的书,它告诉你在c++中应该做什么,不应该做什么。c++的向后兼容性留下了很多“地雷”,这本书帮助人们小心地避免这些地雷,同时也很好地介绍了OO设计和意图。
我读了大部分在这个问题上得分很高的书,但不是所有的书(感谢上帝!),我马上把其他的书加入了我的亚马逊愿望清单!
(有人应该在亚马逊上为这些书列个清单……也许是一个名为“Stackoverflow有史以来最好的书”的列表?有人知道怎么做吗?)
对我来说,最好的书是《代码完成》。这是一个启示。我买了英语版的第二版,然后是法语版,我仍然认为它应该是任何计算机科学学校的必读书目。数据结构很酷,但代码完整,不是开玩笑,更重要的是…
然后,我的第二本最好的书是《编写可靠的代码》——在学习了如何被理解之后,知道如何编写可靠的代码是非常棒的。
还有很多非常好的书,但这里没有一本值得一提。直到2001年,我认为:框架设计指南:可重用。net库的约定、习惯用法和模式。一个珍宝!这本书我读了很多遍,现在还放在我的桌子上,就在我的液晶显示器旁边,还有《代码完成》(真的!)我喜欢它的写作方式(喜欢这里和那里添加的评论-书都应该这样写!)
但是,我忘记了我读过的第一本书!是他们让我充满激情地爱上了计算机科学:
计算!(C64杂志-永远不会忘记吉姆蝴蝶:o) Borland c++用户指南(旧的,大约1991年,那些试图引入面向对象编程的人,写得非常好)。 大多数微软开发工具用户指南,大约在1990-1995年。不知道是谁写的,但他们很酷!我记得我在周六的深夜读过它们……
问得好:o)
计算机程序设计的概念、技术和模型。
可选文字 http://ecx.images-amazon.com/images/I/51YZ50ZR13L._SL500_AA240_.jpg
所有关于……书。
布鲁斯·埃克尔是教育学的天才! 在c++中很容易理解多态性的实现。它包含了所有你应该知道的关于c++的知识,基本的和高级的概念。比Stroustrup的好多了。 我也跟着他学了Java。
最后但同样重要的是:
c++版本是免费的!
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
去年我上了很多课。我读
创新者的困境(颠覆性技术) 神秘的人月(管理软件) 跨越鸿沟(启动) 数据库管理系统,牛书 编程c#,鸵鸟书 开始iPhone开发,葡萄柚书
每本书都很棒,但是克莱顿·克里斯滕森的《创新者的困境》(1997!!)确实是一本很棒的书,它让我真正思考了现代软件世界。要解决的挑战是颠覆性技术,以及磁盘驱动器公司和非技术公司如何总是被新的、改变游戏规则的技术所颠覆。当人们想到谷歌,可能是最大的“网络”公司时,它给了人们一个新的视角。为什么他们什么都要插手?这是因为他们不希望自己的地位被新事物打乱。谷歌上的预告已经足够让人理解了。读它!
因为我是一个c#程序员,而且大多数通用的书籍都已经被提到过了,所以我想推荐Bill Wagner的书《更有效的c#》。
我认为大多数开发复合wpf应用程序的人也应该看看微软的复合应用程序指南(也称为Prism):
复合应用指南
完美软件:关于测试的其他幻想
TITLE封面http://ecx.images-amazon.com/images/I/51j3BSRspAL._SL500_AA240_.jpg
《完美的软件:关于测试的其他幻想》作者:Gerald M. Weinberg
ISBN-10: 0932633692
ISBN-13: 978 - 0932633699
一本书的影响力通常取决于读者,以及他们读这本书时处于职业生涯的哪个阶段。我必须为Head First设计模式欢呼。伟大的书和非常有创意的写作方式应该被用作其他技术书籍作者的例子。也就是说,它是为了促进学习和内化概念而编写的。
头部优先设计模式http://ecx.images-amazon.com/images/I/51LSqrgoT1L._SS500_.jpg
《极限编程:拥抱变化》作者:Kent Beck。虽然我不提倡在软件开发中采用硬核的xp或高速公路,但我希望在我的职业生涯中更早地向我介绍本书中的原则。单元测试、重构、简单性、持续集成、成本/时间/质量/范围——这些改变了我看待开发的方式。在敏捷出现之前,所有的一切都是关于调试器和对更改请求的恐惧。在敏捷开发之后,这些恶魔不再那么大了。
编程:编程的实践布莱恩·w·克尼根、罗布·派克著。
这里展示的风格非常棒——代码本身就能说明问题,整本书都遵循KISS原则。就我个人而言,不是我选择的语言,但仍然对我有影响。
似乎大多数人已经接触到一些非常好的书。其中一个真正帮助我的是《有效的c#: 50种方法来提高你的c#》。如果我不提《小熊维尼之道》那就太疏忽了。哲学书籍对灵魂和代码都是有益的。
我回答这个问题已经晚了,但显然我还有一些独特的东西可以提供……Barry Boehm写的《软件工程经济学》,总结一下,如果你想要真正提高软件的生产力,就需要更好的人,因为更好的工具、硬件、语言、方法等都会产生边际影响。只有优秀的人才能显著提高生产率。我强调,这是更好的工程师,而不是更多的工程师!
这本书不像《Coders At Work》那样能让你带着上床睡觉,而是能让你深刻体会到我们这个行业一直在努力牢记在心的教训。以离岸为例,这是一种虚假的经济,Boehm的模型预测,如果有的话,也只会产生边际的积极影响。来看看。
适合任何导师/团队领导/经理或任何向上述报告的人。
可选文字 http://ecx.images-amazon.com/images/I/316N6QYW32L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg
彼得·范德·林登的《C语言编程专家——C语言的深层秘密》是一本经典而令人愉快的读物。应该在几年前学习C语言后立即阅读,但在学习C语言3年后才得到它!一本推荐的书,它回答了关于指针的最常见的SO问题(我最喜欢的主题)。用它生活,用它吃饭,用它呼吸!10/10 !
这是每一个程序员必须读的书:Abraham Silberschatz的数据库系统概念。
替代文本 http://images.barnesandnoble.com/images/14870000/14878097.JPG
这是一个非常丰富和有用的汇编,然而,我有点惊讶我没有在作者中遇到Andrew S. Tanenbaum。在我看来,他是最好的计算机科学教授之一,他的天才主要在于他能让计算机科学本科生理解相当难的材料。他的书(《现代操作系统》或《计算机网络》可能听起来耳熟)在我读学士学位时为我提供了计算机科学的坚实基础,我强烈推荐它们。 关于Tanenbaum的其他一些有趣的东西,证明了他的技能不仅仅是教学:一个名为MINIX的操作系统的作者——Linus在实现Linux时从它那里获得了灵感;Amoeba -分布式操作系统;无龟匿名p2p网络。
新图灵集合http://ecx.images-amazon.com/images/I/51HlYd-%2BRwL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
真的是一本好书。对计算机科学最重要的领域有很高的品味。是的,CS !=编程,但这仍然对每个程序员有用。
Jesse Schell的《游戏设计的艺术-透镜书》
Jesse Schell自2002年起在卡内基梅隆大学娱乐技术中心教授游戏设计并领导研究项目。
足够地说。
The Art of Game Design - A Book of Lenses http://i50.tinypic.com/iekw0l.jpg
PS:对不起,如果我重复发布,我在答案中找不到这本书——要么是因为标题不准确,要么是没有图片。让我知道,如果有的话我会删除的。
程序员应该知道的97件事
替代文本 http://ecx.images-amazon.com/images/I/51F134Q8TrL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg
这本书汇集了世界上一些最好的程序员的集体经验。这是必读的。
我的投票是《如何像计算机科学家一样思考:学习Python》 它既可以作为一本书,也可以作为免费的电子书。
它不仅帮助我理解了Python的基础知识,还帮助我理解了一般的编程。虽然它使用Python来演示概念,但它们适用于大多数(如果不是全部的话)编程语言。还有:它是免费的!
特立独行的!:世界上最不寻常的工作场所背后的成功故事
可选文字 http://ecx.images-amazon.com/images/I/410TX7YN94L._SL500_AA300_.jpg
会让你意识到工作场所应该是什么样子。
编程实践
and
怎么用电脑解决
可选文字 http://img.infibeam.com/img/7101e0ee/496b1/05/629/P-M-B-9788131705629.jpg?hei=200&wid=160&op_sharpen=1
可选文字 http://ecx.images-amazon.com/images/I/51fhwR6eb3L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
可选文字 http://ecx.images-amazon.com/images/I/51PDNR3C40L._SL500_AA300_.jpg
可选文字 http://ecx.images-amazon.com/images/I/51E0Ojkz8iL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
《餐巾纸的背面》,丹·罗伦著。
餐巾的背面http://www.coverbrowser.com/image/bestsellers-2008/302-7.jpg
一本关于视觉思维技巧的好书。现在还有一个扩展版。我不能谈论这个版本,因为我不拥有它;然而。
TCP/IP指南,Charles M. Kozierok著
虽然它被描述为“百科全书式的参考”,但作为一种叙述,它是令人难以置信的可读性。
作者提供了一个非常,非常,非常好的写作,全面的,介绍网络和基础设施的网络。这是所有程序员都应该知道的。
对我来说,这是查尔斯·佩佐德(Charles Petzold)《密码》(Code)的自然续集。如果说“代码”向外行解释了计算机如何工作,那么“TCP/IP指南”解释了计算机如何连接在一起。
如果你给一个12岁的极客一份“代码”和一份“TCP/IP指南”,他们在17岁的时候就能构建出下一个谷歌。
换句话说,如果我能回到过去,告诉自己在我作为开发人员的职业生涯开始时读一本特定的书,这本书(加上代码)就会在我的清单上名列前茅。