1.安装一个SVN服务端

可以使用apt-get或者yum安装subversion,也可以到官方去下载压缩包然后在本地解压缩安装。

  1. sudo apt-get install sunversion

2.创建版本库

选着你需要保存的文件目录,你在本地的文件将会保存在此

  1. svnadmin create /home/myrepos #这个目录是自己设置的

3.配置svnserve

执行上述的步骤之后在/home/myrepos下会产生一个配置文件目录conf,打开该目录可以看到有如下几个文件

  1. authz hooks-enz.tmp1 passwd svnserve.conf

authz: 文件是权限控制文件 passwd:是帐号密码文件 svnserve.conf: SVN服务配置文件

3.1设置密码

使用vim passwd打开文件,在[users]块中添加用户和密码,格式:帐号=密码,如wen=wen

  1. [users]
  2. username = password //这里的username和password自己设置

3.2设置权限

使用vim authz打开文件

  1. [/]
  2. * = rw

3.3修改svnserve.conf文件

vim svnserve.conf,打开下面的几个注释:

  1. anon-access = read
  2. auth-access = write
  3. password-db = passwd
  4. authz-db = authz

注意:所有的配置文件顶行开始写,不然会出错

4.启动svn版本库

  1. svnserve -d -r /home/myrepos #填写自己的路径

这样你的svn服务器就配置完成了,可以使用如下的指令查看配置时候成功

  1. svn checkout svn://服务器的ip地址/

可以在windows上使用TortoiseSVN客户端来使用svn服务了。 TortoiseSVN客户端的使用可以查看:TortoiseSVN客户端使用方法

【转】关于 AlphaGo 论文的阅读笔记

2016 年 1 月 28 日,Deepmind 公司在 Nature 杂志发表论文 Mastering the game of Go with deep neural networks and tree search,介绍了 AlphaGo 程序的细节。本文是对这篇论文的阅读笔记,以及关于人工智能和围棋进一步的一些想法。

声明:我是数学 PhD 和软件工程师,但不是人工智能领域的专家。我也不会下围棋。

一、

AlphaGo 总体上由两个神经网络构成,以下我把它们简单称为「两个大脑」,这并非原文中的提法,只是我的一个比喻。

第一个大脑(Policy Network)的作用是在当前局面下判断下一步可以在哪里走子。它有两种学习模式:

一个是简单模式,它通过观察 KGS(一个围棋对弈服务器)上的对局数据来训练。粗略地说:这可以理解为让大脑学习「定式」,也就是在一个给定的局面下人类一般会怎么走,这种学习不涉及对优劣的判断。

另一个是自我强化学习模式,它通过自己和自己的海量对局的最终胜负来学习评价每一步走子的优劣。因为是自我对局,数据量可以无限增长。

第二个大脑(Value Network)的作用是学习评估整体盘面的优劣。它也是通过海量自我对局来训练的(因为采用人类对局会因为数据太少而失败)。

在对弈时,这两个大脑是这样协同工作的:

第一个大脑的简单模式会判断出在当前局面下有哪些走法值得考虑。

第一个大脑的复杂模式通过蒙特卡洛树来展开各种走法,即所谓的「算棋」,以判断每种走法的优劣。在这个计算过程中,第二个大脑会协助第一个大脑通过判断局面来砍掉大量不值得深入考虑的分岔树,从而大大提高计算效率。

与此同时,第二个大脑本身通过下一步棋导致的新局面的优劣本身也能给出关于下一步棋的建议。

最终,两个大脑的建议被平均加权,做出最终的决定。

在论文中一个有趣的结论是:两个大脑取平均的结果比依赖两者各自得出的结果都要好很多。这应当是让 AlphaGo 表现出和人类相似性的关键所在。

二、

如果我是这篇论文的审稿人,我会对论文提出下面这些问题和评论:

首先,这些神经网络训练在很大程度上是通过自我对局来实现的。这既是某种优势(按照 Facebook 人工智能研究员田渊栋的说法,几千万自我对局这种规模是相当惊人的数据量),某种程度上来说也是不得已而为之,因为人类对局的总数实在太少,会导致机器学习中常见的过度拟合问题。

但是这样是否有可能造成自我设限乃至画地为牢的后果?这同时牵涉到人们对神经网络学习过程的理解和对围棋本身的理解。一方面,神经网络本身是否包容一定程度的「think out of the box」的能力,这固然取决于具体的神经网络算法,但也确实是人们对神经网络方法的一个本质困惑。另一方面,因为 AlphaGo 最基础的定式仍然是来源于人类对局,因此,这个问题依赖于人类棋手本身是否已经穷尽了围棋中所有有意义的基本定式。

(作为一个案例,在 AlphaGo 和樊麾的第二盘对局中,很多人都注意到 AlphaGo 走了一个不标准的大雪崩定式,这是说明 AI 学错了呢,还是它发现这是更好的走法?)

其次,这两个大脑的工作方式确实和人类很相似,一个判断细部,一个纵览全局。但 AlphaGo 最终的结合两者的方式相当简单粗暴:让两者各自评估一下每种可能的优劣,然后取一个平均数。这可绝不是人类的思维方式。

对人类来说,这两种思考问题的方式的结合要复杂的多(不仅仅是在围棋中是这样)。人们并不是总是同时对事态做出宏观和微观的判断,而是有时候侧重于大局,有时候侧重于细部。具体的精力分配取决于事态本身,也取决于人在当时的情绪、心理和潜意识应激反应。这当然是人类不完美之处,但也是人类行为丰富性的源泉。

而 AlphaGo 固然体现出一定的大局观,但从具体算法看来,它在为了宏观优势做出局部牺牲这方面的能力和人类完全不能相提并论。AlphaGo 引入整体盘面评估确实是它胜于许多别的围棋 AI 的地方,但从根本上来说,这只是人们让 AI 具有「战略思维」的尝试的第一步,还有太多可以改进的可能性。

最后,和很多别的围棋 AI 一样,当 AlphaGo 学习盘面判断的时候,采用的是图像处理的技术,也就是把围棋棋盘当做一张照片来对待。这当然在技术上是很自然的选择,但是围棋棋局究竟不是一般意义上的图案,它是否具有某些特质是常见的图像处理方法本身并不擅长处理的呢?

三、

为什么要让人工智能去下围棋?有很多理由。但在我看来最重要的一个,是能够让我们更深入地理解智能这件事的本质。

神经网络和机器学习在过去十年里跃进式的发展,确实让 AI 做到了许多之前只有人脑才能做到的事。但这并不意味着 AI 的思维方式接近了人类。而且吊诡的是,AI 在计算能力上的巨大进步,反而掩盖了它在学习人类思维方式上的短板。

以 AlphaGo 为例。和国际象棋中的深蓝系统相比,AlphaGo 已经和人类接近了许多。深蓝仍然依赖于人类外部定义的价值函数,所以本质上只是个高效计算器,但 AlphaGo 的价值判断是自我习得的,这就有了人的影子。然而如前所述,AlphaGo 的进步依赖于海量的自我对局数目,这当然是它的长处,但也恰好说明它并未真正掌握人类的学习能力。一个人类棋手一生至多下几千局棋,就能掌握 AlphaGo 在几百万局棋中所训练出的判断力,这足以说明,人类学习过程中还有某种本质是暂时还无法用当前的神经网络程序来刻画的。

(顺便提一句,很多评论认为 AlphaGo 能够通过观察一个特定棋手的对局来了解他的棋风以做出相应的对策。至少从论文来看,这几乎确定是不可能的事。一个棋手的对局数对 AlphaGo 来说实在太少,无从对神经网络构成有效的训练。观察和总结一个人的「棋风」这件事仍然是人类具有完全优势的能力,对电脑来说,这恐怕比赢棋本身还更难一些。)

这当然不是说,AlphaGo 应该试图去复刻一个人类棋手的大脑。但是 AlphaGo 的意义当然也不应该仅仅反映在它最终的棋力上。它是如何成长的?成长曲线具有什么规律?它的不同参数设置如何影响它的综合能力?这些不同参数是否就对应了不同的棋风和性格?如果有另一个不同但水平相当的 AI 和它反复对弈,它能否从对方身上「学到」和自我对弈不同的能力?对这些问题的研究和回答,恐怕比单纯观察它是否有朝一日能够超越人类要告诉我们多得多的知识。

因此,即使 AlphaGo 在三月份战胜了李世乭,在我看来也是另一扇大门的开启而非关闭。事实上,即使就围棋发展本身而论,如果把 AlphaGo 的两个大脑以如此简单的方式线性耦合起来就能胜过人类,那只能说明人们对围棋的规律还有太多值得探索的空间。

而对人工智能领域来说,AlphaGo 和一切神经网络一样,本质上还只是个大黑盒,我们能观察到它表现出的巨大能力,但对它究竟是如何「思考」的这件事依然所知甚少。在工程上,这是个伟大的胜利。在科学上,这只是万里长征的第一步而已。


 

AlphaGo 项目主页:http://www.deepmind.com/alpha-go.html

Nature 论文:http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html

Nature 报道:http://www.nature.com/news/google-ai-algorithm-masters-ancient-game-of-go-1.19234

Dan Maas 对论文的浅显总结:http://www.dcine.com/2016/01/28/alphago/ 


本文转载自:http://36kr.com/p/5042969.html

61fb03301d31caa3ad77a60955fccaeb

时间的朋友——罗振宇2015年终演讲

时间的朋友是2015年底逻辑思维的罗振宇在水立方的一场演讲,本书《时间的朋友》是演讲的内容。罗振宇是自媒体视频脱口秀《罗辑思维》主讲人,互联网知识型社群试水者,资深媒体人和传播专家。

这次演讲的内容是关于商业文明,过去一年的变量,未来一年的想象。创业是今年变量最大的话题,从创业热到资本寒冬,发生着怎样的变化。

为什么要做时间的朋友?人的本质,其实是一段时间。因为人拥有的只是时间,耗费的也只是时间。让所有人看到都能看到时间的力量。

这本书中,从头至尾贯穿了一个思路——用生物学的“演化论”来透视商业现象。说道生物学,人类是一个另类,自然选择的剪刀再也没有用了。人类文明不允许残忍地淘汰失败者,吃的再胖也不能拖去喂狼。性选择好想也没有用了,就算长得丑,但我们可以掏出房产证说服丈母娘。

那人类还怎么进步呢?好在我们除了自己身上的这个生殖器,还有三个生殖器:思想、技术和资本。

其中思想繁殖的最快,让每个人都不同于他人。只要我们在思考、感知和交流,我们的大脑就在不断交合、怀孕和生娃。所以虽然我们的肉身在原地踏步,但是我们的文明却一直在飞速的演化。没一个勾搭的眼神,没一个听懂的字句,每一交头接耳、神交默会,都在让你成为另一个迥然不同的物种。

三个概念:
“进托邦”

进托邦是指,自启蒙时代和科学发明以来,我们每一年的创造都比我们每一年的破坏多出那么一丁点

“了不起的不对称”

增长之所以不可逆转,乃是由于‘了不起的不对称’。创造通常略多于摧毁,这正是进化 的神通所在。源源不断的人类注意力和思想所用于发明新工具、设计新娱乐和创造新需求。然而无论一下给创新是多么的微不足道和不符合逻辑,他都将成为其他创新启动的平台。

“复利”

这是“了不起的不对称”在当代人类文明中混成一片的表现。即使从一个很短的时间来看,它也不再试微不足道的、缓慢的进展,而已经是一个飞速的进程。

1.必须尊重未来——因为时间的开放性

2.必须尊重过去——因为时间的连续性

3.必须尊重速度——因为时间在加快

4.必须尊重真诚——因为在时间面前,一切无所遁形

“没有任何道路可以通向真诚,真诚本身就是道路”。真诚是我们的一种内心状态,没有任何方法,矫饰,策略,技术可以抵抗,除非你本就真诚。

[本文开头的图片来自科技快报]

QQ截图20160115164821

Logistic函数(sigmoid函数)

一.Logistic函数

Logistic函数的表示形式如下:

QQ截图20160115170338

它的函数图像如下,由于函数图像很像一个“S”型,所以该函数又叫 sigmoid 函数。

QQ截图20160115164821

满足的性质:

1.对称性,关于(0,0.5)中心对称

QQ截图20160115170601

2.逻辑斯谛方程即微分方程

QQ截图20160115170825

最早logistic函数是皮埃尔·弗朗索瓦·韦吕勒在1844或1845年在研究它与人口增长的关系时命名的。广义Logistic曲线可以模仿一些情况人口增长(P)的 S 形曲线。起初阶段大致是指数增长;然后随着开始变得饱和,增加变慢;最后,达到成熟时增加停止。

当一个物种迁入到一个新生态系统中后,其数量会发生变化。假设该物种的起始数量小于环境的最大容纳量,则数量会增长。该物种在此生态系统中有天敌、食物、空间等资源也不足(非理想环境),则增长函数满足逻辑斯谛方程,图像呈S形,此方程是描述在资源有限的条件下种群增长规律的一个最佳数学模型。在以下内容中将具体介绍逻辑斯谛方程的原理、生态学意义及其应用。

二.Logistic Regression(逻辑斯蒂回归)

Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。之前在经典之作《数学之美》中也看到了它用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,然后叫他“你点我啊!”用户点了,你就有钱收了。这就是为什么我们的电脑现在广告泛滥的原因了。

还有类似的某用户购买某商品的可能性,某病人患有某种疾病的可能性啊等等。这个世界是随机的(当然了,人为的确定性系统除外,但也有可能有噪声或产生错误的结果,只是这个错误发生的可能性太小了,小到千万年不遇,小到忽略不计而已),所以万物的发生都可以用可能性或者几率(Odds)来表达。“几率”指的是某事物发生的可能性与不发生的可能性的比值。

Logistic regression可以用来回归,也可以用来分类,主要是二分类。它不像SVM直接给出一个分类的结果,Logistic Regression给出的是这个样本属于正类或者负类的可能性是多少,当然在多分类的系统中给出的是属于不同类别的可能性,进而通过可能性来分类。

假设我们的样本是{x, y},y是0或者1,表示正类或者负类,x是我们的m维的样本特征向量。那么这个样本x属于正类,也就是y=1的“概率”可以通过下面的逻辑函数来表示:

QQ截图20160125200523

这里的θ是模型参数,也就是回归系数,σ是sigmoid函数。这样y=0的“概率”就是:

QQ截图20160125200514

考查逻辑斯蒂回归模型的特点,一个事件的几率(oods)是指这件事发生的概率与不发生概率的比值,如果事件发生的概率是p,那么该事件的几率是p/(1-p),该事件的对数几率(log odds)或者logit函数是

QQ截图20160125163555

对于逻辑斯蒂回归而言,可以得到如下的对数几率

QQ截图20160125163606

这就是说,在逻辑斯蒂回归模型中,输出y=1的对数几率是输入x的线性函数,或者说,输出y=1的对数几率是由输入x的线性函数表示的模型,即逻辑斯蒂回归模型。换句话说,y就是我们的关系变量,例如她喜不喜欢你,与多个因素有关,比如你的人品,你的长相,你是否有钱等。我们把这些因素表示成变量x1, x2,…, xm,那么这个女生是怎么考虑这些因素的呢,每个人心理其实都有一杆秤,例如有人比较看重你的人品,人品的权重是0.8,;也有人比较看重你有钱,有钱的权重设置成0.7等等。我们把这些对应于x1, x2,…, xm的权值叫做回归系数,表达为θ1, θ2,…, θm。他们的加权和就是你在心目中的得分。

三.模型参数学习

在参数学习时,可以用极大似然估计方法求解。假设我们有n个独立的训练样本{(x1, y1) ,(x2, y2),…, (xn, yn)},y={0, 1}。那每一个观察到的样本(xi, yi)出现的概率是

QQ截图20160125194639

对于整个样本集,每个样本的出现都是独立的,n个样本出现的似然函数为(n个样本的出现概率是他们各自的概率乘积)

QQ截图20160125194648

那么上述的似然函数就是模型的代价函数(cost function),我们要求的参数就是θ*。我们稍微对上式进行转换

QQ截图20160125194659

对L(θ)的极大值,得到θ的估计值。问题变成了以对数似然函数为木匾函数的最优化问题。用L(θ)对θ求导,得到

QQ截图20160125195933

无法解析求解的,所以一般使用迭代的方法求解,通常采用梯度下降法和拟牛顿法。

四.多项逻辑斯蒂回归

上面介绍的是儿分类的模型,用于二类分类。可以将其推广为多项逻辑斯蒂回归模型(multi-nominal regression model),用于多分类,假设离散随机变量Y的取值是{1,2,3,…,K}那么多项逻辑斯蒂回归的模型是

QQ截图20160125213742

同理,二项逻辑斯蒂回归的参数估计的方法也可以推广到多项逻辑斯蒂回归。

 

参考资料:

[1].机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

[2].《统计学习方法》 李航 著

【转】StackOverflow程序员推荐:每个程序员都应读的30本书

转自:酷勤网。

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

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

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

推荐数:1684

20002L5a-0.jpg

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

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

  1. 《程序员修炼之道》

推荐数:1504

20002LQ4-1.jpg

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

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

推荐数:916

20002H4N-2.jpg

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

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

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

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

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

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

  1. 《C程序设计语言》

推荐数:774

20002J531-3.jpg

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

  1. 《算法导论》

推荐数:671

20002IN2-4.jpg

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

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

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

推荐数:617

20002H018-5.jpg

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

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

  1. 《设计模式》

推荐数:617

20002La3-6.jpg

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

  1. 《人月神话》

推荐数:588

20002G024-7.jpg

  1. 《计算机程序设计艺术》

推荐数:542

20002HM2-8.jpgThe Art of Computer Programming 计算机程序设计艺术

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

  1. 《编译原理》(龙书)

推荐数:462

20002J550-9.jpg

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

  1. 《深入浅出设计模式》

推荐数:445

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

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

推荐数:437

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

  1. 《代码整洁之道》

推荐数:329

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

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

推荐数:297

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

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

  1. 《编程珠玑》

推荐数:282

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

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

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

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

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

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

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

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

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

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

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

  1. 《Coders at Work / 编程人生》

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

  1. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》

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

  1. 《Effective Java 中文版》

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

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

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

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

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

  1. 《交互设计之路》英文名:《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 交互设计精髓》

  1. 《Why’s (Poignant) Guide to Ruby 》

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

27.《Unix编程艺术》

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

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

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

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

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

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

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

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

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

WASHINGTON, DC - DECEMBER 21:  U.S. President Barack Obama delivers a statement on fiscal cliff at the James Brady Press Briefing Room of the White House December 21, 2012 in Washington, DC. Obama called on congressional leaders to work out a solution on the fiscal cliff over the Christmas break. He also said "becaues we didn't get this done, I will see you next week." (Photo by Alex Wong/Getty Images)

奥巴马,在卫斯理大学毕业典礼上的演讲

  你们每个人,都可以拿了毕业证、走下这个讲台,然后去追求锦衣玉食等等这个 金钱社会视为理所当然的东西。你可以选择只关心自己的喜怒哀乐,把你的生活 和国家的发展割裂开来。 
  但我不希望你这样做。这不仅仅是因为你对那些没有你幸运的人负有责任,尽管 你确实负有责任;也不仅仅是因为你对帮助你走到今天的人欠有债,尽管你确实 欠下了债。 这是因为:你对你自己负有使命和责任。这是因为:我们个人的命运依赖于群体的 命运。
  这是因为:如果你仅仅考虑你自己、满足眼前的需要,这是一种贫乏。这是 因为:只有你把你自己的战车和其他一些更伟大的东西绑定到一起的时候,你才能 发现你真正的能量,才能发现你为美国这个国家继续书写历史时所能扮演的角色。