2009年10月30日星期五

阮一峰的网络日志

阮一峰的网络日志


关于网上论坛

Posted: 29 Oct 2009 07:46 AM PDT

天,jQuery的创始人John Resig怒气冲冲地宣布,不再使用Google Groups

他写了一篇长达2000个单词的文章,详细解释了为什么。请注意,2000个单词啊,打印在A4纸上,足足有三页。像他这样炙手可热的顶级程序员,愿意坐下来,写那么长的文章表达不满,可见真的是忍无可忍。

我也是Google Groups的用户,他所说的那些问题,我都遇到过,所以对他的抱怨深有同感。下面我就谈谈我的看法。

一、Google Groups是什么?

为了帮助那些不熟悉这个话题的朋友跟上后面的讨论,我先简单介绍一下Google Groups。

它是Google公司提供的网上论坛服务,你可以利用它,快速架起一个多人讨论区,在里面发起新的话题或者回复别人的话题。更妙的是,它还有邮件列表的功能,可以用Email,张贴自己的发言或者接收别人的发言。

当然,从网上论坛的角度看,它的功能是比较弱的,与流行的论坛软件没法比。比如,它不允许对话题分组,因此没有板块功能,而且你不能在发言中插入图片,唯一的办法是发送附件。此外,它也不提供数据导出功能,基本上只要你使用了,就等于把所有数据都送给google公司了,自己没法再利用。

但是不管怎么说,它提供了基本的讨论功能,而且出于我后面要谈到的原因,大家依然愿意使用它。

另外,我也必须提一句,它别的功能也许不行,但是全文搜索功能绝对强大,不愧是google出品。

(插入语:Google Groups在国内好像被屏蔽了,有时就连加密的https连接都会断。欢迎大家告诉我,当地是否可以正常使用这项服务。)

二、Google Groups最大的缺点

John Resig最不满的地方,也是其他用户最不满的地方,就是Google Groups里面的spam(垃圾帖)实在是太多了。

我开设的讨论组基本上无人知晓,但是每天也会收到2~3条spam,不知道这些人从哪里找到我的网址的;John Resig开设的讨论组有2万个成员,属于著名讨论组,你可想而知他每天要收到多少条spam!

更可气的是,一旦收到了spam,你毫无办法,只能一条条手工删除,然后第二天还会照样收到。想一想吧,让一个顶级程序员,日复一日,手工对抗灌水机的进攻,将时间浪费这种事情上面,怎能不让他郁闷呢!

真难以相信,Google公司就听任spam横行,不提供任何有效的过滤措施,你唯一能做的,就是打开审核设置,在帖子发表之前对它进行审核。难怪John Resig要质疑,为什么Gmail可以自动过滤垃圾邮件,而Google Groups就做不到呢?这算不算产品歧视呢?

好吧,在走投无路的情况下,你只有打开审核设置了。但是,这样做虽然可以净化讨论环境,但是却让整个事情变得更糟了。首先,你的工作量增大了,你不得不手工批准每一条发言;其次,用户的感受变差了,因为没有人喜欢自己的发言被审查,有的用户可能会因此攻击你,与你大谈美国宪法第一修正案;最后,假定你的讨论组非常受欢迎,每过五分钟,都有用户从地球的某个角落跳出来发言,那么你去睡觉的时候,谁来审核呢?你只能任命一些管理员,让他们按照时区顺序分担审核责任,并且为他们制定出统一的审核政策,这就让论坛的管理和人际关系变得复杂了。

所以到头来,只能有两种结果,一种是你被累死了,另一种是你将论坛设置为封闭式,只有经过批准的成员才能加入和发言。

两种结果都无法接受,John Resig只好选择退出了。

三、项目开发者需要什么?

当你开发出一个项目以后,你需要有一个地方,与用户直接交流。用户提出问题,你来回答,就是这么简单。这就是你需要网上论坛提供的所有功能。Google Groups那么简陋,大家还是愿意用它,原因就在这里,因为你不想为了这么单纯的需求,自己去架设一个全功能的论坛。

试想一下,如果你自己搭建一个论坛,要干哪些事情:

1)你要选择一个论坛软件,但是一旦用上以后,就等于被绑架了。论坛软件的每一次升级,你都必须跟上;如果将来你想改用其他软件,或者原来的软件停止开发,你就要愁死了,因为这意味着,你不得不自己写程序去转换数据。

2)你要架设一个后台数据库,通常是MySQL,这就是说,你又多了一项管理数据库的任务。要知道世界上有一种人叫做DBA,他们的全职工作就是管理数据库,经常有半夜三点被叫到机房的经历,所以管理数据库真的是一种费心费力的活,不到万不得已,你千万不要把这种活揽到自己头上。

3)你不得不绞尽脑汁,将每一项论坛的后台设置都设好。我最喜欢的论坛软件叫做vBulletin,它的后台设置多达2000多项,大部分我从来没有搞清楚过。我曾经设想,要是我把每一项设置都搞清楚,我就可以去开一家VBulltin的咨询公司了。

所以,如果你选择自己架设论坛,你的精力就会被分散,你用于开发项目的宝贵时间,就被论坛的维护和管理消耗掉。

你的初衷只是要找一个可以与用户对话的地方,没必要把一切搞得这么复杂。既然使用Google Groups,能够在5分钟里搭好一个网上论坛,那么大家当然就去用了。遗憾的是,Google这个产品并不理想。

四、论坛软件的尴尬之处

John Resig的烦恼,在更深的层次上,我认为反映了论坛软件在开发上的困境。

今天的论坛软件,在模式上与10年前没有本质区别,主要功能和运作模式都是那时定下的。以国内市场占有率最高的Discuz!为例,最新的版本是7.0版,但是实际上它同最早的版本相比,除了功能更强大以外,没有太大的区别,两者都是在做同样的事情。

我不是说现在的论坛模式不好,而是说这种模式不适合进一步发展,所以开发就走入了死胡同,只能做功能的增强,而不能做模式的创新。

现有的论坛模式不具备可扩展性(scalable)。由于对数据的实时性要求太高,导致不能对论坛软件使用缓存,这就是说,基本上网上论坛都是一个单机系统,CDN和反向代理都用不上。单机系统的结果,就是论坛软件不可能负担太多的访问者。像vbullentin这样的软件,同时在线人数不能超过10000~15000人,否则就会有性能问题。不用打听你就知道,10000多人属于访问量比较小的网站,所以论坛都做不大。

如今的时代是Web 2.0的时代,它的特征包括提供API接口、前台界面的多样化和去中心化等等。Facebook和Twitter,都不把自己称为网站,而是把自己叫做平台,意思就是说,我只提供基础设施,随便你怎么造房子。我就常常想,论坛的2.0时代什么时候到来呢,会是什么样子,又怎么来实现呢?

五、论坛软件可能的创新之处

我记得,以前看到过有人提议,可不可以基于BT下载的模式(或者点对点协议),做出一个论坛。这样做的好处是,数据在用户之间进行交换,这样就不存在中心服务器了,因此论坛可以做得很大;坏处是一条发言想被所有人看到,也许有一个很漫长的数据交换过程,即时的对话和讨论基本上不可能发生。退一步说,usenet就是一个去中心化的讨论区,的确规模非常大,但是大家也知道,在上面讨论问题,效率不高。

我设想中,未来的论坛应该提供这样几个功能:

1)支持openID,这样就省略了注册步骤。

2)开放API编程接口,允许用户进行再开发,可以远程发言和调用数据。Google Groups如果开放API的话,防spam的问题就很容易解决了,还可以附加很多别的功能,我相信到时其他论坛软件恐怕都要死定了。

3)数据储存和前端逻辑必须分离。从MVC的角度说,就是Model(模型)要同View(视图)和Controller(控制)分离,只要把各自的接口规定好就行了。这样一来,数据的维护和平台开发都会变得非常容易。说实话,Amazon公司提供一种SimpleDB服务,你可以将数据都放到那里去嘛,然后前台的论坛程序,其实就干两件事:控制用户行为和同SimpleDB交换数据。

(完)

2009年10月25日星期日

阮一峰的网络日志

阮一峰的网络日志


[读者来信] 我不想一辈子和代码打交道

Posted: 24 Oct 2009 06:17 AM PDT

前几天,我收到一封读者来信。

他在信里谈了自己的情况,就是他不合适编程,但是又不得不在IT界谋职,所以职业发展很不顺利,而且内心非常苦闷,不知道未来在哪里,想询问我的意见。

我说了一点自己的想法,还劝他可以去试试做编辑。但是说实话,我觉得自己的建议没有针对性,因为我一天也没有在IT界待过,对具体的职业并不了解。

所以,经过本人同意,我把他的来信贴在下面,希望大家提供自己的经验,供他参考。

另外,如果你有合适他的职位,请写信与他联系,邮件地址是 Gatesby@126.com 。因为他现在还在失业中,非常需要帮助。请大家多帮忙,我代表他先谢过了。

=========================

一峰兄,你好,

不揣冒昧给你写这封邮件,有一事想请教。

我现在30岁、单身、北漂、失业ing……!不知道未来职业的方向,想听听你的意见。

由于种种原因,我22岁才上大学,本科是在一个地方N流学校读的,专业是计算机科学与技术。但是大学期间,我对本专业没兴趣,更多时间泡在图书馆看英语学术期刊,有幸在大三过了英语六级。此外,就是去网吧下载阅读有关经济、政论、历史等方面的文章。

2005年6月,我本科毕业,南下珠三角。当时只有一个念头:不搞技术。因为在学校期间,Programming是我的短板,这是毕业后不想做开发的直接原因。

我到了东莞,进了一家三来一补的外资制造企业(日本TDK旗下的全资子公司,负责代工台式机和笔记本硬盘)。眼见了日本外企的管理风格和血汗工厂的管理制度,以及那天高皇帝远的治安,和有钱就是爷的声色犬马生活。在精神上极度困顿的情况下,毅然于2007年年初辞职。

辞职后,我联系到一个大学同学,他比我早10个月辞职。当时,他怀揣一万块就回到武昌租房,准备报考华中科技大学的计算机系研究生。我也想考研,但又面临母亲的压力:"毕业这么久,没赚到什么钱,工作还是一个浮的。你哪么办哦!?"

过了一段时间,我发现自己已无安心看书的可能,遂又联系到在北京的大学同学,于2007年5月中旬懵懂地来到北京,半个月后经同学介绍进了一家做车载导航软件的公司。

这家公司是一家典型的国内IT民企,涉足车载导航,在中国国内的导航产业的四大领域(前装、PND、手机、互联网)中,主攻门槛最低的PND(Personal Navigation Device)市场。在职期间,我的主要工作就是与地图数据格式打交道,将电子地图的中间交换格式,转换成最终能应用于导航设备的物理格式导航电子地图。公司外购地图编辑平台,然后组织人力对地图数据进行加工,处理外业地图数据的员工除了少数科班出身的以外,其余的全是中专学历,毕竟这是个操作性工种,付出的主要是时间成本。针对导航软件的开发,这里面涉及的专业知识,按理说应该是GIS专业毕业的最拿手了,不过为了积累项目开发及编程经验,我只好硬着头皮上,边干边学了。从本质上讲,地图数据转换这一块工作涉及的计算机知识并不高深,更多的需要细心和耐心。部门中从事开发的人员,既有学GIS的,也有计算机的,还有学遥感的。从2007年5月到离职,我一共参与了三个项目,其中一个还因种种原因后来被公司砍掉。通过各种渠道了解到的种种信息,使我对公司在国内的导航产业的地位和个人的职业前景感到很渺茫。

今年二月,公司抽调我至与北京一所高校联合组建的新公司,要求我先解约再重签合同,但是没谈到任何经济补偿,只是说依照劳动法规定,需要简单变更一下劳动关系。我明白了公司的忽悠后,就决定辞职与其对簿公堂。今年三月份辞职后,我就开始了宅在出租屋里的生活。迄今已逾半年。

这半年多的生活状态是:

三月下旬到四月底,和公司就解除劳动合同关系一事PK,定期提交证据和出庭。最后赔了俩月工资。幸亏CSDN一位博主急公好义的拔刀相助。我与之素昧平生,只是平时多爱看其写的博客,出现这种事情下意识地就冒昧请教了人家一下。非常感谢这位大哥!

五月,为了在求职过程中增加一点就业竞争力,报了7月11日的IELTS Academic 考试。开始在家全职复习。准备考出一个比较理想的分数(> 7分),以此作为求职的敲门砖。这段时间,周围的朋友和同事都关心我,问我"找没找工作?工作找得咋样?" 当时我只能笑着回答:"暂时不找!"不明就里的人还以为我是求职未果的遮羞语。

六月,晨读、看书、浏览博客,晚上绕新华社小区林荫道散步。一切波澜不惊。

七月十一日考完试,二十三日查到了成绩:5分(L:5,R:5,W:4.5,S:4.5)!心里洼凉!考完虽知没有发挥最佳水平,但也未曾料到状态竟如此低迷。反思自己当时复习还不够刻苦,这段时间并不是将全部时间花在复习备考IELTS上,上网看文章的时间太多了。

八月,开始找工作,想谋求非技术研发类职位,或者转做售前或技术支持。但是,根据招聘广告上的职位要求,不是我不满足人家的要求,就是人家不满足我的要求。我感到很纠结,不知道是继续做技术走研发这条路,还是彻底告别过去,开始新的行业。时间一天天过去,眼看粮草将尽,同学给予我资助的同时也劝我:"生存为第一要务,先暂时找个公司干了再说!"

九月十五号,踌躇满志地将求职信和中英文个人简历投到一家公司,申请解决方案工程师一职。人家通知面试了,满以为有戏!可技术这玩意儿,就像吊嗓子、扎马步这些基本功一样,长时间不练,就荒废了。当时面试官给我的回复是:"沟通和表达都不错,只是笔试成绩太寒碜!"人家对这一职位不是纯粹的沟通、外联,而且还包括Coding。最初对这一职位JD的理解和人家的实际要求存在严重偏差。这样,半年来的首次求职就这样铩羽而归。

十月,同学眼见我初试未第,担心我心理负担太重,劝我尽可能将个人简历公之于众,增加潜在的机会。我还是没有多少感觉。十五号面了一家外派至微软的外包公司,我不喜欢外包,去面试纯粹出于积累经验的考虑。最后人家嫌我开价太高,没有给我进一步去微软面试的机会。

我现在找工作,进入了一个尴尬的境地。

都说毕业4到5年是一个槛,人家面试时不再以应届毕业生的眼光打量你了,不仅看你的技术功底,而且还看你对业务知识的了解有多深。最初,我想依托熟悉国内导航行业数据格式的优势,以及对该行业应用趋势的理解,转型为与销售和市场联系比较紧密的工作。但是,国内目前做导航软件的只有很少几家公司,它们在招聘网站上提供的职位,均为我离职前所从事的工作,没有区别!如果一份工作不能在养活自己之余使自身能力得到提高的话,那你还有什么理由跳槽做同一份内容相同的工作呢?我更感兴趣的是如何基于这些地图做商业应用——基于Web2.0的互联网或基于内嵌GPS模块智能手机,类似Apple AppStore的应用——但限于自己的技术面太狭窄,选择机会不多。

我对于自己如何应对职场的挑战,感到迷茫和困惑。我内心对IT技术不感兴趣,看专业书籍往往是因为工作上需要,只能硬着头皮看,相反对人文和经济比较感兴趣。当然,目前的大环境决定了个人必须首先找到一个"饭折",然后在有可能的情况下,才能追求与自己兴趣一致的工作。

朋友结合我的特点(英语尚可,研发能力较弱)分析,觉得外包是我职业的最佳归宿。可是,我真是有点不甘心,我知道自己更喜欢涉及口头抑或书面交流、分析类的工作,更愿意与文字而非代码打交道。

我该怎么办?是继续在"挨踢"这条道路默默耕耘,还是改弦更张,追随自己的内心,另谋它途?

Ray
2009.10.21

(完)

2009年10月23日星期五

阮一峰的网络日志

阮一峰的网络日志


一份超级搞笑的判决书

Posted: 22 Oct 2009 08:35 AM PDT

为了证明我没有编造,先来展示原件的第一页。

这个被告人邓永固到底干了什么事情呢?

原来,他就是在网上发了一篇文章,声称县里的四位领导是"共产党的败类",并且把四人的手机号码贴在网上。然后他就被公安局抓了起来,法院以"诽谤罪"对他进行审判。

让我们来看看,邓永固到底在网上写了些什么,这可是被写入"判决书"的罪证哦。

就算"败类的共产党员"这句话属于诽谤,但是如果你熟悉法律的话,你就会知道诽谤罪是自诉罪,必须由被诽谤的对象直接起诉,不能由公安局来抓人。关于这一点,邓永固的律师怎么说呢,请注意看,已经有点搞笑了。

律师劝当事人"迷途知返"?还请法院公正判决,否则当事人会"走上不停的上访路"?……这种辩护词真是一绝啊。

再来看检察院是如何指控的,搞笑的程度比起律师的发言,有过之而无不及。

看到了没有?邓永固简直是神笔马良了,他上访三年毫无结果,而只写了一篇小小的文章,就产生了这么大的威力,可以让"党政机关疲于应付"、"消磨党政干部的工作意志"、"严重影响当地的工作开展"!更匪夷所思的是,检察院先指控邓永固"严重危害社会秩序",然后立刻为他求情,"邓永固相信党委政府对他的行为能理解","将一如既往全心全意为国家和人民服务"。这种指控真是前所未见啊。

下面就要进入搞笑时间了,先是被诽谤的四位领导干部出来作证了。

原来,让四位领导"精神上受到刺激,晚上休息不好",邓永固就"严重危害社会秩序"了。

接着是最最搞笑的部分,请看群众证词。

邓永固真是罪不可赦啊,让领导抬不起头,心理负担很重,干部"全都散了心"、"人人自危,害怕成为邓永固的诽谤对象",这怎么行!

最后,法官陈述意见,不出所料,邓永固果然有罪。

但是,你万万不会料到的是,最后的判决居然是下面这样。

真绝啊,先用了那么长篇幅,证明邓永固"严重危害社会秩序",因此可以由检察院来起诉他的诽谤罪。最后,却又轻轻放下,宣布他免于刑事处罚。这在逻辑上怎么说得通呢!

我整理出这份材料的直接原因是,今天在网上看到,邓永固向当地中级法院提起上诉,中级法院于今天做出裁决——维持原判。

[参考材料]

* 《判决书》(原件全文,该网址不保证长期有效)

(完)

2009年10月22日星期四

阮一峰的网络日志

阮一峰的网络日志


Windows的版本号

Posted: 21 Oct 2009 08:55 AM PDT

明天(10月22日),备受瞩目的Windows 7就要上市了。

奇怪的是,虽然从名字上看,它是Windows操作系统的7.0版本,但是它的内部版本号却是Windows 6.1。从版本属性窗口和cmd命令行窗口,都可以清楚地看到这一点。

由于Windows Vista的版本号是Windows 6.0,因此感觉上,微软公司内部的看法好像是,Windows 7只是Vista的一个升级版,而不是一个真正重大的新版本。这种说法遭到了微软公司的严正驳斥。他们在官方网志上说,这只是为了保证程序的兼容性,就好像Windows 2000的版本号是5.0,而Windows XP的版本号是Windows 5.1一样。不知道这种说法是不是实情,但是这从一个侧面反映了,Windows版本号的设置是十分混乱的。

下面是Steve Parker对Windows版本号的一个整理,你可以看到其实存在两条路径。

===================

1992年,微软公司发布Windows 3.1时,版本号还是完全正常的。

此后,在Windows 3.1的基础上——严格的说,是在DOS的基础上,——微软公司又发布了Windows 95、Windows 98、Windows 98SE和Windows ME,它们的版本号全部都是4.x。

Windows for DOS Marketing NameVersion
11
22
33
954.0
984.0.1998
98SE4.0.2222
ME4.90.3000

如果你记性好的话,你应该还记得,微软在推出Windows 95的时候,同时还推出了面向企业的Windows NT版本。NT不是在DOS基础上架构的,因此是一个全新的系统。不知出于何种原因,微软令人费解地将Windows NT的版本号定为3.5。令人更费解的是,微软后来还推出了Windows NT4,它的版本号居然也是Windows 4.0。

2000年,微软推出了下一代的Windows 2000,并且在启动画面上,明确标明"基于NT技术开发"(Built on NT Technology)。所以,Windows 2000是Windows NT4的升级版本,它的版本号自然就被定为5.0。

至此,微软已经完全放弃了DOS系统,所以后来的版本都是以5.0为基础开始编号。Windows XP是5.1,Windows Vista是6.0,Windows 7是6.1。

Windows NT Marketing NameVersion
NT3.53.5
NT3.513.51
NT44.0
20005.0
XP5.1
Vista6.0
76.1

让我们来猜一猜,微软下一代的Windows 8操作系统,版本号会是多少?

我猜是6.2……

(完)

2009年10月21日星期三

阮一峰的网络日志

阮一峰的网络日志


照片中的1972年

Posted: 20 Oct 2009 08:54 AM PDT

上个月,Google宣布《Life》杂志全部上网,可以免费浏览。

《Life》杂志是美国第一本图片杂志,以大量刊登照片而著称。1936年,该刊开创了用一整页刊登一张照片的先例,后来被广泛效仿。鼎盛时,它有1300万读者,具有巨大的影响力,海明威的小说《老人与海》就是首发于这本杂志。

Google这次放上网的,是该杂志从1936年到1972年停刊之间的所有各期,数量上接近2000期,相当于一个记录了20世纪中期美国生活各个方面的巨型资料库。此外,早在一年前,Google已经将《Life》杂志的所有图片,都加入了图片搜索结果中。

我在Google上找出了该杂志1972年12月29日的最后一期,意外地发现这是一期特刊,用照片回顾了不平凡的1972年。更意外的是,这一期异常精彩,完全没有一丁点即将停刊的伤感和颓废。

下面就请大家跟着我回到37年前,通过《Life》杂志的图片,看看1972年发生了什么事。

=====================

一、这一期的封面。

二、"编辑的话"第一句就是:"这是Life杂志的最后一期。(This is the last issue of Life.)"

三、1月,神秘的亿万富翁霍华德·休斯20年来第一次通过电话现身,说明即将出版的他的自传完全是一本伪作。作家Clifford Irving捏造了所有与他见面的细节。Clifford Irving因此被判入狱17个月。

四、2月21日至28日,美国总统尼克松正式访华,中美交往的大门终于被打开。

五、3月,北爱尔兰的政治暴力活动到达顶峰,近500人丧生。英国首相希思宣布中止北爱尔兰地方政府和议会的权力,由中央政府对骚乱地区实行了直接统治。

六、3月,经典电影《教父》第一集上映,引发了全球性轰动。照片中是巴黎观众排队入场观看。

七、5月,诺贝尔文学奖获得者索尔仁尼琴,邀请西方记者到莫斯科的家中访问,谴责苏联政府对他的起诉,并和家人摆出姿势供记者拍照。2年后,他就被苏联政府驱逐出境了。

八、5月15日,阿拉巴马州的州长George Wallace在马里兰州参加总统初选,遭到枪击。一颗子弹打伤了他的脊柱,使得他后半生只能坐在轮椅上。10年前,这位州长曾经因为站在阿拉巴马大学门口,阻止黑人学生入学,而成为民权运动中保守派的象征人物。下面的照片中可以清楚看到,行刺者掏出手枪,对着华莱士开枪。

九、70年代的姑娘们,夏季穿着越来越暴露。

十、二战后密集出生的"婴儿潮"一代,已经长大成人。

十一、8月,乌干达独裁者阿明宣布,把亚洲人和欧洲人全部赶出乌干达。在此人统治乌干达的八年期间,至少有30万人遇害。他曾经下令在全国逮捕姓氏为"奥贝得"的人,因为姓"奥贝得"就意味着是前总统奥贝得的人。三个月后,被处死的姓"奥贝得"的人就超过一万人。

十二、9月的慕尼黑奥运会上,22岁的马克·施皮茨创记录地获得7枚游泳金牌。同样是在这个月,博比·菲舍尔获得国际象棋世界冠军,成为第一个获得这个称号的美国人。

十三、12月,基辛格代表美国政府在巴黎与北越展开谈判,漫长的越南战争终于进入了尾声。

十四、战争之后的越南已经变成了一片废墟。图片的上半部是北越(越共占领区),下半部是南越(美军占领区)。

十五、左面照片中那个哭泣的南越女孩,她的家乡被北越军队占领,她只好赤身裸体地逃亡。现在她的家乡又被美军夺回来了,她又可以上学了,所以她在右面的照片中露出了笑容。

十六、12月19日,"阿波罗17号"宇宙飞船完成登月后返回地球,3名宇航员中有2人总计在月球上逗留75小时。这是人类迄今为止最后一次登月,"阿波罗计划"宣告结束。

(完)

2009年10月18日星期日

阮一峰的网络日志

阮一峰的网络日志


我为什么喜欢编程

Posted: 18 Oct 2009 05:12 AM PDT

这个周末,我在家核对More Joel on Software的最后定稿

此书已经在申请书号了,一拿到书号,就可以印刷和销售了。所以,不出意外的话,年底之前就能上架。

在复核的过程中,我又读到了书中让我最有共鸣的一段话:Joel谈为什么公正对程序员很重要。

我不知道别人的情况,我自己喜欢编程,很大的原因就是觉得程序的世界更公平公正,谁对谁错,只要运行一下代码就知道了。这同现实世界截然不同,在现实的世界中,只要你有权有钱,善于搞人际关系和钻制度的空子,你就能把错的说成对的,把黑的说成白的。老老实实、埋头苦干的人,眼睁睁看着乾坤颠倒、小人得志,而只能束手无策、一筹莫展。

我们生活的这个国家,是一个禁止自由思考、党决定一切的国家。在这里,如果你想不撒谎、不干坏事、并且被公正地对待,那么可能你只能去编程了。

==================

不搞政治

作者:Joel Spolsky

译者:阮一峰

老实说,只要有两个以上的人待在一起,就会有政治。这很自然。我说"不搞政治"的真正的意思是"不搞恶性的政治"。程序员早就练出了对公正有非常良好的判断力。代码要么能运行,要么不能。坐在那里争论代码是否有问题,这是毫无意义的,因为你可以运行代码,答案自然就有了。代码的世界是非常公正的,也是非常严格有序的。许许多多的人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。

如果你要吸引程序员,你就必须去创造出这样一个环境。当一个程序员抱怨"人际关系复杂"时,他们的意思明白无误,就是指任何个人因素超过技术因素的环境。程序员在完成手头任务时,不被允许使用最合适的编程语言,而是被命令只能使用另一种特定的语言,原因仅仅是老板喜欢这种语言;没有什么比这更让人气愤了。晋升的原因不是成果,而是人际关系;没有什么比这更让人抓狂的了。程序员被迫去做技术上落后的东西,仅仅因为上级或者得到上级支持的人坚持这样;没有什么比这更让人发火了。

没有什么比因为技术原因赢得一场由于政治原因本来要输掉的争论更让人心满意足了。当我在微软公司刚开始工作的时候,有一个正在开发中的大型项目走入了歧途,项目的代号是MacroMan,目标是创造一种图形化的宏语言。真正的程序员遇到这种语言会很有挫折感,因为图形的特性让你真地没有办法完成循环和条件判断功能。此外,对于那些非程序员的用户,这种语言也不会有很大作用,因为我觉得那些用户不会习惯算法思维,没有办法很快地理解MacroMan。当我说出对MacroMan的负面评价时,我的老板告诉我:"如果火车要出轨,没有东西能够阻挡。算了吧。"但是,我还是不放弃,一再地不断地争论。那时我刚走出学校,在微软公司中差不多跟谁都没有利害关系,所以,渐渐地,人们开始倾听我的核心观点,MacroMan后来终止开发了。我是谁并不重要,重要的是我是对的。非政治性的组织就应该这样,这种组织才会让程序员感到高兴。

总的来说,关注你的组织的社交动态变化,对创造一个健康的、令人愉悦的工作环境是很关键的,这样可以留住程序员和吸引程序员。

(完)

2009年10月15日星期四

阮一峰的网络日志

阮一峰的网络日志


一切皆有可能

Posted: 14 Oct 2009 08:26 AM PDT

1.

请设想一下,如果早生200年,我们会过怎样的生活?

2.

200年前,一个普通美国人的生活是这样的。

白天,他出门打猎、伐木或种地。在天黑之前,就必须赶回家,否则晚上根本看不见路,因为没有路灯。回到家后,他就要拿出水桶,到附近的井、泉、水塘里打水,因为家里没有自来水。打完水后,他就要在露天,支起炉火做饭。因为室内排烟太麻烦,做饭都在室外。

吃完晚饭后,他点起柴火和蜡烛作为照明。但是,柴火有烟雾,而蜡烛是用鲸脂做的,成本很高,所以都不能提供长时间的照亮。如果没有照明,那么晚上他干什么呢?事实上,这就是我对古人生活最无法想像的地方。唯一的可能就是,一到晚上,他真的不能干别的事情,只能早早睡觉。退一步说,即使他有钱点蜡烛,他也只有《圣经》可看,因为那时的小说和报纸都非常原始,不具备娱乐功能。另一方面,就像前面说的,由于没有路灯,他也不可能出门参加社交活动,何况那时的城市夜晚根本没有社交活动。

此外,他也不能出远门。因为除了牲畜以外,没有任何交通工具。距离超过80英里(相当于二天的步行)的地方,都是非常遥远的长途,必须提前做好精心准备。

这就是1800年一个普通美国人的生活,距今不过只有200年而已。

3.

但是,很快地,一切都开始发生变化,因为新技术出现了。

18世纪90年代,英国人威廉·默多克发现,煤加热时释放的气体可以燃烧,并产生明亮的黄色火焰。1796年,费城有人演示了煤气灯的使用。1816年,巴尔的摩率先把煤气灯用作路灯。到了19世纪30年代,美国城市都铺设了地下管道系统,从煤气站源源不断地将煤气传送出去,城市的主要道路上都安装了路灯。于是,笼罩城市的黑暗逐渐散去,夜生活开始出现。

富有的家庭逐渐开始在家中安装煤气管道,用煤气灯实现家庭照明。1851年,一个纽约人说:"城里的大房子几乎没有不装煤气的。"室内照明第一次变得这么高效和便宜,因此人们开始尽情地享受夜晚,入睡时间越来越晚,阅读量比以前多得多。书籍、杂志和乐谱的销量成倍地增长。

与煤气同时进入家庭的是中央供暖系统,蒸汽散热机取代了原来的火炉,将热汽送往房屋的每一个角落。严冬再也不是那么可怕了,哪怕室外是鹅毛大雪,一打开门就有滚滚热浪扑面而来。这进一步改变了人们的生活,室内的文娱和社交活动变得越来越丰富多彩。

厨房用的铸铁炉也得到改进,家庭主妇做饭方便多了,家家户户都在使用,再也不用去室外了。

城市的排水系统开始铺设。费城是美国第一个建立现代供水系统的城市。1832年,美国首次有了使用自来水的浴室,从此美国人才有可能每天洗澡。

4.

不过,真正改变人类社会的技术,是1784年瓦特设计出的新型蒸汽机。工程师们很快就开始尝试,用蒸汽机作为各种机器的动力部分,创造出了惊人的结果。

1804年2月21日,范德比尔特将高压蒸汽机装在机车上,成功地让人类第一辆火车,沿着轨道运行起来,铁路诞生了。

1807年8月1日,罗伯特·富尔顿将蒸汽机与轮船的链条驱动连接在一起,造出了第一艘蒸汽轮船,成功地在哈德孙河上航行了32.5个小时,前进150英里。

有了火车和轮船,人们可以在一天之内就出行100英里,天涯海角都不再遥远。

1830年,蒸汽机开始应用于印刷机,新的可旋转印刷机一夜之间可以印出几千份报纸,成本非常低廉。于是,1便士的小报《先驱报》迅速成为美国第一大报,谋杀案从此登上主流媒体的头版。

5.

与蒸汽机技术同步发展的是电技术。

最早的电产品是电报。第一次电报实验出现在1804年,第一条投入营运的电报线路出现在1839年的英国。1837年,塞缪尔·莫尔斯在美国发明了"摩尔斯电码"。

此后,电报以惊人的速度获得推广。1850年前后,美国所有大城市都连上了电报系统。1866年,横跨大西洋的海底电缆铺设成功,欧洲和美国实现了即时通信。1872年,只需要几个小时,一条消息就可以从旧金山传到印度。

新闻业从此变得空前强大,迅速成为社会生活的中心。另外一个意外不到的结果是,金融业也从此变得空前强大,因为金融家再不需要雇佣人跑步来报告股价了。

6.

总之,在19世纪的前半期,改变人类生活的奇迹纷纷出现:铁路、电报、报纸、供暖系统、照明设施以及自来水。

一进屋子,就有暖气;一开水龙头,就有热水;一到晚上,有稳定的煤气灯提供照明;一出门,可以选择铁路和轮船代步;每天的报纸源源不断地刊登来自世界各地的最新电讯消息。

看上去似乎没有什么事是做不到的,一切皆有可能,人类的生活被彻底改变了。

7.

1844年,64岁的纽约前市长Philip Hone第一个使用了"往昔的好时光"(the good old
days)这个词。他出生于1780年,那是一个社会发展近乎静止的时代,祖父和孙子看到的差不多是同样的世界。但是,新技术的问世,使得世界发生了快速的变化,每一代人看到的都是与上一代人截然不同的世界。

我们都在一点点地变老,眼看着年轻时的新奇技术逐渐变得稀松平常。这是激动人心的体验,但有时也是可怕的体验。

正是因为一切皆有可能、一切皆在变化,所以在急剧变动中长大的我们,好像就没有什么特别确信的事情。唯一不变的,似乎就是变化本身。不知道这算不算技术改造人性。

这些对人类社会影响重大的技术突破,起源于200年前,目前好像还在不断加速中。技术改造历史的趋势,似乎越来越明显。以前的历史学家相信"地理决定论",未来的历史学家也许相信"技术决定论"。人类社会的形态是被技术发展决定的,这个命题值得深入探究。

[注] 本文是美国经济史的学习笔记。文中的历史资料主要来自约翰·戈登的《财富的帝国》(中信出版社,2007)一书。

(完)

2009年10月12日星期一

阮一峰的网络日志

阮一峰的网络日志


书目和数据库的世界纪录

Posted: 11 Oct 2009 07:21 AM PDT

图书馆书籍的世界纪录以后,今天还有最后一部分。

与信息处理技术有关的世界纪录。

(图片说明:装置艺术,为一本书通电。)

1. 最早的图书分类法

以前,图书馆里的书,都是按照书名的字母顺序摆放。后来,书籍越来越多,迫切需要根据主题进行分类。

1876年,美国一所大学的图书馆员麦尔威·杜威(Melvil Dewey)发明了"杜威十进制分类法"(Dewey Decimal Classification,简称DDC),用3个阿拉伯数字表示书籍的主题,这就是世界上最早的图书分类法。自从发明后,它就一直在被修订,最新版本是2003年的第22版。目前,它也是世界上使用最广泛的图书分类法,至少被译成了35种语言。除此之外,美国的"国会图书馆分类法"也有很大的影响。

国内使用最广泛的是"中图分类法(第四版)"。它有一个显著特点,就是排在最前面的A类主题是"马克思主义、列宁主义、毛泽东思想、邓小平理论",因此在中国大陆的所有主要图书馆,你一进书库,最先看到的必然都是这些政治宣传的书籍。

2. 第一个使用微缩胶卷的图书馆

1884年,法国的国家图书馆,在世界上首次将藏书制作成微缩胶卷。这时距离摄影术的发明,刚刚过去了40多年。

3. 第一个将藏书数字化的图书馆

1997年,法国的国家图书馆,首次将一部分藏书的全文放上互联网。

4. 最大的单个图书馆数据库

美国国会图书馆的数据库,在全世界图书馆中是最大的。它现在包含了2500万册书目、250万段录音、1200万张照片、450万张地图和6000万份手稿(原文如此)。

5. 最大的书目数据库

全世界最大的书目数据库是WorldCat,它由世界图书馆联合会维护,全球94个国家和地区超过7万家图书馆为其提供书目数据。自从1971年创立至今,它已经收录了超过9500万条书目信息,涉及的语言超过470种。目前,它每年新增200万条书目。

6. 最早的期刊索引

19世纪末,一个英国图书馆员William Poole,编出了一份1802年-1881年维多利亚女王时期英国杂志文章的目录,这是世界上第一次有人为了学术研究的目的,将期刊内容按照主题进行分类,制作出索引。

7. 第一个投入应用的计算机数据库

最早的数据库技术,起源于20世纪50年代。1951年,美国人口调查局在一台大型机上建立了一个数据库,这是人类第一个投入正式使用的数据库。

8.最早的全文数据库

数据库公司Lexis-Nexis在20世纪70年代,第一个提供全文数据库服务,首先是1973年的法律数据库,然后是1979年的新闻和商业数据库。这两个数据库,直到今天还在使用中。

9. 最大的指纹数据库

美国联邦调查局FBI的指纹数据库是世界最大的,收集了4000多万个指纹。但是,假如以每个人10个指纹计算,那么这个数据库只覆盖了美国总人口的百分之一。因此,想通过比对指纹找到罪犯,现实中是很难办到的,除非是惯犯。

(完)

2009年10月11日星期日

阮一峰的网络日志

阮一峰的网络日志


2009年10月10日

Posted: 10 Oct 2009 06:42 AM PDT

你知道吗,亚洲第一个民主共和国是什么国家?

你知道吗,亚洲第一个三权分立的政府是什么时候成立的?

你知道吗,为了这一天,有多少人献出生命?

你知道吗,为了这一天,革命党人曾经连续多少次起义失败?

今天,就是这一天98周年的纪念日。

让我们一起说:

伟大的辛亥革命,万岁!

(完)

2009年10月8日星期四

阮一峰的网络日志

阮一峰的网络日志


Linux的五个查找命令

Posted: 08 Oct 2009 02:21 AM PDT

最近,我在学习Linux,下面是一些笔记。

使用电脑的时候,经常需要查找文件。

在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。

1. find

find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

find的使用格式如下:

  $ find <指定目录> <指定条件> <指定动作>

  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

  - <指定条件>: 所要搜索的文件的特征。

  - <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

find的使用实例:

  $ find . -name 'my*'

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

  $ find . -name 'my*' -ls

搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

  $ find . -type f -mmin -10

搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

2. locate

locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

locate命令的使用实例:

  $ locate /etc/sh

搜索etc目录下所有以sh开头的文件。

  $ locate ~/m

搜索用户主目录下,所有以m开头的文件。

  $ locate -i ~/m

搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

3. whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

whereis命令的使用实例:

  $ whereis grep

4. which

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which命令的使用实例:

  $ which grep

5. type

type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

type命令的使用实例:

  $ type cd

系统会提示,cd是shell的自带命令(build-in)。

  $ type grep

系统会提示,grep是一个外部命令,并显示该命令的路径。

  $ type -p grep

加上-p参数后,就相当于which命令。

(完)