什么是每个程序员应该阅读的最有影响力的书?

如果你能回到过去的时间,并告诉自己在作为一个开发者的职业生涯开始时阅读一本特定的书,那么这本书会是什么?

我期望这个清单是多种多样的,涵盖范围很广。

要search:使用右上angular的search框。 要search当前问题的答案,请使用inquestion:this 。 例如:

 inquestion:this "Code Complete" 
  • 代码完成 (第二版)由史蒂夫·麦康奈尔
  • 语用程序员
  • 计算机程序的结构和解释
  • Kernighan和Ritchie 的C编程语言
  • algorithm介绍 Cormen,Leiserson,Rivest&Stein
  • 四人帮的devise模式
  • 重构:改进现有代码的devise
  • 神话人月
  • Donald Knuth 的计算机编程艺术
  • 编者: Alfred V. Aho,Ravi Sethi和Jeffrey D. Ullman的原理,技术和工具
  • 哥德尔,埃舍尔,巴赫 ,道格拉斯·霍夫斯塔德
  • 清洁代码:敏捷软件工匠手册罗伯特C.马丁
  • 有效的C ++
  • 更有效的C ++
  • CODE由Charles Petzold
  • 编程珍妮通过Jon Bentley
  • Michael C. Feathers的遗产密码有效地合作
  • Demarco和Lister的Peopleware
  • 在工作由彼得Seibel 编码
  • 费曼先生,你真是在开玩笑!
  • 有效的Java第二版
  • 企业应用程序架构模式 Martin Fowler
  • 小Schemer
  • 经验丰富的Schemer
  • 为什么Ruby(Poignant)指南
  • 囚犯正在庇护:为什么高科技产品驱使我们疯狂,如何恢复理智
  • Unix编程的艺术
  • testing驱动的开发:以Kent Beck 为例
  • 敏捷开发人员的实践
  • 别让我想
  • 敏捷软件开发,原则,模式和实践罗伯特C.马丁
  • 领域驱动的devise Eric Evans
  • 唐纳德诺曼的日常事物devise
  • 现代C ++devise Andrei Alexandrescu
  • 最好的软件写作我由乔尔Spolsky
  • Kernighan和派克的编程实践
  • 实用的思考和学习:通过Andy Hunt 重构你的Wetware
  • 软件评估:揭秘史蒂夫·麦康纳的黑色艺术
  • 热情的程序员(我的工作去印度)由乍得福勒
  • 黑客:计算机革命的英雄
  • algorithm+数据结构=程序
  • 写固体代码
  • JavaScript – 好的部分
  • 通过37信号获得真实
  • 编程基础由卡尔Seguin
  • 计算机graphics学:C原理与实践 (第2版)
  • 在Java中由Bruce Eckel 思考
  • 计算系统的元素
  • 重构模式由约书亚Kerievsky
  • 现代操作系统由Andrew S. Tanenbaum
  • 注释的图灵
  • Donald Norman 让我们变得聪明事情
  • 克里斯托弗亚历山大build筑的永恒之路
  • 截止date:一本关于项目pipe理小说作者: Tom DeMarco
  • Stroustrup 的C ++编程语言(第三版)
  • 企业应用程序架构的模式
  • 计算机系统 – 程序员的视angular
  • C#中敏捷原则,模式和实践 by Robert C. Martin
  • 越来越多的面向对象软件,通过testing引导
  • 框架devise指南 Brad Abrams
  • 戴维·韦斯特博士的对象思维
  • UNIX环境下的高级编程作者:W. Richard Stevens
  • 黑客和画家:从计算机时代的重要思想
  • Tracy Kidder 的新机器的灵魂
  • CLR通过 Jeffrey Richter的C#
  • 克里斯托弗亚历山大build筑的永恒之路
  • C#中devise模式 Steve Metsker
  • 爱丽丝梦游仙境由刘易斯卡罗尔
  • 禅和摩托车维修的艺术罗伯特M. Pirsig
  • 关于面子 – 交互devise的要点
  • 这里来每个人:没有组织的组织 Clay Shirky 的力量
  • 编程之道
  • 自然的计算之美
  • 由史蒂夫Maguire 固体代码
  • 菲利普和亚历克斯的Web出版指南
  • 面向对象的分析和应用devise Grady Booch
  • 有效的Java Joshua Bloch
  • NJ Cutland的可计算性
  • 编程大师
  • 道德经
  • 生产型程序员
  • 凯文米特尼克的欺骗艺术
  • 职业程序员:克里斯多夫·邓肯(Christopher Duncan) 为一个不完美的世界游击战术
  • 人工智能程序devise范例:Common Lisp案例研究
  • 末日大师
  • 安迪•亨特(Andy Hunt)和戴维•托马斯(Dave Thomas)与马特•哈盖特(Matt Hargett) 一起在C#
  • 如何通过George Polya 解决它
  • 保罗·科埃略的炼金术士
  • Smalltalk-80:语言及其实现
  • 编写安全代码 (第二版)迈克尔·霍华德
  • Philip Wadler和Richard Bird 介绍函数式编程
  • 没有错误! 由大卫Thielen
  • 由Jason Freid和DHH 重做
  • JUnit在行动

K&R

@Juan:我知道Juan,我知道 – 但是有些事情只能通过实际上才能掌握。 抽象的理想整天只是让你成为一个学者。 在抽象的应用中,我们真正理解了它们存在的原因。 :P

@凯斯:艾伦·库珀(Alan Cooper)提到“囚犯在逃庇护” – 对于某些人来说,这是一个让人大开眼界的开发者。自从我读了这本书以来,任何开发者都和我一起工作,听到我提到它所支持的想法。 +1

离散math计算机科学家http://ecx.images-amazon.comhttp://img.dovov.comI/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

离散math为计算机科学家由JK桁架。

虽然这不会教你编程,它教会你每个程序员应该知道的基础math。 你可能还记得大学的这些东西,但是确实,做谓词逻辑会提高你的编程技能,如果你想用集合来编程,你需要学习Set Theory。

这里真的有很多有趣的信息可以让你以不同的方式思考问题。 有方便的,只是偶尔拿起来学习一些新的东西。

系统理论:系统是如何工作的,特别是它们如何失败 。 得到它使用便宜。 但是,在你完成一些失败的项目之前,你可能不会有幽默感。

这本书的美丽是版权年。

书中提出的可能是最深刻的“法律”

基本故障模式定理(FFT):复杂系统通常以故障模式运行。

这个想法是,在任何给定的软件中都有失败的部分,这些部分被其他部分的失败或其他部分的失效所掩盖。 在Therac-25辐射机上看到一个真实的例子,它的软件缺陷被硬件故障掩盖了。 当硬件故障被移除时,这些年来一直未被发现的软件竞争状况导致机器死机3人。

我个人最喜欢的就是Hacker's Delight ,因为阅读起来既有趣又有教育意义。

我希望第二版即将发布!

计算机编程的概念,技术和模型。

替代文字http://ecx.images-amazon.comhttp://img.dovov.comI/51YZ50ZR13L._SL500_AA240_.jpg

极限编程解释:肯特·贝克拥抱变化 。 虽然我不主张硬核XP或者高速公路软件开发,但是我希望在我的职业生涯早期就已经介绍了本书的原理。 unit testing,重构,简单,持续集成,成本/时间/质量/范围 – 改变了我看待开发的方式。 在敏捷之前,所有关于debugging器和对变更请求的恐惧都是关于它的。 敏捷之后,那些恶魔并没有像现在这样庞大。

types和编程语言由Benjamin C Pierce深入了解编程语言的基础。

数据库系统概念是您理解良好数据库devise原则的最佳书籍之一。

替代文字

编程的做法。 由布赖恩W. Kernighan,抢劫派克。

这里显示的风格非常好 – 代码只是说明自己,整本书遵循KISS原则。 个人不是我select的语言,但仍然对我有影响。

编程从头开始。 它在互联网上是免费的。 这本书教给我AT&T asm。 这是很容易阅读。

替代文字

人工智能程序devise范例 :Common Lisp案例研究Peter Norvig

在这里输入图像描述

我开始阅读,因为我想学习Common Lisp。 当我半途中,我意识到这是迄今为止我读过的最好的编程书。

决定性的软件工艺

替代文字http://ecx.images-amazon.comhttp://img.dovov.comI/5186JKTDVWL._SL500_AA240_.jpg

本书解释了很多关于软件工程,系统开发的东西。 了解不同types的产品开发之间的区别也是非常有用的:web VS shrinkwrap VS IBM框架。 当他们构思瀑布模型时,人们想到了什么? 阅读这一点,我们将变得清晰(希望)

彼得·库尔顿 – 你不读克努斯,你研究它。

对我和我的工作来说…… 纯粹的function数据结构对于用function语言进行思考和开发来说是伟大的。

Thomas Friedman的“世界是平的”。

优秀的节目要求投入精神能量,并致力于继续学习与医学或法律专业相媲美。 它支付了这些职业所付的一小部分,更不用说支付给进入金融领域的math知识的工资。 而且代码构build的工资也在下降,因为这是一个相对容易让大多数经济体进入智能和自律的行业。

编程已经侵蚀到低于比如pipe道的水平。 水暖不能“离岸”。 你不需要每年支付2395美元参加专业水pipe工会议,因为他们有权获得一套全新的pipe道技术,这将需要你一年的时间学习。

如果你住在北美或欧洲,年轻,聪明,编程不是一个理性的职业select。 涉及编程的业务,绝对。 学习商业,对编程有足够的了解来完善你的BS检测器:辉煌。 但是,将大部分精力投入到掌握图书馆,数据结构和algorithm的过程中? 这只有在编程对你来说比经济select更重要时才有意义。

如果你热爱编程,并为此打算把它做成自己的事业,那么你应该冷静地理解那些正在而且将会继续下去的力量,使它成为一个更难和更艰苦的职业, 。 “世界是平的”不会教你如何命名你的variables,但它会让你沉浸在已经到达的经济现实中6或8个小时。 如果你可以阅读,而不是害怕, 那么出去买“代码完成”。

替代文字

去年我参加了一些class。 我读

创新者的困境(颠覆性技术)
神话人月(pipe理软件)
跨越鸿沟(启动)
数据库pipe理系统,COW书
编程C#,OSTRICH书
开始iPhone开发,GRAPEFRUIT书

每本书都很棒,但克莱顿·克里斯坦森(Clayton Christensen,1997)的“创新者的困境”(The Innovator's Dilemma)真的是一本很棒的书,它让我真正思考了现代软件世界。 所面临的挑战是颠覆性的技术,以及磁盘驱动器公司和非技术公司如何总是受到新的改变游戏规则的技术的干扰。 这让人想到Google,也许是最大的“networking”公司,提供了一个全新的视angular。 为什么他们手中的一切? 这是因为他们不希望被新的东西打断 。 谷歌的预览是很多想法。 阅读!

黑客,由史蒂文列维。

个性和生活方式必须先行。 其他一切都可以学习。

Python语言对我非常有影响,我希望在几年前我会阅读这些书。 Python语言的美丽和简洁确实影响了我用其他语言编写代码的方式。

替代文字替代文字

New Turing Omnibus http://ecx.images-amazon.comhttp://img.dovov.comI/51HlYd-%2BRwL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg

真的很好的书。 具有计算机科学最重要领域的高层次的品味。 是的,CS!=编程,但这对每个程序员都是有用的。

面向对象的分析和应用deviseBrady Booch

弗雷德布鲁克斯的神话人月http://en.wikipedia.org/wiki/The_Mythical_Man-Month

我认为“Unix程序devise艺术”是一本极好的书,由埃里克·雷蒙德(Eric S.Raymond)出色的黑客/聪明才智,他试图让我们理解软件devise的一些原理(主要是简单的)。 本书是每个即将在Unix平台下开始项目的编程人员的必读书籍。

虽然我同意上面的许多书都是必读书(实用程序员,神话人月,计算机编程艺术和SICP​​),但我想稍微改变一下方向,推荐一门学科由Edsger Dijkstra 编程 。 即使是32岁,“可validation性devise”的重点也是高度相关的(即使“可validation性”是指“certificate”而不是“unit testing”)。

Martin Fowler的“ 重构:改进现有代码的devise”已经上市。 但是我会详细说明它为什么影响了我。

整本书的本质是关于如何构造代码,以便人类阅读和理解。 它强烈地教导我,我编写的代码意味着我的同事和继任者消费,并可能从中学到一些东西。 它激励我有意识地编程,让人们赞美我的名字,而不是诅咒我永远的诅咒 。

替代文字http://ecx.images-amazon.comhttp://img.dovov.comI/61dECNkdnTL._SL500_AA240_.jpg

C ++如何编程这对初学者是好的。这是一本完整的1500页的优秀书。

敏捷软件开发:合作游戏 ,由Alistair Cockburn撰写,这本书虽然不是广受赞誉,但却充满了深刻的洞察力。

这有什么特别的? 那么很显然,每个人都听说过“敏捷”这个词,而现在看来大多数人都是信徒。 不pipe你信不信,为什么存在敏捷运动,背后有一些深刻的原则。 本书以精确,科学的方式揭示和阐述了这些原则。 一些原则是(顺便说一句,这些是我的话,不是阿利斯泰尔的):

  1. 团队软件开发最困难的事情就是让每个人都有同样的理解。 我们正在build立庞大的,复杂的,复杂的系统,在有形的世界中是看不见的。 越是让更多的人分享更深入的理解,你的团队在软件开发上就越有效。 这是配对编程有意义的根本原因。 大多数人不喜欢它(最初我也是这么做的),但是考虑到这个原则,我强烈build议你再来一次。 最后你会得到两个深深理解你刚刚build立的子系统的人……没有其他办法能够如此迅速地获得如此深刻的信息传递。 这就像一个瓦肯思想融合。
  2. 你并不总是需要用言语来快速沟通深层的理解。 而一个必然结果:太多的话,你超过了听众/读者的能力,这意味着你正在尝试的理解转移不会发生。 考虑到孩子们如何通过“沉浸”和“吸收”来学习语言。 不只是语言……他举了一些小孩在地上玩火车的例子。 另外一个从来没有见过火车的小孩,但是通过看着其他的孩子,他拿起了游戏的要点,一起玩。 这种情况一直发生在人类之间。 这一连同由此产生的太多词语的推论可以帮助你看到,在旧的“瀑布”日子里,试图编写700页详细的需求规格是多么的错误。

那里还有更多。 我现在闭嘴,但我强烈推荐这本书!

厄运大师。 对于你的职业的动机和热爱:它不会比本书所描述的更好,真实的鼓舞人心的故事!