March 2009


程序员,就是整天与机器打交道的那群人。
在计算机并不普及的年代,这样的描述毫无疑问;然而,这些年来,得益于计算机成本的不断下降,软件使用门槛的不断降低,如今,昔日昂贵而又神秘不可莫测电脑,已经成了随处可见、人人能用的办公器材。一句话:人机交互不再是程序员的专利。大家都可以用电脑干活,只不过,程序员用电脑写程序,其他人用电脑干其它事。
结果,普通人抱怨的问题,程序员也在抱怨:电脑不够聪明,不够智能,效率太低……

可是,电脑真的进化到了对程序员和普通用户“一视同仁”的地步吗?

我不由得想起,上个世纪80年代,温伯格在《技术领导之路》中提出的疑问:

(开办技术领导力学习班)也让我们产生怀疑,技术在当今社会扮演了重要的角色,我们的学习班,是否赋予了某些人太多的力量?

细细想来,那个时候IT是高深的技术,只有少数人能够接触,因而程序员“理所当然”地借助了IT的东风,具有超常的力量。可是如今呢?与常人无异的程序员(或者说,IT技术人员),他们身上让人担心的“太大的”力量,到底是被淘汰了,还是没有发挥出来?

对这个问题,不同的人或许有不同的看法。不过,读过The Productive Programmer(中文版《卓有成效的程序员》)的人,多半会选择后一个答案。

The Productive Programmer是一本奇特的书,它的Productive(也就是“生产力”),与新的语言、新的框架、新的系统完全无关,而是另辟蹊径:它只是提醒读者,作为程序员,你与普通用户是不同的:其它人只是简单地“启动”程序,而你完全可以动用自己的专业知识,“驱使/调度”那些程序。这样的机会,普通用户想不到,也不愿意抓住,但是抓住它们,你的生产率就会成倍上升。所以,这本书叫做The Productive Programmer,而不是The Productive Computer-User

薄薄的一本书(英文版224页,中文版215页),共分16章,兼顾概念和实践两个方面,既介绍了加速、专注、自动化等等提高生产率的“先进”思维观念(譬如“多用键盘少用鼠标”,“消除干扰集中精力”),也给出了在设计、分析、构造、元编程、多语言编程等等多种任务中贯彻前述思想的若干实例(譬如“用全面测试保证质量”,“选用最省事的方式/语言完成任务”),可以说是“麻雀虽小,五脏俱全”了。

不过,看完整本书,我最深刻的印象还是贯彻全书的思想。说白了,就是尽量让机器做机器该做的事情,让程序和程序打交道,发挥程序员在这方面的先天优势——他人眼中的普通工具,是程序员手里的有利武器。

不信你可以想想,虽然如今人机交互的难度已经大大下降,然而程序终究是程序,“程序跟人打交道”与“程序跟程序打交道”,效率差的不是一星半点:

不用宏,你可能需要一次又一次地重复选择、修改、保存;
不用脚本,你可能需要一次又一次地点击、配置、等待;
不用自动化测试,你可能需要一次又一次地运行、调试;
不用管道,你可能需要一次又一次地生成、删除中间文件;
……

The Productive Programmer则会“教导”你:

多用宏吧,启动它,你就可以迅速完成大量重复的工作;
多用脚本吧,你可以提高运行的效率,避免变数和误差;
多用自动化测试吧,你可以迅速定位问题,保证质量;
多用管道吧,这样多个程序就可以“无缝结合”成一条生产线;
……

没错,学习宏、脚本、自动化测试、管道(Shell),不是“容易”的事情。但别忘了,身为技术人员,了解技术,学习技术,运用技术,正是你的职业、你的优势,也是你的责任、你的生产力(所谓productive)所在。随便举个例子吧,在本书中文版的第196页有这么一段话:

……在我刚才提到的例子中,开发人员用了1小时58分建立正确的语法,然后用了不足两分钟运行。在一些未曾培训过的人眼里,他的大多数时间都没有效率(这就是为什么他们反对使用正则表达式的原因),但最后,他节省的是几天的时间!……

我还要补充的是,解决好这样的问题,“现在”能节省几天的时间,将来,更可以节省无穷无尽的时间!就我的开发经历来说,平时多注重这样的细节,做些“没效率”的事情,积累起来,就可以节省大量的时间和精力——最起码,你不再会抱怨,自己终日被一大堆“简单重复劳动”所困扰。

类似的例子,在书中随处可见,譬如作者讲到,“几乎每个*nix用户,都会有自己的shell alias”,真是于我心有戚戚焉:我自己积累了一大堆alias,喜欢用grep –color把要找的内容标成高亮,也喜欢在统计脚本里用不同的颜色标注不同的状态……在Shell下干活,更加简单、利索,一目了然,这种流畅和效率,也可算专属于程序员的宝贵财富。不厚道地炫耀一下,我还有程序定期自动备份我的blog文件和数据,有程序把下载的有声资料“统一”为广播音质mp3(节省空间,同时更新/修正id3信息,调整音量)方便导入随身听……

当然,也有读者会觉得很烦:作者每讲一个很小的例子,几乎都要强调一遍:“简单重复劳动是低效的(程序员不应该这么干)”。不过,我丝毫没有觉得罗嗦,反而因此喜欢上这本一个下午就能看完的“轻量级”小书:阅读它,你并不需要太多的期望,权当一次愉快的思维体操吧——你会发现,专属于自己的高效率,就来自书中提到的点点滴滴。

欢迎转载,转载请注明出处。

Founders at Work, Chapter 12

Yurii 翻译

Livingston:你提到,Gmail最开始是“有争议的”,能接着说下去吗?

Buchheit:我觉得,一般来说,人们会不太适应不一样的东西。即使是现在,我谈到给Gmail增加新特性,除非是很小的改动,或是不改变现状,只做些调整,否则大家都不会喜欢。人们对“可能”的理解非常狭隘,相比真正的可能性,对于“可能”,我们的思维有许多局限。所以他们会不适应,他们有点喜欢想尽办法来反对。
但是我个人更钟爱新的东西,所以我总是非常愿意看看会发生的事情。这是我加入Google的最大理由。这理由足够强,强到我确信这是一桩好事:我只是觉得这很有意思,看到将要发生的事情,我很激动。
就这样,Gmail之所以让我激动,也是因为想看看大家会是什么反应。我喜欢某些不确定,因为这有点悬念、有点激动,好像是冒险,对吧?即便没有做成,你也可以从中学到很多。但不是每个人都喜欢冒险。许多人好像就是讨厌不确定。在生活的每个方面都讨厌不确定。
我忽然想起来,某段时间我问大家,如果他们在玩俄罗斯轮盘赌,有一把枪,枪有10亿个弹筒(或者非常多的,也就是说,他们被杀的可能性微乎其微),他们愿意花多少钱玩一盘?许多人都觉得这个问题很不礼貌,他们回答,“给我多少钱我也不玩”。但我们其实每天都在玩这个游戏。他们开车来上班,挣工资,其实一路都是在冒险,但是他们不希望知道自己其实在冒险。他们希望自欺欺人,假装一切都与风险无关。

(more…)

欢迎转载,转载请注明出处。

Founders at Work, Chapter 12

Yurii 翻译

Livingston: 那时候Google一门心思关注搜索,你有没有担心过自己的项目被抛弃?

Buchheit:一直都是。我还得说,现在看来Gmail很不错,但我们开发是很早时候的事了。Gmail是第一个真正偏离单纯“web搜索”的产品。Groups其实也依赖搜索——只不过它搜索新闻组里公开的帖子。

Livingston:Gmail还必须要邀请才能加入吗?

Buchheit:不用,你可以用手机申请。

Livingston:也可以通过Blogger,对吗?

Buchheit:我们已经向许多不同的方面开放了。大学生可以申请,我们希望开放给学生。

Livingston:为什么要邀请加入,这背后是怎么想的?

Buchheit:理由有好几个。我又得说一遍,邮件的问题很麻烦,不只是在数据规模那些方面。有个问题很重要,那就是,我不希望数据有任何损失,因为没人愿意弄丢邮件。如果web搜索出了问题,你可以退回去,重抓一遍网页,但是邮件不同,一旦丢了就不可挽回。
我非常关心系统的稳定性。策略之一就是控制用户的规模,这样就不会超出限制。你必须时刻确保当前用户享受到优质的服务。同样,这做法也约束了某些滥用email的行为,举例来说,这样发垃圾邮件的人就很难获得1000万个帐户——那样的后果很糟糕。

(more…)

欢迎转载,转载请注明出处。

Founders at Work, Chapter 12

Yurii 翻译

Livingston:还有哪些新特性是独创的?

Buchheit:对话视图——你打开某个对话,其中的所有邮件会像卡片一样列出来,而不是单独出现。

Livingston:这是你想出来的?

Buchheit:其实有好几个原因。其中之一是,我曾做过Groups,那里同样有归类(threading)。另一个是,我们内部有太多的邮件。
如果没有会话,就会出现这种情况:有人发出了一封邮件,有四个人回复了,五个小时之后还有人在回复,其他人会觉得,“这已经重复谈论过五次了,你还要回复。”
据我们观察,人们费那么大力气管理邮件的原因之一在于,他们尝试把对话归拢到一起。他们把邮件放到同一个文件夹——否则就会忘记,或是放错文件夹,对话就完蛋了,再也没法回复。
大家用各种工具和诀窍来管理会话。为什么不把它们直接归拢到一起呢?后来我们又想到,“我们来把引用他人的邮件内容隐藏起来吧”。因为这样阅读速度更快,而不需要浪费精力。我们同样希望集成IM聊天。做第一版的时候,我们没时间集成那个功能,但是很早的原型中就有聊天功能的,因为我们希望把聊天和email做到一起,这两者是一体的。所以,我们会从聊天的角度来看待email,所以我们给聊天加入email功能,而不是走其他的路。显然,聊天是为谈话服务的——没有人受得了分割成一条条的聊天纪录。所以,谈话视图也是从此而来——有段时间我们甚至把email的格式设定得更像聊天。

(more…)

欢迎转载,转载请注明出处。

Founders at Work, Chapter 12

Yurii 翻译

Livingston:这么说,你花了一天来做Gmail,而你不知道自己在做的事情的意义——之后呢?

Buchheit:很长时间里就只有我一个人,然后Sanjeef Singh加入进来。但是,在Google更换项目,尤其是那时候的Google更换项目,并不容易。不是说,某一天你就忽然去做一个新的项目了。那时候他正在做企业搜索,所以他还得花很多时间在企业搜索上。过了很久,Sanjeef才把大部分时间用在Gmail上。所以有很长的时间,Gmail的进展非常慢。
开始主要是我,然后是我和Sanjeev,之后另一个家伙Jing Lim也来了。团队的增长非常缓慢。做一个email那样迥然不同于Google传统的东西,这想法人们还是不太确定。

Livingston:你宣布:“这是了不起的东西,我们要发布了”。这是什么时候?

Buchheit:是发布几天以后。这项目很大。有些时候,我们似乎根本不可能完成它。

(more…)

Founders at Work是一本有意思的书,讲述了若干有意思的创业故事,我看得兴起,顺手把访谈Gmail创始人Paul Buchheit的一章翻译出来,给有兴趣的朋友看看。

欢迎转载,转载请注明出处。

Founders at Work, Chapter 12

Yurii 翻译

Paul Buchheit是Google第23名员工。他创造并领导开发了Google的Web邮件系统,Gmail,该产品引领了当今所谓“Web2.0”的众多特性。除此之外,Buchheit开发了Adsense的第一版原型,Google依靠这个程序在其它网站显示广告。在2000年一次关于公司价值的一次会议上,他提出了现在众所周知的公司信条:不做恶(Don’t be evil)。

尽管Buchheit算不上创始人,但他对Google的贡献,可能比其他许多创始人在创业时的贡献更大。Gmail其实是在Google内部诞生的——这是一个传奇般的项目,起初,它并不是公司的主要业务,只是由一小群人发起,而且,许多人开始并不看好它。

Livingston:讲讲事情的开头吧。Gmail是非正式项目(side project)还是公司指派的任务?

Buchheit:实际上两种因素都有。我很早就在做Email软件,当时大概是1996年,但只是个小项目。但Gmail的想法从来没有实现过。奇怪的是,大概因为一些别的理由,那时候我似乎就想叫它Gmail。这只是凑巧——它并不必然是Gmail的前身,却是我一直在思考的,因为我长久以来就对email不满意。
那时候我在学校念书,还没有hotmail。要看邮件,你得回宿舍。我想,这可真够傻的,我应该能在任何地方检查邮件。所以就想做基于web的邮件。我真的不知道那时候自己在干嘛,因此也没什么结果。我写了点程序,但一直没什么用处,也从来没投入实用。
中间内容就不提了,直接说最后:我到了Google,为Google Groups工作,groups和email不完全一样,但是有关系。等Google Groups的第一代产品差不多完善之后,他们问我,是否愿意开发某种email或是针对个人的产品。这只是一个粗略的意向。他们只是说:“我们觉得这类东西有点意思”。当然,我很高兴干这个。

(more…)

兑现年初的话,把技术blog开了。

现在只有一篇,名字也没想好,暂定“Tech, Tech”;不过,凡事总有个开始,对吧。

Tech, Tech

欢迎访问&订阅

//bow

现实的世界这么复杂,上帝到底起了什么作用?
有人说,上帝就是创生世界的第一因,他是这个因果链条的第一环,然后世界就“自顾自”地出现了;
也有人说,其实因果链条上的每一环,表面看来是逻辑联系,其实都是上帝的意志;

这个问题我们不回答,我们能确定的是,在这个高科技的社会,生活中的各种事务,背后都是技术的“意志”;正因为如此,温伯格在《技术领导之路》中说,在这个时代,技术人员拥有强大的力量,只是需要发掘自己技术(技术知识)的价值,所以他还会花专门篇幅讲到力量转换。

今天写上面的话,是因为今天又看到有朋友在不厌其烦地详细介绍wordpress的维护。我想说的是,作为技术人员,不妨多动些脑筋,想想如何依靠技术解决更广泛的问题。譬如Wordpress的维护,我之前也饱受折磨,某天终于发现,PHP可以直接调shell,shell里面又可以直接调mysqldump——这样,只要简单几个Web页面,就可以完成wordpress的升级、文件备份、数据库备份和恢复,再通过Cron,就实现了blog的定期备份和日常维护,从此高枕无忧。

技术的力量,其实无所不在。

俗话说“无巧不成书”,还真是这样。上周末的“巧”,就是RSS:周六跟抓虾的朋友们聚餐,周日下午Beta技术沙龙的主题就是“网易有道RSS阅读器”。

Beta技术沙龙在詹膑老师的“奇遇花园咖啡馆”举行。在车水马龙的西直门,能找到这样一个安静的地方,实属不易(当然也很难找,我们开玩笑说还应该开一家“齐秦菜园餐馆”)。装修也别有味道:明亮的落地窗,颀长的红色窗帘,极高的天花板……第一次去的时候,我瞥见高架上堆放着一排白色的书:“看那样子,应该是川端康成的《雪国》和《伊豆的舞女》吧?”,詹老师微笑颔首。

“有道”这个品牌,最早应该是作为博客搜索引擎出现的,07年末又诞生了有道阅读器。如今RSS在线阅读器日趋流行,有道赶上了好时候,又可借助网易的资源,相对其它一些阅读器,条件好得有点让人嫉妒,但是能在一年多的时间里做到今天这样的程度,也确实下了不少工夫。此次来的三位嘉宾,胡琛、王焱和刘懿,分别从运营、技术和产品三方面介绍了有道阅读器,包括遇到的问题,解决的办法,对未来的思考……看得出来,他们的准备非常认真仔细。
当然,既然名为“技术沙龙”,参与者最关心的,还是技术的方面:系统的架构是怎样的、采取了怎样的策略、出现问题如何解决……看他们的PPT,我最深刻的感觉是“天下大同”:各家的技术,或许细节上有所差异,但总的思路和方向,大抵不会相差太远。当然,最让我羡慕的还是他们可以使用网易的存储系统,轻松备份超过20T的数据,高枕无忧,这太让人嫉妒了(曾经有天晚上,我因为太困误删了极为重要的用户数据。当时已经十一点半,就准备休息了,结果惊出一身冷汗。而且之前没有及时备份,所以只能想法从四处导出数据“拼”回来,折腾到四点才算写完恢复程序,让它正常运行,第二天总算没让用户发现,那次事故印象太深刻了)。

整个沙龙的气氛轻松而随意。主题演讲结束之后,主持人说:“下面大家自由开小会吧”,于是会场瞬间热闹起来。坊间传言:“沙龙的成功程度,取决于小会的热闹程度”,这样看来,沙龙是很成功了。

这次活动还有点小意外——有位素不相识的朋友(原来是Robin)很意外“没想到《精通正则表达式》的译者也在场”。是的,我们都没想到,这倒正合咖啡馆的名字:奇遇花园。

现场图片(如果这是一张世界地图,我就在新西兰的位置:))

某次跟一位北京土著“湖南女婿”聊天,他提到“以前在北京吃湘菜,只觉得湖南菜就是辣,这次来了湖南,才觉得湖南菜不是那样的,有种特别的香味在里面。”
我说,你触到了湘菜的真谛。

湘菜不光是辣,正如川菜不光是麻一样。多放辣椒就是“湘菜”,多放花椒红油就是“川菜”,只能说明厨艺拙劣。湘菜要做得地道,讲究还是很多的,譬如炒青菜,须得把水沥干,大火猛炒,迅速出锅,如此才有鲜爽的口感,水稍多一点、时间稍长一点就成了煮菜,味道相差甚远;腊肉也最好是带皮的,肥瘦相间,肥肉多一些更好,切成稍厚的条,蒸出锅就直接上桌,而绝不应当是普通餐馆里那种“橡皮泥”的样子……

北京的湘菜馆众多,但我印象最深刻的有三家,下面一一介绍:

湘德楼

湘德楼在德外关厢,临街的两层小楼,老板是长沙人,厨师也是长沙人,算的上“原汁原味”了。
有几个朋友非常喜欢这家的鱼头,火候把握很棒,确实很鲜美(推荐不点米饭,鱼头吃完点一份面,就着鱼头的汤汁,极其可口)。但说实话,“剁椒鱼头”算是湘菜,我还是2003年才知道的,现在它倒成了湘菜的代表了。其实湘菜除了剁椒鱼头,还有很多可口的,只是不为外人知晓。湘德楼做的大蒜叶炒黑木耳、青椒炒油渣、剁椒蒸芋头、白椒腊牛肉、香辣米豆腐,口味非常地道(或许不是大家印象里的“经典”湘菜,但确实具备湘菜的神韵),而且色、香、味俱全,更难得的是,许多“湘菜馆”根本吃不到这几样菜。有兴趣的朋友,不妨去尝一尝,绝对让你耳目一新。

潇湘味道

潇湘味道在东四四条,从西头进去大概30米就能看到,门口挂着一排灯笼,另有一块招牌是“虾酷:专业治虾”。
我之前并不知道这家馆子,第一次去,才听说许多名人都喜欢来这吃饭。门面很小,装修也简单,但是有雕花、青竹,冬天屋里还有火盆烧木炭,供人取暖,家乡的味道很浓。
这家的老板、老板娘也是株洲人,每次去都会打招呼,很热情。老板之前是株洲一家很有名气的宾馆的厨师,与如今的“新派”厨师相比,还延续了不少传统:譬如蛋卷(是蒸的,而不是炸的,如今基本没有厨师会做了),一定是要叫“头碗”的,因为照惯例,年夜饭的第一道菜就是蛋卷,所以得名。也正因为如此,这里还能吃到些“小吃”,譬如长沙著名的糖油粑粑,做得相当的正宗。我总以为,如今的厨师厨艺日渐精致,可是不少传统菜肴、小吃的做法和惯例,却毫无了解,这相当可惜。
除了口味,值得一提的是,潇湘味道用的餐具非常地道,上菜用的许多碗都是真正乡里用的碗,造型、花纹,都会带给你熟悉的气息——当然,这得有过经历的人才知道,这一点,也可以算作“吃文化”吧。

恰来恰克

懂行的人看到这个名字,往往会心一笑:在长(沙)株(洲)湘(潭)地区,吃、喝、抽等等一系列动作,说出来都是一个“呷”(发音是“恰”,第二声):呷饭、呷菜、呷烟、呷酒、呷好处……,所以“恰来恰克”,也就是“吃来吃去”的意思,但多出几分随意和亲切,招牌黄底色上歪歪扭扭的“恰来恰克”四个字,更加重了这种感觉。
恰来恰克位置很偏远,在北二外北校门附近,也是两层的小门面,老板也是株洲人,人称“灿哥”。灿哥自己介绍,在北京苦心寻觅,终于找到一个做米粉(是湖南米粉)的厂子,就把馆子开在了米粉厂附近。日常除了学生来解决吃饭问题外,不少都是湖南老乡,大老远跑过来,就为尝一尝米粉(而且是扁粉)。
除了米粉,这里的另一大特色是湖南火锅。湖南火锅与其它地方火锅不太一样,汤料是精心调制的,肉在下锅之前就是做熟的,而且会切得厚一些,下锅只是把鲜香的味道煮进去,吃这种火锅,热气腾腾、香气扑鼻,更美妙的是,越煮越入味,越到后来吃得越爽,那种感觉,完全不同于如今泛滥的“涮锅”——只可惜北京很难买到带皮的羊肉,也就无法体会从火锅里捞出一大块带皮羊肉,几口吞下的畅快淋漓了。