Monday, March 26, 2012

工作输给机器人以后……zz同人于野

"The fact that you are still driving is a bug, not a feature."

 
 

Sent to you by Tony via Google Reader:

 
 

via 学而时嘻之 by 同人于野 on 3/25/12

(《东方早报·上海书评》,2012年3月25日)

在《超级魔鬼经济学》这本畅销书中,作者非常庆幸,同时又非常得意地讲了一个关于马车的故事。今天反感汽车尾气的人可能会认为马车这种纯天然的交通工具更环保一点,但历史上马车其实是个环境灾难。在没有汽车的时代,马车是城市交通的主力,越是发达的城市就越需要马车。然而跟机器相比,马是有自己的想法的,所以马车其实很容易失控。不但如此,如果一匹马垮倒在街头,通常你唯一的办法就是把它当场杀死,然后要等它的尸体腐烂以后才能被切块清除。这一切都使得马车造成的交通堵塞比今天汽车要严重得多。这还不算马粪!纽约市曾在1898年召开国际会议研究马粪问题,结论是根本没办法。

故事的结局皆大欢喜。当所有人都束手无策的时候,汽车和电车出来彻底解决了马车带来的所有问题。所以魔鬼经济学家乐观地告诉我们,也许将来会有新的技术出来,以意想不到的方式解决我们今天面临的诸多危机。

他们说的一点不错。在这本书出版不到三年之后,我们可以非常自信地说,至少城市交通堵塞问题,将会再一次被新技术解决。然而这并不是本文想说的重点。

我想说的是,品味马车故事还有另外一个角度。20世纪初那个马车时代,纽约市大约有20万匹马,相当于每17个人一匹马。这些马后来都哪里去了?

被淘汰了。马,是汽车这种新技术的牺牲品。现在又有一种新技术,叫做自动行驶汽车。而司机,将是这种新技术的牺牲品。

2009年之前,像电影《我,机器人》里那样会完全自动行驶的汽车还是科幻范畴。那时候最先进的智能汽车或者需要在路边安装特定的感应器,或者只能愚蠢地以车队的形式跟随前面一辆有人驾驶的车。然而2010年,纽约时报突然报道说 Google 正在测试一种真正的自动驾驶系统,这套系统被安装在普通的丰田Prius上,使用摄像头探测周围环境,在加州的大街小巷行走自如。这样的进步几乎让人不敢相信,然而根据《连线》的最新报道,这套系统已经做成了。

这些车可以在任何路况行驶,可以达到120公里的时速,可以识别交通信号,智能跟踪判断路上其它车辆和想要穿越马路的行人,并以每秒20次的频率预测这些物体未来的位置。如果临道有辆车开得不好,智能车甚至知道怎么躲避它。《连线》说,跟人类司机相比,智能车"能注意到更多信息,能对紧急情况做出更快反应,能对付更复杂的路线。它从不惊慌。它从不愤怒。它甚至从不眨眼。"我记得之前曾有报道,在整个超过20万公里的测试中,这些智能车只出过一次轻微事故,而且还是人类司机代驾造成的。

一言以蔽之,自动驾驶系统不但能够取代人类司机,而且应该取代人类司机。鉴于高达93%的碰撞事故都是人的原因导致,采用智能车可以大大减少交通事故。不但如此,既然人工智能可以更精确地控制汽车,公路上两辆车之间的距离就可以在高速状态下保持得更近,从而大大缓解交通拥挤。也许十年之后人们会发现让人开车是一件非常不可理喻的事情 — 用Google自动驾驶项目的负责人话说,"The fact that you are still driving is a bug, not a feature.(你仍在开车这件事是个错误,而不是功能)"

我们可以设想一下这意味着什么。这远远不仅仅是我们可以在路上睡觉或者发短信的问题。更重要的是,出租车将会大行其道。结合手机应用和定位系统,每个人都可以随时随地打到车。而且更智能化的打车系统还允许乘客顺路的情况下拼车。这样的效果就是车的"空载率"(也就是无效驾驶的比例,比如说把车开会家或者开到停车场)将会下降。这样完成同样的运载,公路上将会有更少的汽车。私家车有可能会大大减少。

但这还意味着而出租车司机将会成为历史。作为消费者,我们欢迎这个变化,因为打车贵就贵在司机,想想租车有多便宜就知道。可是那些出租车司机,那些公共汽车司机,那些跑长途运输的卡车司机,他们又该怎么办呢?

他们的职业将会像马一样被技术进步所淘汰。当然这也不是什么新思想。十多年前我们发个传呼,得打电话到寻呼台,然后会有一个真人接听你的电话并帮你发。而现在我们直接发手机短信,那么寻呼员就被淘汰。我们曾经必须去银行取钱,而现在满大街都是ATM,银行就不再需要那么多窗口服务员。这些事情并没有那么可怕,因为技术进步淘汰旧职业的同时也在创造新职业。比如说,30年前中国根本就没有"程序员"这个现在相当普遍的职业。

但是这一轮进步和淘汰不像以往那么简单。在MIT的两个经济学家Erik Brynjolfsson和Andrew McAfee的新书《与机器竞赛》(Race Against the Machine)中,作者提出,以人工智能为代表的技术进步不但即将,而且正在导致大规模失业。

人们曾经认为开车是一个不可能被计算机掌握的技能,然而现在Google证明人工智能可以开得更好。翻译将是另一个濒危职业,因为2011年Lionbridge和IBM联合推出的一个叫做 GeoFluent 的技术已经可以对网络聊天信息进行非常准确的实时翻译(包括中文!),至少对商业应用来说,自动翻译已经成熟了。与此同时,IBM的超级计算机Watson,对人类语言知识的分析已经到了可以在传统提问游戏电视节目Jeopardy!中击败人类选手的程度。所有这些进步都是基于模式识别和复杂信息交流这两个基本技术的突破。如果你用过新iPhone中的Siri,你应该对这种技术已经有所体会。

所以现在就不仅仅是司机和接线员的问题了,传统上的"高端"职业也会被淘汰。美国一个放射科医师需要十三年的专业训练,他可以拿到超过30万美元的高年薪,可是现在最新的模式识别软件可以做绝大多数他能做的事情,所需花费不到百分之一。打大的商业官司,往往需要雇佣一整个团队的律师去分析有时候高达上百万份相关文件,花费上百万美元。而2011年纽约时报报道,现在这些事情都可以让一个叫做Blackstone Discovery的软件去做,它使得一个律师可以完成以前500个律师的工作,而且对比表明人类律师的准确率只有它的60%。

使用美国的经济数据,技术进步减少就业这个事实是可以观测到的。最明显的事实就是经济在增长,而就业机会和工资收入却在不增反退。如果只看GDP的话,甚至可以说经济衰退早在2009年6月就结束了,此后连续7个季度的GDP增长率是2.6%,这已经达到过去30年平均增长率的75%。现在美国公司利润是在历史最高水平。到2010年,公司在设备和软件上的投资水平已经恢复到了历史顶点的95%。可是现在美国失业率却仍然保持在9.1%。可以说与二十世纪初经济大萧条后的恢复相比,现在的经济恢复唯一欠缺的就是就业。

经济增长的真正驱动是提高生产率,也就是每个工人每小时能够创造的产值,而不是就业人数的增加。一个越来越明显的状况就是,财富是被少数人通过操纵资本、机器设备和软件创造出来。十九世纪大部分时间内生产率的增长速度是每年1%,而过去十年则是2.5%,2010年更达到了4%。为什么现在生产率提高这么快?经济学家们的意见相当一致:这是因为IT。是自动化在提高生产率。

而以技术为驱动的经济增长,受益者不是普通人。按经济学家Ed Woff的计算,美国从1983年到2009年所增加的全部财富,都被只占人口比例20%的富人拿走了。而且这还不够,富人顺便还拿走了一部分原本普通人的财富,以至于剩下这80%的人的总财富是减少的。过去十年美国工作年龄家庭的收入中位数,从六万多美元下降到了五万五千美元。富人并没有使用什么阴谋诡计进行强行掠夺,他们的方法甚至可能是不自觉的:现在生产率提高了,根本不需要花钱请那么多人来工作,机器就可以干这些事情 — 而机器在我手里。

IT是一个只需要很少的人就能创造很大财富的技术。现在人人都在谈论Facebook上市,有人对它估值一千亿美元,可是这个公司总只有3000个员工。Twitter只有300人。维基百科只有57人。这些人可能还没有垄断全球信息市场,比如中国就需要有自己的Facebook,有自己的微博,有自己的百科。我不知道这些中国公司能多雇佣多少人,但是不管怎么算,我们都不需要一百个能贴大头贴的社交网站。可以说,这些加起来最多几万人已经解决了大部分人的上网需求。也许有成百上千倍的家长希望自己的孩子将来能去Facebook工作,但这个世界可能根本不需要把程序员总数再增加十倍。

《与机器竞赛》这本书指出,在于机器进行的这场比赛中,有三类赢家和三类输家。高技术工人将是赢家,而低学历者将是输家,因为机器人将会迅速取代他们的工作。但是这里的"高技术"其实已经不好定义,传统上我们认为律师和放射科医生属于高技术,而现在他们也将被取代。在这个问题上诺贝尔奖得主Paul Krugman有一个更悲观的看法,他在一篇博客中写到,在IT技术的冲击下,也许更多的高等教育已经意义不大 — 统计表明过去十几年大学学位给人带来的工资附加值已经不增长了。

超级明星是赢家,第二名及其他所有人都是输家。刘翔最火的时候,所有要用到体育明星的广告都想找刘翔。对比之下,也许史冬鹏的速度可以达到刘翔的99%,但他能接到的广告个数?0。这是因为信息技术可以把超级明星生产的产品无限放大,把普通市场变成胜者通吃的市场。

资本是赢家,劳动者是输家。在劳资市场上,资方的议价能力被显著增强。统计表明经济衰退以来企业用于购买软硬件设备的投资增长了26%,而人力成本却根本没有增长。美国商务部统计,现在企业利润占GDP比重正处在五十年来最高点,而与此同时劳动者获得的工资和各种补贴则是五十年来最低点。

此书两位作者很想给读者许诺一个光明的未来,所以他们提出了一点建议。首先,现在人工智能的长项是模式识别这样相对比较重复的工作,而机器还不擅长的则是解决问题的能力、灵感和创造性。对此作者建议我们应该学点艺术,学点创新,学点领导力,学点企业家精神。其次,与其跟机器竞争,不如带着机器一起跟别人竞争,未来属于那些善于利用机器的人。最后,既然第二名没有意义,我们可以开辟各种细分市场,在一个新的小领域内当第一名。这其实是个"不占一帅就占一怪"的策略,也许足球踢不好的人应该改踢室内足球?

Thomas Friedman显然特别支持这些建议。他在今年一月份的一篇专栏中说,Average is Over,普通已经没戏了。在人工智能的代,那些拥有普通的技能,做着普通的工作,拿着普通的工资,过着普通的生活的普通人,必将被自动化淘汰 — 就算人工智能还不能淘汰你,中国工人也会淘汰你。可是怎么才能让一个普通人变得不普通?Friedman肯定没读过前面Krugman的博客,因为他给的答案是上大学。

其实以上这些建议根本解决不了就业危机。世界任何时候都不需要一亿个电影演员,或者三亿个科学家,或者十五亿个企业家。每次我去剃头,遇到的理发师都爱调侃我头发怎么这么密。我经常对自己说好好享受理发师的抱怨吧,也许将来她们都会被不说话的机器人取代。可是到时候这些理发师怎么办呢?也许其中有人会成为专门为我这种头大加头发密集者的细分市场设计发型的艺术家?这样的艺术家能赚到钱么?

就算是对那些排在社会前面20%的人,那些跑赢了机器的人来说,高失业率也是个坏消息。有一个著名的故事说,亨利福特二世领着汽车公会主席参观一个现代化的汽车厂。福特自得地跟工会主席开玩笑:"你打算怎么让这些机器人给你交会费呢?"是啊,你们不是罢工么,你们不是要高工资高福利么?这回我全换机器人你还能怎么办?但工会主席毫不迟疑:"你打算怎么让它们买汽车呢?"如果80%的人都没钱,你们20%的生产力再强也没用。

有一种说法认为中国过去三十年的经济增长主要靠的就是廉价劳动力。这种说法等于说中国在跟人工智能竞争。如果这就是中国的经济模式,那么本文要说的就是中国即将输给机器人。事实上,富士康正在用机器人取代工人。现在富士康已经有一万个机器人,明年将增加到三十万个,三年内将增加到一百万个。这些机器人每台的成本是14万元,它们24小时不间断工作,而且绝对不会自杀。郭台铭说:"富士康的年轻人将重新学习操控机器人软件、应用和维修,变为机器人的应用工程师和软件工程师,通过操作机器人的手和关节来完成生产。"他没说到底有百分之几的工人可以变成工程师。其实富士康的工会主席 — 如果富士康真有工会的话 — 也可以问问郭台铭他打算把机器人生产出来的iPhone卖给谁。

有句谚语说如果马有投票权,世界上不会有汽车。而事实是就算马有投票权,它们还是会被汽车淘汰。生产力进步不可违。现在这个过程中的大失业,已经成为一个明显的威胁。纵观最近西方对这个问题的讨论,不管是本书,Krugman,Friedman还是《经济学人》的评论,结论基本上都可以用"此题无解"来概括。也许这就是市场经济的本质缺陷。也许马克思说的是对的:世界上的总工资买不起世界上的总产品。也许只有共产主义才是人工智能的朋友。


 
 

Things you can do from here:

 
 

Monday, March 19, 2012

国外程序员推荐:每个程序员都应读的书zz月光

惭愧,读过的就不多,几乎没有一本认真读完的。

后附原贴中书籍的列表。真是五花八门啊,竟然还有The Tao Te Ching(道德经)。。。。。


  编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的

  "如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。"

  很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。

  1. 《代码大全 史蒂夫·迈克康奈尔

  推荐数:1684

  "优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的"编写整洁的代码"。这本书有50页在谈论代码布局。" —— Joel Spolsky

  对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

  2. 《程序员修炼之道

  推荐数:1504

  对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

  3. 《计算机程序的构造和解释

  推荐数:916

  就个人而言,这本书目前为止对我影响醉倒的一本编程书。

  《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。

  然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

  同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

  一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

  你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。 - Antti Sykäri

  4. 《C程序设计语言

  推荐数:774

  这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解"底层"非常重要)—— Nathan

  5. 《算法导论

  推荐数:671

  《代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……

  在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建"管理"层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他"管理"细节则留给其他人…… —— Ran Biron

  6. 《重构:改善既有代码的设计

  推荐数:617

  我想我不得不推荐《重构》:改进现有代码的设计。—— Martin

  我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

  7. 《设计模式

  推荐数:617

  就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关"元"编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young

  8. 《人月神话

  推荐数:588

  9. 《计算机程序设计艺术

  推荐数:542

  这是高德纳倾注心血写的一本书。—— Peter Coulton

  10. 《编译原理(龙书)

  推荐数:462

  我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB

  11. 《深入浅出设计模式

  推荐数:445

  我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus

  12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成》

  推荐数:437

  如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

  13. 《代码整洁之道

  推荐数:329

  虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin

  14. 《Effective C++》和《More Effective C++

  推荐数:297

  在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

  去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing

  15. 《编程珠玑

  推荐数:282

  尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren

  16. 《修改代码的艺术by Michael Feathers

  我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

  同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

  17. 《编码:隐匿在计算机软硬件背后的语言

  我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那"抽取"走了,这本书一本开眼之作。 – hemil

  18. 《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》

  对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

  (编注:关于这本书,也可以看看阮一峰的读后感。)

  19. 《Peopleware / 人件集:人性化的软件开发

  Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni

  20. 《Coders at Work / 编程人生

  一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

  21. 《Surely You're Joking, Mr. Feynman! / 别闹了,费曼先生!

  虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

  22. 《Effective Java 中文版》

  此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

  23. 《Patterns of Enterprise Application Architecture / 企业应用架构模式

  很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol

  24. 《The Little Schemer》和《The Seasoned Schemer nmiranda

  这两本是LISP的英文书,尚无中文版。美国东北大学网站上也有电子版。

  25. 《交互设计之路英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。

  本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着"难用"的问题。作者认为,"难用"问题是由这些产品中存在着的高度"认知摩擦"引起的,而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期"交互设计"阶段。"难用"的产品不仅损害了用户的利益,最终也将导致企业的失败。本书通过一些生动的实例,让人信服地讲述了由作者倡导的"目标导向"交互设计方法在解决"难用"问题方面的有效性,证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。

  本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。

  他还有另一本中文版著作:《About Face 3 交互设计精髓

  26. 《Why's (Poignant) Guide to Ruby 》

  如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

  27. Unix编程艺术

  It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

  28. 《Practices of an Agile Developer / 高效程序员的45个习惯:敏捷开发修炼之道

  45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

  每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的"切身感受",最后列出几条注意事项,帮助你修正自己的做法("平衡的艺术")。

  29. 《Test-Driven Development by Example. / 测试驱动开发

  前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

  我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

  30. 《Don't Make Me Think / 点石成金:访客至上的网页设计秘笈

  取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard

  后语

  除这个书单之外,曾经也有微博网友推荐《一些经典的计算机书籍》,大约在50本。

  编译:伯乐在线 – 黄利民

附:原贴中的书籍列表:

  • Code Complete (2nd edition) by Steve McConnell
  • The Pragmatic Programmer
  • Structure and Interpretation of Computer Programs
  • The C Programming Language by Kernighan and Ritchie
  • Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein
  • Design Patterns by the Gang of Four
  • Refactoring: Improving the Design of Existing Code
  • The Mythical Man Month
  • The Art of Computer Programming by Donald Knuth
  • Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman
  • Gödel, Escher, Bach by Douglas Hofstadter
  • Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
  • Effective C++
  • More Effective C++
  • CODE by Charles Petzold
  • Programming Pearls by Jon Bentley
  • Working Effectively with Legacy Code by Michael C. Feathers
  • Peopleware by Demarco and Lister
  • Coders at Work by Peter Seibel
  • Surely You're Joking, Mr. Feynman!
  • Effective Java 2nd edition
  • Patterns of Enterprise Application Architecture by Martin Fowler
  • The Little Schemer
  • The Seasoned Schemer
  • Why's (Poignant) Guide to Ruby
  • The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
  • The Art of Unix Programming
  • Test-Driven Development: By Example by Kent Beck
  • Practices of an Agile Developer
  • Don't Make Me Think
  • Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin
  • Domain Driven Designs by Eric Evans
  • The Design of Everyday Things by Donald Norman
  • Modern C++ Design by Andrei Alexandrescu
  • Best Software Writing I by Joel Spolsky
  • The Practice of Programming by Kernighan and Pike
  • Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt
  • Software Estimation: Demystifying the Black Art by Steve McConnel
  • The Passionate Programmer (My Job Went To India) by Chad Fowler
  • Hackers: Heroes of the Computer Revolution
  • Algorithms + Data Structures = Programs
  • Writing Solid Code
  • JavaScript - The Good Parts
  • Getting Real by 37 Signals
  • Foundations of Programming by Karl Seguin
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Thinking in Java by Bruce Eckel
  • The Elements of Computing Systems
  • Refactoring to Patterns by Joshua Kerievsky
  • Modern Operating Systems by Andrew S. Tanenbaum
  • The Annotated Turing
  • Things That Make Us Smart by Donald Norman
  • The Timeless Way of Building by Christopher Alexander
  • The Deadline: A Novel About Project Management by Tom DeMarco
  • The C++ Programming Language (3rd edition) by Stroustrup
  • Patterns of Enterprise Application Architecture
  • Computer Systems - A Programmer's Perspective
  • Agile Principles, Patterns, and Practices in C# by Robert C. Martin
  • Growing Object-Oriented Software, Guided by Tests
  • Framework Design Guidelines by Brad Abrams
  • Object Thinking by Dr. David West
  • Advanced Programming in the UNIX Environment by W. Richard Stevens
  • Hackers and Painters: Big Ideas from the Computer Age
  • The Soul of a New Machine by Tracy Kidder
  • CLR via C# by Jeffrey Richter
  • The Timeless Way of Building by Christopher Alexander
  • Design Patterns in C# by Steve Metsker
  • Alice in Wonderland by Lewis Carol
  • Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
  • About Face - The Essentials of Interaction Design
  • Here Comes Everybody: The Power of Organizing Without Organizations by Clay Shirky
  • The Tao of Programming
  • Computational Beauty of Nature
  • Writing Solid Code by Steve Maguire
  • Philip and Alex's Guide to Web Publishing
  • Object-Oriented Analysis and Design with Applications by Grady Booch
  • Effective Java by Joshua Bloch
  • Computability by N. J. Cutland
  • Masterminds of Programming
  • The Tao Te Ching
  • The Productive Programmer
  • The Art of Deception by Kevin Mitnick
  • The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan
  • Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp
  • Masters of Doom
  • Pragmatic Unit Testing in C# with NUnit by Andy Hunt and Dave Thomas with Matt Hargett
  • How To Solve It by George Polya
  • The Alchemist by Paulo Coelho
  • Smalltalk-80: The Language and its Implementation
  • Writing Secure Code (2nd Edition) by Michael Howard
  • Introduction to Functional Programming by Philip Wadler and Richard Bird
  • No Bugs! by David Thielen
  • Rework by Jason Freid and DHH
  • JUnit in Action