中午去哪儿吃

有许多个普通的工作日中午,午餐如当天的工作一样乏善可陈。公司周围餐厅吃遍,连那个号称员工福利但却死贵又味道奇差的单位饭堂,一个月内都已吃过三次。正午十二点前五分钟,双手离开键盘,眼光离开屏幕、看向窗外六月,多云见阵雨的天气,闷到令人绝望。更令人绝望的是那道难题:去哪儿吃?

黄子华用一整晚的栋笃笑(Stand-up Comedy)追问,「跟住去边度(接下来去哪儿)」,但「去哪儿吃」比「接下来去哪儿」更难回答。这道题之所以难,是因为,就像何勇在《钟鼓楼》中唱的那样,「到处全都是正确答案」。原盅蒸饭、烧味快餐、桂林米粉、兰州拉面、西日定食、沙县小吃、云南米线、苏州汤包……那么多种选择,我们却无所适从,思量费尽,吃得委委屈屈。

也不必执着,一天一个餐厅,轮着吃好了。无需个半月,你已吃无可吃。天知道那些窝家里以方便面和可乐度日的死宅男怎么活下来的,于你,有选择还是好过没选择,好过不选择。「有得选」,好像一道光芒照在身上,某种备受荣宠的幻觉,在正午前这五分钟,令你骄傲然后焦虑。看时钟如定时炸弹嘀嗒着,再强劲的冷气也没法让你冷静下来——中午去哪儿吃?!

此时你简直以为自己身处荒漠。阳光直射,无处躲藏。种种好吃的不好吃的,走马灯一般在脑中轮番出现,像戈壁上空盘旋的秃鹫,专等你体力耗尽躺倒在地的一刻,就俯冲直下,成就它们的一顿好饭。

「喂!吃不吃饭?」同事的呼喊将你从幻想中拉出来。「吃,」冲口而出,其实你并没觉得饿,冲口而出的不是需求,而是理智或惯性使然。中午,总得吃点什么吧,你这么想,吃一顿是一顿。

「不过,吃什么?」你问,并且等着看对方将如何踌躇。

「华记咯,有糖水送。」丫倒是刚毅果决,只噎得那无穷多种选择俱无处安放,教你于这六月多云见阵雨的闷热天气中,不见了自己。

首发于我创办的微信公众号「深夜谈吃」。

专访21世纪新媒体CTO韩磊:移动新媒介融合之道

如何应对来势汹汹的新媒介大潮,是每个传统媒体关乎存亡的重大命题。拥抱并主动变革似乎已是唯一选项,问题在于如何融合新媒介并建立成功有效的模式。

广东二十一世纪传媒股份有限公司(以下简称“21世纪传媒”)现已成为国内细分市场排名第一的专业财经商业类媒体运营企业,拥有《21世纪经济报道》、《21世纪商业评论》、《理财周报》、《福布斯中文版》、《环球企业家》等多个杂志或报纸的独家运营权,同时还与南方报业传媒集团旗下的《商务旅行》和《城市画报》建立了良好的运营合作关系。早在2007年,21世纪传媒就开始尝试各类非平面媒介的传播实践。2007年,独家经营中央人民广播电台经济之声;2008年,承“做读者的商业新闻首页”的理念推出21世纪网站;2009年,推出中国移动21财经彩信报和手机WAP网站。

随着3G和移动智能计算时代的到来,21世纪传媒旗下21世纪新媒体又于2010年初陆续推出基于iPhone、iPad和Android手机平台的移动媒体应用。截至发稿时,用户已逼近30万。相对于游戏或大众媒体应用,这个数字并不十分抢眼。但21世纪基于新媒体的探索已逐步形成一套成功的业务模式,创造出令人满意的效益。近日,《程序员》对21世纪新媒体CTO韩磊进行专访,了解21世纪传媒对移动媒介的思考和实践。

《程序员》:21世纪新媒体如何看待移动互联网的发展?

韩磊: 从媒体经营的眼光来看,智能移动客户端是非常有效的传播媒介。媒介的作用是让信息能够方便、快捷、低成本地生产、复制和传播,而移动媒体正好可以达到这个目的。我认为移动媒介给传统媒体带来的最大好处在于绕过发行渠道,直接和用户对话。

纸质媒体发行很麻烦,以《21世纪经济报道》为例,一份有几十上百版,携带不便,每篇文章都是独立的,也不方便网状阅读。它的发行是通过邮政和渠道商, 每天分发70多万份,整个过程相当复杂。原子的速度比不上比特的速度。如果用移动媒介来做,信息数字化后,发行会更有效,成本可以大幅节省。

21世纪传媒非常看好智能手机的发展。移动互联网是能看到的最具发展潜力的领域。报纸的未来可以预期,网站的未来也可以预期,但移动互联网的发展还有无穷变化,机会也就蕴含其中。从2007起我们就开始布局新媒介,在2009年末开始进行移动媒体方向的探索,至去年底,在iOS、Android、Symbian和BlackBerry 4个平台上共推出10个应用,当然重点放在iOS(包括iPhone/iPad端)和Android(即将支持Android平板)平台。

《程序员》:请简单介绍21世纪新媒体在移动媒介上的产品和成绩?

韩磊:目前,我们的应用主要有三类形态。第一种是财经资讯阅读器,在手机平台上表现为“传统”的列表式应用,而在平板上则表现为具备复杂排版能力的应用。第二种是财经音频内容。基于对财经题材和读者需求的理解,21新媒体以“电台应用”形式推出财经早8点、财经看点、冬吴相对论和高端访谈4个栏目,部分内容来自与中央人民广播电台的合作栏目,部分内容来自由21世纪传媒主办、承办的各类活动。最具原创性的是“财经早8点”,由专业人员播报经编辑人员精选制作的早晨财经新闻。第三种就是平面媒体的移动客户端,主要针对平板电脑。目前我们已为21世纪传媒旗下的《21世纪商业评论》,以及21世纪传媒的合作媒体《商务旅行》和《城市画报》开发出iPad应用。

从品牌的角度看,这10个应用又可归属于三个品牌。一是21世纪财经系列;二是21电台系列;第三个是面向海外发行的收费资讯应用Business China 。其中发行量最大的是21世纪财经系列。

值得一提的是在推出伊始,我们对手机阅读器的读者行为定位是“阅读”。推出后不久,我们发现,来自手机应用的文章读者评论,数量超过了来自网页的读者评论,而且评论质量普遍较高。

目前21世纪新媒体的移动应用在移动端已有近30万用户,今年我们的目标是一百万。一些运营商和手机厂商主动找到我们,要求预装。这从一个侧面反映出优质中文应用的发展速度跟不上智能手机普及速度的现状。

《程序员》:新媒介的发展对于传统媒体业务是否有影响?

韩磊:目前新媒介和传统媒体并无太大的冲突关系。我们认为纸媒在较长时间内仍有其存在价值,新媒介和传统媒体并不是非此即彼的替代关系。

一方面,越来越多的人使用手机来阅读资讯,但并不代表他们就不买报纸杂志了。例如我爱读的《南都周刊》,一般会买一份在家里看,在外出时通过iPad上的应用阅读。

另一方面,传统媒介媒体还抱有一些重要优势,例如品牌、读者、内容和广告客户的认同。我相信这些优势都不是传统媒体能够永远占据的。未来,品牌、读者、内容和广告投放都会从传统媒介逐渐迁移到新媒介,但迁移还需要经历一段也许是相当漫长的过程。

《程序员》:21世纪新媒体是如何融合移动新媒介并建立具有成效的业务模式的?

韩磊:从需求上说,对于传统媒体,广告客户看中的是品牌和影响力,但对于新媒介,客户一定要得到实际用户的反馈,对于用户数据包括基本资料和购买行为统计的要求越来越多,但我们不能直接将数据卖给客户,而是通过策划来让用户接受要推广的内容。

新媒体带来新的读者数据收集手段。符合某个具体属性的读者人群,可以清晰地按需呈现出来。数据挖掘提供了按地域、按行业、按职位、按年龄、按性别查找,让我们得以对读者进行足够的多维度细分,从而提供符合群体个性的内容和商业服务。

通过用户数据的收集、挖掘和管理,我们建立了拥有150万高端会员的21读者俱乐部,以前,报系面向读者的服务主要集中在财经资讯传播。现在基于新媒介,21读者俱乐部就可以结合读者的地域及兴趣属性,开展各类线上或线下活动。

以为某汽车厂商策划的一次活动为例。我们组织了多位知名经济学家在全国十几个城市做巡讲,定向邀请具有购买可能性的21读者俱乐部用户参加,在会议中穿插该品牌汽车的试驾活动。厂商反馈,销售效果远超商业意向更明确的试驾会。

值得说明的是,下载和使用我们的应用,并不会主动收集用户数据。用户数据主要是通过网站和活动注册来获得。这其实是一种正向循环,用户为了获取资讯和参加活动而注册,客户因为我们能邀请到目标用户而愿意支持,我们因为客户支持而能够为用户提供资讯和活动。商业信息和用户需要并不矛盾。

目前21世纪新媒介事业部共有50多人,其中研发人员只有三名。内容人员最多,他们负责网站和移动的内容制作,其次是数据部门,负责用户数据分析和商务运营。事业部去年的业务效益令人满意,未来集团将加大这个领域的投入。

《程序员》:下一步,21世纪新媒体在移动产品方面有何计划?

韩磊:除了现有程序的更新升级,我们还想尝试更具创新的应用形态,融合移动设备的感知能力和与云端连接的能力,推出更具互动性和视觉效果的应用。目前我们的产品只是做到了大家都做到的东西,没有独特的创新之处。

 

每个产品都要放在用户需求、客户的需求以及媒体价值的交集之下进行审视,回归到媒介的价值——让有价值的资讯快速、低成本地生产、复制、和大规模传播。用户的实时反馈将完全改变传统媒介的单向传播模式。动态结合云端数据与客户端的实时操作信息将有极大潜力可挖。

用户数据挖掘是我们今后的重要工作,但我认为移动还只是媒介,最关键是本身的业务模式很扎实,然后技术架构能够支撑这个模式,根据用户的需求勇于创新,这样才能在移动互联网大潮中立于不败之地。

《程序员》:对于其他媒体进军移动互联网,您有何经验分享?

韩磊:从21世纪新媒体的经验来看,主要有几点。

1. 战略还是跟风:一个媒体投入移动媒介开发,首先要从战略上考虑是否适合移动媒介?通过移动应用来达到什么目的?如果只是随大流将内容通过手机来发放,并没有太大意义。

2. 免费还是收费:21世纪新媒体的计划是免费并在很长时间内不考虑收费。这是基于现实市场和用户习惯的考量。

3. 外包还是自己研发:一开始可以投入少量资源做外包,越往后,移动媒介与业务结合得越紧密之时,自己组建研发团队恐怕是避免不了的。

移动领域已成为传统媒体的必争之地。可以不客气地说,传统媒体几乎全都错过了网站时代,但他们不会再错过移动互联时代。印刷媒介时代成就了华光等排版技术提供商,成就了发行渠道商⋯⋯移动互联时代会成就谁? 我想,程序员朋友不必一味盯着应用商店的模式。通过应用商店销售赚大钱的永远是少数。在传统媒体拥抱移动媒介的过程中,有许多机会可供挖掘。

 

 

改变世界vs娱乐自己

1983年,乔布斯找到时任百事可乐公司总裁约翰•史考利(John Scully),想请他担任苹果CEO。身为大公司总裁的史考利,自然是看不上刚崭露头角的苹果公司。情急之下,乔布斯问史考利:你是想终此余生卖糖水呢,还是改变世界?史考利深为感动,决定到苹果任职。史考利治下的苹果公司过了四年好日子,随后就江河日下。直至董事会请回乔布斯,这才挽回颓势。苹果有幸东山再起,另一些公司却难逃被收购甚至倒闭的命运。改变世界是每一位技术人员、每一家技术公司的梦想,它是那么宏伟绚丽,却只有少数幸运儿才能企及。

前一段时间,和一位在加拿大做组织行为学的博士生见面。他的专业方向是研究技术在取得市场成功的过程中被哪些因素所影响。这些因素,既与产品本身有关(例如,他的同学就在调研点评网页面上标签对用户的有用程度及反馈到营收上的效果),也与企业组织管理、政策、市场环境、用户心理等等因素有关。谈了一早上,术语满天飞,我就记住一点——技术改变世界,首先要推向世界,而这正是比成功技术本身更难的部分。

6月11、12日,CSDN和Digital River主办的中国软件全球营销论坛,在某种意义上,也是试图组织一次解决将软件技术推向世界的问题的讨论。深圳万兴、珠海斑点猫、超级兔子等等意识超前的公司,早已走出国门赚美元。你可以说他们做了许多同质化产品,但不可否认的是,来自中国大量同类型产品(如音视频转换、系统优化等)形成了一种潮水兵团般的市场力量。并非只有操作系统才能改变世界,当用户使用某个DVD翻录切割软件,对昂贵的DVD光盘开刀并传到网上与他人分享时,世界也在发生着急剧的改变。姑且不论法律上的种种约束,这种破坏力对世界的影响,不可估量。

不过,难道做技术就一定要存心改变世界吗?未必。有些伟大的产品,产生于娱乐自己的初衷。李纳斯在自传中宣称,Just For Fun,谁又能说他没成功呢?退许多步说,技术有时也能做到“纯娱乐”的境界。CSDN商城销售的一款T恤,图样是用Byte Syze语言打印出“Hello World”字样。我查了一下,Byte Syze是一种esoteric programming language(编程奥语),即不以生产软件为目的,纯为试验某个疯狂的想法、故意提高编程难度,甚至只是为讲笑而存在。以其意义论,我更愿意称之为“扯淡型编程语言”。这种类型的语言有大批拥趸,语言数量上百种。它对世界毫无生产力上的贡献,却深刻地揭示了技术人员亲近机器、疏远人类的专业特质,且具有一种对程序员宛若知音的幽默感。新加坡电影《说鸟语(Talking Bird)》描述了当地的语言混杂状况,而Talking Machine正是程序员的精彩写照。

世界就在那儿,你可以去改变它,也可以躺在草地上,喃喃自语一个算法的实现,享受这一刻与编程亲近的美好。改变世界,难道不是为了娱乐自己吗?

(刊登于2009年7月刊《程序员》杂志卷首语栏目)

daf2e93c57bb8ab8

墙在墙以外崩塌
一幅蛛网
牵挂不住的窥望

梦做了上去
字写了上去
血溅了上去


在墙以内崩塌

你在世界的什么位置?

余晟写了篇文章,记录参加一次技术聚会的经过。文中有现场相片一张,人头汹涌,图注:如果这是一张世界地图,我就在新西兰的位置:)

有趣的人才能写出有趣的文字。如果你拿一张透明的世界地图覆盖相片,那张向左侧过来的脸,还真是在新西兰的位置。

会心一笑之余,我问:在“这张”(中国通行的)世界地图上,你在新西兰位置,在“那张”地图上呢?比如——

换一张地图,相片上的人虽然没换座,却瞬间跑到印度洋上打海盗去了。人对世界的看法,深深地影响了对自己的定位与角色认同。

你在世界的什么位置呢?换张地图试试吧。

(2020年12月16日记:今天着手处理blog中图片因地址在flickr,墙内显示不出来的问题,才发现余晟原本写blog的网站已变成卖药的,图片当然也失效。万维网建于链接之上,一旦节点消失,许多内容就会跟着不见。徒呼奈何。)

我的工具观

据说,猩猩在变成人的过程中,直立行走和学会使用工具是两个关键点。工具之于人,其重要性毋庸置疑,但很多时候,本该帮助人提升效率和生产力的工具,却成了累赘。那个笑话怎么讲的?为了给牦牛剪毛,需要一把好剪子;为了磨剪子,需要一块好磨刀石;最好的磨刀石在北极圈内某个小岛上,所以还得置办一套狗拉雪橇……


现实永远比文学荒谬,现实也永远比笑话可笑。我曾经以为一部单反相机能让我更热爱摄影,现实却是因为它太重而出门基本不会想带上。我曾经以为开车能让我去更远的地方,现实却是买车之后更懒得出门了。唉,现实多残酷。


其实工具够用和自己习惯、能真正有效提升产能才是最好的,尤其是手边的工具。去年到今年,有几个计算机软件,极为有效地提升了我的工作效率。我知道,可能还会有“更好的”或是“更道德的(开源的?)”替代软件,不过,谁让我用惯了呢。


1、Microsoft Office 2007中的Word和Groove。Word新的工具栏排布方式很NB,大按钮和更有条理的归类用起来爽极了。比如,在“开始”工具栏组里,集成了和文本样式相关的按钮,这也是我最常用的工具栏组。在翻译《梦断代码》,Groove让我很方便地在数台工作计算机之间同步文稿,和责编的讨论也永久地保存了下来。做过书的人都知道,用email传输,实在是笨蛋而且不安全的做法。别提Subversion……我只是个作者,不想花时间去学习一套“版本控制系统”。最近我安装了Live Mesh,同步也很方便,只是缺少了协作的部分,只能是自己用了。


2、搜狗拼音输入法。我的计算机文字输入速度一向不慢,全拜读大学时用打字机复制了一本英文泛读教材所赐。我用过许多种中文输入法,最后还是落在搜狗输入法上。对我来说,它的几个特性很有用:同步词库,让我的几台计算机拥有同一个词库;难字笔画输入(先打u再顺序打笔画拼音首字母,如“壵”字,不知道怎么拼,就打uhshhsh——横竖横横竖横);细胞词库。


3、遨游浏览器。很多人问我为什么不用Firefox。其实我用Firefox,不过仅限于对网站产品进行验证和测试时。遨游的鼠标手势(在链接上按左键往右上方一拖一放,就在新标签中打开链接;以纯文本形式出现的链接,比如http://www.csdn.net,选中后一拖一放也能打开。)、同步收藏夹(again,我有好几台计算机,收藏不同步很痛苦)和截图功能(区域截图、全屏截图、整个页面——包括超出屏幕的部分——截图)对我来说就是金刚钻,爱死它们了!没错,Firefox上有插件,可我实在不想花时间去寻找和安装了。


4、Windows Live Writer。用上这个工具后,写blog时就能一稿多投啦。


使用这些工具,我的工作效率提升了30%以上。嗯,没错,这些都是Windows平台上的工具。先别开骂。我对任何公司和平台都没有成见,用它们,只是因为我习惯,而改变习惯是那么一种高成本的行为,高到我承受不起。另外,现在我用软件,都会遵循版权协议(不管是商业软件还是开源、自由软件),该买的就买。这不关有钱没钱的事,只是我认为这么做会让我更关注投入产出比,考虑清楚是否要把时间成本和金钱成本投入到一个新工具上面去。装工具,慎之又慎;用工具,唯恐不尽其极。以最小的投入,获得最大的产出。这就是我的工具观。

Flickr帮我卖相片

今天收到邮件,说我的一张相片入选Schmap的在线旧金山旅游指南(http://www.schmap.com/sanfrancisco/activities_fishermanswharf/#p=321456&i=321456_2.jpg)。这是我在网上卖出的第二张相片,前一张卖给了The Atlantic(《大西洋月刊》)杂志(创刊于19世纪,被誉为“美国的思想”)。Schmap是非盈利的,不付费;《大西洋月刊》支付了单次使用授权费150美元。从买30D到现在差不多两年时间,按了10000多次快门,传到flickr的也就2、3000张,其中相当部分还没有精挑细选过。这样都能被图片编辑看到和选中,不是因为我水平有多高,而是flickr的图片分享模式使然。

关于社会性网络或社会性网络应用的话题,业界有实践者也有理论家,困扰几乎所有人的问题是,这东西怎么挣钱,它怎么给社会创造商业价值。我现在不太喜欢谈理论、谈模式,但这两张相片的事情,却给了我极大的刺激:谁说社会性网络应用不能创造商业价值?

还是说在线图片交易市场吧。在国内(比如photocom)、外(比如getty)都有一些“权威、专业”的在线图片交易网站,据我所知,其中一些活得很不错。也有传统媒体进入这个行业,想要干一番事业的(比如《摄影之友》办的尚图)。相对于传统的图片交易手法,他们的进步之处在于数字化和网络化,而交易模式可以说几乎完全没有改变(仍然是代理中介模式)。以传统的眼光看,我这种3000张相片里面也许只能挑出1张可用图片的摄影爱好者,当然不是这些在线图片交易商的产品来源。他们的编辑成本太高,高到最好每一张上传图片都能卖掉。不要以为数字化和网络化降低了多少编辑成本,对于服务商来说,这些手段的削减的只是拆信封的成本,而这成本原来就很低;得到好处的是需要用图片的媒体,他们可以更方便地查找图片。

既然代理中介式的在线图片交易让需要用图片的媒体得到方便的好处,从而让他们愿意通过这些服务购买图片,那么,如果存在同样/更为方便的查找手段,而且价格更便宜,他们当然也会选择。在线图片交易服务商占据了网络时代的图片交易寡头垄断地位,他们标榜的“专业、优质”恰好也是阻碍更多优秀图片进入市场的篱笆墙。以我自己为例,《大西洋月刊》选中的相片曾经被尚图的编辑拒绝过;而photocom根本就拒绝我的注册申请。除了成本考虑之外,让少数“权威人士”判断内容优劣的手法也是问题。姑且不论这些在线图片交易商雇用的图片编辑水平到底有多高,是否真有能力判断一张图片是否可用;这种方式本身就不对头——眼光各各不同,媒体各有所爱,你看不中的东西,别人没准能看中。拒绝非专业摄影人员,等于拒绝更多销售图片的机会。可是,广开纳片之门,显然又会放任成本(技术成本和编辑成本)陡增到不可承受的水平。这是代理中介式在线图片交易商面临的问题。

Flickr没有编辑。每个用户是自己的编辑,上传相片、输入标签,这些本来就是用户的个体需求,同时也巧妙地为需要用相片的媒体铺设了查找通路。没有编辑就意味着没有编辑成本,意味着flickr把挑选图片的权利和义务一股脑抛给了需要用图片的媒体。到底是先筛选一遍好呢,还是让媒体编辑自己挑好,这个问题的回答见仁见智,所以也必然有媒体愿意看到更多图片(哪怕其中大部分会被在线图片交易商的编辑大爷们毙掉)。越来越多的媒体编辑到flickr上找图片(想想看,连《大西洋月刊》这种老牌杂志都来了),对于非专业摄影师而言,也就有更多可能让媒体看到自己的相片。专业摄影师毕竟是少数,如果说代理中介式的在线图片交易服务商是依20/80律做生意的话,flickr模式就是长尾的体现,只是这条长尾不光是消费者,同时也是供应商。

《大西洋月刊》告知我图片入选的当天,我就立刻续购了flickr一年期限的pro服务。如果每5年我能卖一张150美元的相片,就足够支付我的flickr pro帐号费用了。何乐而不为呢?代理中介式的在线图片交易服务商必将受到类似flickr这样的图片分享服务商的冲击,现在是他们想想怎么应对的时候了。

Dreaming in Code中文版第0章试读

0章:软件时间


那是1975年的冬天。我在终端机房中俯身敲击一台电传打字机,每打完一行,那笨重的机头就会摇头晃脑猛然撞回最左边,开始新的一行。我从几个小时前开始输入一行行黑代码[1],忘记了时间流逝,全然不知已是午夜时分。看门人已经关闭廊灯。我并没有得到许可在纽约大学物理系大楼中流连忘返、使用向高中学生免费发放的计算机账号。不过,倒也无人责难。


那时我年方十五,正迷恋于一个叫做Sumer的游戏,在游戏中,我管理着新月沃土[2]上一座古代城邦。今天的电脑游戏玩家也许会嘲笑其稚嫩:它在一卷纸上逐行打印出大写字母,报告游戏进程。玩家运筹帷幄,分配食用和留种的谷物,然后程序就会告知城邦每年的发展情况。“汉谟拉比陛下,”程序像一个诚惶诚恐的宰相般报告说,“微臣伏启圣鉴……”


没玩几天,我就已经把游戏彻头彻尾玩了个遍。但是,和现在令青少年着迷的大多数游戏不同,Sumer可以让玩家打补丁。谁都能够窥探其内部运行机制:该游戏只是向计算机发出的一系列简单指令,这些指令存储于一卷多行八孔纸带上。(电传打字机旁的塑料盘中堆积的纸带,几乎带来和游戏一样多的乐趣。)纸带像地下出版物一样在朋友间流传共享。只要花几个钟头学点简单的Basic语言,改游戏就会和玩游戏一样容易:将纸带上的指令装载到计算机,然后开始往程序里加代码。


Sumer是个空白画板——历史只是个轮廓,随时准备着让少年的梦想来浇筑。我和朋友们掌握了它简单的构造,开始往里加东西。让玩家可以选择不同的宗教信仰吧!偶尔来一次腺鼠疫,会发生什么事?蛮族入侵者应该很酷。嘿,搞几具弹石机如何?


那天晚上,我倾力于改造游戏中民众造反模式的设计。Sumer只提供粗糙的起义模式;如果你干得太差,人民就会起来推翻你。(Sumer的原作者是个乐天派。)我认为,游戏中的起义模式应该多种多样,所以就创建了一些子程序补丁——让Sumer陷入内战,或是引入一个要争取合法地位的反对派政府。


我不在乎干到多晚。F线地铁整夜运行,可以把我带回位于皇后大道的家。一定得重新设计游戏中的革命模式!


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


四分之一世纪后,2000年五月,我坐在旧金山的一间办公室里,眼睁睁紧盯着一台现代计算机屏幕(高解析度、数百万种颜色)。喝剩的咖啡纸杯胡乱摆在键盘边上。正是凌晨5点。


那时我四十岁,是在线杂志Salon的创始人和总编,此外还负责一个软件开发项目。我们花了几个月精心规划,希望给网站增加动态特性,使之彻底改观。然而,现在我却眼看着项目濒临绝境。


在没日没夜苦干了几个星期之后,主力程序员终于宣告工作完成,自己要飞往夏威夷,度一个全家盼望已久的假期。剩下他的老板,技术副总裁查德·迪克森(Chad Dickerson),独自琢磨为什么存储网站文章的数据库就是不肯与负责显示页面的程序对接。查德两个通宵没合眼,努力修复问题。若是不然,到周一早上,我们的两百万读者就只能看到网站上没更新过的旧闻了。


难道我们以前没做过软件吗?(做过。)是没有全面测试吗?(显然不太充分。)怎么会搞得一塌糊涂?(鬼晓得。)


我吃完了自动售货机里最后一袋饼干,徘徊又等待,却仍是毫无指望。时间还多。还有时间去读那位以新项目的名义准备香槟加蛋糕聚会的倒霉同事的邮件,回复他说:“或者咱们再等等吧。”还有时间去体会身陷困境孤立无援的感受,然后琢磨将系统的中心服务器命名为“卡夫卡”是不是个好主意。


大约早晨9点,我们终于发布了站点“改进版”的第一个版本。又是周一清晨,其他同事相继出现在办公室,他们过了好一会儿才意识到,我们六个人昨夜压根儿就没回家睡觉。


又过了几星期,程序员们修复了最严重的问题,软件运行趋于平静。但后来每当我听说某公司打算“升级其软件平台”、重新搭建一套大型系统时,我总不免暗自担心。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


二十世纪九十年代科技行业的兴盛,给我们带来了“互联网时间”的概念。对该短语含义的理解见仁见智,但多指“快速”之意。数字时代的新时间机制下,一切皆有可能发生——技术产生、公司创立、创造财富——而且速度惊人。这意味着你没时间做到尽善尽美——无须担心,因为别人也一样。


随着投资潮退,“互联网时间”这个短语也风头尽失,很快被其他时髦词所代替。但新词掮客们的确一语中的。在做软件的过程当中,时间似乎确实时快时慢。如果一切顺利,你会沉浸在心理学家称之为“流逝”的状态中,全然忘记了时间。如果事有不谐,你又会陷入困境,四顾茫然、举步维艰。无论是哪种情况,时钟都被抛诸脑后。你用的是软件时间。


 


***********************************************************


 


在使用一门新编程语言时,程序员的第一个程序通常是“Hello World”——输入一系列代码,召唤计算机,命令它打印出这两个词,向主人致敬。在Sumer游戏所用的Basic语言中,这个程序像这样:


10 PRINT “HELLO WORLD!”


20 STOP


“Hello World”程序一无所用,但足可蛊惑人心;它鼓励新手,唤起每个程序员心中乐观的一面。“既然能叫它说话,就能让它做任何事!”计算机协会(The Association for Computing Machinery),计算机领域中的ABA[3]或AMA[4],维护了一张网页,上面列出将近两百种编程语言版本的“Hello World”程序。简直就是程序代码的罗塞塔石碑[5]。


在Java这种商业世界中流行的重量级编程语言里面,“Hello World”看起来高不可攀:


class HelloWorld {


public static void main (String args[]){


System.out.println(“Hello World!”);


}


}


Public static void:无数个Java程序代码块中,都有这串密语存在。这串词有特别的技术含义。不过我常常把它看作一首机器诗篇,在它召唤出的冷宫里面,多少软件项目一开始雄心勃勃,最终却未结善果。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


如果你和计算机编程打过交道,就很难不对它又爱又恨。作为少年游戏玩家,我品味过编写代码的巨大快乐。作为媒体工作者,我见证了软件世界中无数个悲惨故事——无论是跨国公司、政府机构,还是军工大鳄,都曾一头撞上过代码的冰山。而作为一个经理人,我又得对付自己的泰坦尼克号。


这二十五年令人气馁的软件历史,也许不具代表性,但却是我的个人经验。依照硅谷的数字乌托邦理想,事情理应朝好的方向发展。在Salon网站发布失败后的几个月里,理想与现实之间的差异开始对我露出了利齿獠牙。


编程已不再处于萌芽期。我们的世界依赖于无穷复杂的软件。在长达半个世纪的研究和实践之后,为什么还是很难做到按时限、按预算做出计算机软件?为什么还是很难让软件可靠而安全?为什么还是很难把软件做得易于学习使用,且具备按需修改的灵活性?这只跟时间和经验有关吗?是否有出现某种根本性突破的可能?在软件的本质特性(抽象性、复杂性及延展性)上,是否存在某种总能打倒我们的无常之物,将开发者咒入充满不可挽回的延误和根深蒂固的缺陷的世界?


“软件难做,”编程界经典教科书的作者高德纳(Donald Knuth)这样写道。但原因何在?


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


你可能已经注意到,我把本章标为“第0章”。我无意搞笑,只是想指出计算机程序员和其他人的一处小小不同:程序员从0开始计数,而不是从1开始。要解释这种习惯的来源,得从计算机中央处理单元里的寄存器,以及数据队列的结构等等奥义秘辛说起。不过,我发现最直截了当的解释来自于一个网页,该网页试图向大众解释黑客的行为——“黑客”一词的本义是“痴迷的编程匠人”,而非后来衍化出的贬义“数码入侵艺术家”。


为什么程序员要从0开始计数?因为计算机从0开始计数!所以,程序员也训练自己这样计数,以免让他们要指示操作的计算机产生误解。这本也无伤大雅,只是使用计算机的大多数人是从1开始计数,未免令人烦恼。往下到系统层面,在这个层面上,数据被存储和操作——意味着我们的金钱、工作和设想被转换为机器可读的符号——计算机程序及编程语言经常会做小小的偏移操作,即“+1”或“-1”,使得计算机从0开始计数的列表与人类从1开始计数的列表保持同步。


在计算机的二进制数字世界里,所有的信息都被简化为0和1的序列。但是,在0和1 之间有空间存在,在机器计数和思考的方式和人类计数和思考的方式之间也有空间存在。当你寻找软件缺陷、延误和不按设计思路运行的原因时,那原因就藏身于这空间之中。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


在构思本书的那段时间里,我每天要驾车从旧金山海湾大桥(Bay Bridge)上通过。一天早晨,当我的车努力爬上连接奥克兰(Oakland)岸边和桥东段中心较高地带的长长引桥时,我发现,右边有个新物体挡住了海湾碧水和远山绿树:那是一台高耸的红色起重机的顶端,正好超出桥面。它在那儿日复一日地矗立着,突然有一天,又多了12台起重机,在桥北一线齐齐排列,如同挤在食槽旁的机械怪兽,等着倒霉的上班人士送进嘴来。


这工程是要替换双层大桥的北半部分。在1989年的Loma Prieta大地震时,该部分上层一段五十英尺长的桥面坍塌到下层的车行道上。现在,将在旧桥旁边搭建一座更安全、更现代的新桥。


随后几个月,这些240英尺高的起重机,开始将一根根直径达8英尺、长达300英尺的锈钢管打进海湾水底。在清晨时分,从我远在伯克利(Berkeley)山的家中都可以听到敲击声。总共将会有160根这种大管子被打入海底,填上混凝土,支撑新桥的水上部分。整个过程设计精密、执行无误;它分毫不差,完全满足了我们对工程一词的信心。


关于软件缺陷的话题,只要谈上几分钟,必会有人拍案叹道,“为什么就是不能像造桥那样造软件?”


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


和摩天大楼、水坝等永久性建筑一样,桥梁体现了人类对物理世界的技术把握。在过去半个世纪里,软件成为构建这个世界的虽不可见但却深入渗透的人造物。“人类文明运行于软件之上,”广为应用的计算机语言C++发明人比昂纳·斯卓思柯普(Bjarne Stroustrup)这样说道。


初听起来,这像是奇谈怪论或是自卖自夸。即便没有Microsoft Windows,人类文明也会同样延续,对吧?然而,软件并不只是用来发电子邮件或写报告的程序那么简单;它已经不声不响地渗透到生活的每个角落。它存在于厨具里、汽车中、玩具里,建筑中。商业和银行、选举和新闻媒体、电影和交通网、医疗和国防、科研和基础公共服务——人类生存之所需都系于计算机代码这根易断的细线上。


而且我们要为其脆弱付账。根据国家标准和技术学会(National Institute of Standards and Technology )2002年的研究,软件错误每年造成美国595亿美元的经济损失,三分之二的项目明显延误或超出预算,甚至干脆无疾而终。


人类文明运行于软件之上。但是,软件创建艺术却隐于暗处,即便对于专家们也是如此。在历史上,我们从未如此地完全依赖于这样一种人类自己不知道怎么才做得好的产品。在对软件系统的加速依赖和踱着方步学习怎么做好软件之间,有一条巨大且有时叫人恐惧的壕沟。对软件的依赖以指数级增长,而做软件的技能——和应用技能的愿望——却进展缓慢。


你要和程序员说这些,就等着挨批吧。这边厢,有人也许会说,世界从未如此光明:我们拥有了比以往更好的工具、更好的测试、更好的语言,还有更好的方法!那边厢,你又听人家说,自计算机时代的黎明以来,其实并未取得多少进展。计算机先驱莫瑞斯·威尔克斯(Maurice Wilkes)[ 6 ]回忆起1949年他在英国剑桥的情形,在拖着打孔纸带上楼给雏形计算机EDASC装载程序时,他看到了未来:“我强烈地意识到,生命中剩下的好日子,都将耗费在给自己的程序找错误上头。”从威尔克斯的时代直到现在,尽管有那许多创新,程序员却一直陷于调试除错之苦境。工作中只有百分之一的灵感迸发,剩下的是艰难寻找、汗湿重衣;他们的作品永远尚未完成或不够完美,区别仅仅是“问题更少”的程度不同罢了。


 


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 


软件就是麻烦一堆。而且我们不能够也不愿意把电脑一关走为上计。给我们带来挫败和束缚的软件,也用更多功能、更快更好的工作与生活方式来引诱我们。无路可回。我们对软件的需要,远甚于对它的仇恨。


所以我们梦想着得到更新更好的东西。在现代软件研究领域多有建树的专家弗里德里克·布鲁克斯(Frederick Brooks)在1987年写了一篇题为《没有银弹(No Silver Bullet)》的著名论文。布鲁克斯在论文中称,无论编写计算机程序是如何地令我们倍感挫败,也永远无法找到一种魔法般的突破——我们只能期待渐次前行。布鲁克斯的观点难以辩驳,但也难以接受;参加计算机业界的一些会议,或是浏览程序员网站时,你总会遇到一些坚称其错的人。


有些人梦想炸毁今天的整座软件大厦,替以某种全新之物。有些人则只一味盼望找到不太顽固、更能响应人类愿望和行为流程的程序员,盼望能得到召之即来、挥之即去的软件,盼望得到足堪依赖的代码。


We dream of it, then we try to write it — and all hell breaks loose.


梦之所寄,行之所为——地狱之门就此洞开。



[1] Black code,指原来程序逻辑中没有的部分,采用类似侵入的手段加进去的代码。


[2] 新月沃土系自中东两河流域及附近一连串肥沃的土地。包括今日的以色列、西岸、黎巴嫩、约旦部分地区、叙利亚,以及伊拉克和土耳其的东南部。由于在地图上形似一弯新月,所以美国芝加哥大学的考古学家詹姆士·布雷斯特德(James Henry Breasted)把这一大片肥美的土地称为“新月沃土”。


[3] American Bankers Association,美国银行家协会


[4] American Medical Association,美国医药协会


[5] Rosetta Stone,1799年法国士兵在埃及发掘出来的象形字黑石碑。也是美国著名的外语教程品牌。


[ 6 ] 1967年图灵奖获得者,他领导建造的拥有内存储程序的计算机EDASC于1949开始运行。


本书将由电子工业出版社近期推出,敬请留意。

代码,梦

今天下午19:00,翻译完Dreaming in Code最后的《结语》部分,这本书算是基本完成了。说来惭愧,去年初接下这个任务时,满以为顶多半年足可交稿。真正开始翻译时,才知道自己低估了任务难度。作者Scott Rosenberg是在线杂志Salon.com的主编,笔下极尽引经据典、推敲字句之能事,夹叙夹议,奇闻轶事和以精论妙谈,300来页一本书,触及软件开发中多个根本大题目,叫人看得心惊肉跳之余,又不由得掩卷长叹。


《大褂还是内裤》一文中,我简单提到Mitch Kapor和Chandler项目。Dreaming in Code在“叙”的部分就是写这个项目的。本书的副标题很长,也很吸引人:Two dozen programmers, three years, 4,732 bugs, and one quest for transcendent software(两打程序员,三年,4,732个缺陷,只为打造卓越软件)。Mitch Kapor和他的程序员们曾经打造过最伟大的软件,现在他们有了近乎奢侈的资源,为了“用代码改变世界”的梦想,共襄盛举。可惜他们遇到了“软件时间”的黑洞,从2001年开始,泥足深陷、举步维艰。Scott Rosenberg从项目一开始就贴身跟踪,记录下Chandler项目开发过程中的点点滴滴。


如果本书仅及于此,就不过是一篇尚可一观的“报告文学”。幸好Scott Rosenberg的主要目标是揭示软件开发中的普遍问题:为什么做软件这么难。在描写Chandler项目进展的段落之间,温伯格、布鲁克斯等大师级研究者,Linus Torvalds和Joel等实践者纷纷“出来”现身说法,还有来自各机构、媒体、作者的大量资料,从“软件时间”入手,兼及各种方法论、积木式编程、软件设计、项目管理,所有这些都是最后一个大话题的铺垫。在《结语》部分,Scott Rosenberg提出了这个大话题:人工智能有没有可能超越人类?在这个问题上,Mitch Kapor打了个20,000美金的大赌。他打赌,到2029年为止,都不可能造出能通过图灵测试的机器。


Mitch Kapor绝非悲观主义者。他本人和整个OSAF团队做梦都想通过软件系统“改变世界”。改变世界的梦想鼓舞过无数程序员,然而最初却不是对程序员说的。在Dreaming in Code书中提到这么一桩轶事:当年Steve Jobs(就是Apple的乔布斯大爷啦)想要说服百事的CEO John Sculley加入Apple,就对John Sculley说,你是想终己余生“卖甜水”呢还是过来造计算机、改变这世界?不过John Sculley加入Apple后不久,就联合董事会把Jobs赶出了公司。


过去几十年以来,计算机软、硬件制造者们一直以他们的努力推动这世界。而他们的每一分努力,因为halting problem(停机问题)的缘故,都注定是未完成的任务。他们是在挑战智慧和精神力的极限,简直是“逆天而为”——所以也难免要遇到软件生而固有的困难。


Dreaming in Code以一个具体项目的进程为例,列出了这些普遍存在而又近乎无法解决的困难。有趣都是,在翻译本书的过程中,每每与朋友聊天,他们提出的一些问题,在书中也都涉及。这本书很快就要出版了,到时一人送一本,他们是软件实践者,看后应该会比我更有感触和启发吧。

大褂还是内裤

有个相声说,某人买了一丈布,要找裁缝做大褂。其妻自告奋勇,称自己也会做,就接手做了。两个月后问她,说做是做,只是把布剪坏啦,改做小褂吧。如此循环,从大褂变成小褂,小褂变成肚兜,肚兜变成内裤,内裤变成口罩,最后只好扎了墩布。

闲话表过,再表闲话。

话说Mitch Kapor以数十亿美金高价把一手创建的Lotus公司卖给IBM后,做了一段投资人,又回归技术界,创立一家开源基金会。为了实现心目中“最好的PIM软件(个人信息管理,类似Outlook那样的)”,投入百万美元,聘请了一群最NB的程序员(包括Netscape元老级程序员、Macintosh操作系统核心程序员、微软资深开发工程师……),动手开干。有近乎奢侈的资源(财力、人力、时间),照说项目应该顺利进行吧。其实不然。这个名为Chandler的项目,从2000年开始立项,开发过程中软件功能列表一再缩减,直至今日尚未推出1.0正式版本。测试版本在我的Windows 2003操作系统上,仍然无法运行。

看过上面两桩闲话,读者大概知道我想说什么了。雄伟的愿景往往流于空想,做软件难,第一难就在于蓝图太宏大。常有朋友找我帮他们做顾问,看看他们的软件/网站项目。通常的过程会是这样——

 

(演示、讲解项目目标、功能等等)

我:请问,这是你们真正想要的东西吗?

对方:是,我们想做最好的xxx。

我:请问,你们打算花多长时间来做这个项目呢?

对方:三个月。

我:坦率地说,你们不可能做得到。我的建议是,把刚才说的功能先砍掉一半,再砍掉三分之二,剩下的部分,大概就是三个月之内你们能完成的部分了。

对方:……

 

产品设计者往往会想得太多,把所有可能路径都设想在内。而开发者则往往会低估项目难度,做出太过乐观的判断。这样的结果就是,以为可以在过短时间内完成过于庞杂的功能。危害有二:其一,项目无限期延误;其二,功能不断缩减。六个月甚至一年之后,大褂没做成,千疮百孔内裤倒是有一条。与其如此,不如一开始就以内裤为目标好了。

昨天有人问我,为什么是“先砍一半再砍三分之二”而不是“砍掉六分之五”。我说的“砍”,不是简单按字母顺序嚓嚓嚓,而是一个讨论、思考的过程。第一步去除一半,第二步去除一半的三分之二。起初设想出那么多功能,肯定花了不少心血。现在要砍,每一项都显得那么宝贵而舍不得丢弃。反复斟酌、流泪放弃,最后剩下的,是软件/网站项目最最核心和关键的功能,也是以目前资源所能完成的工作。以后,再视运营情况加以增补。

我想,做其它事,或许也可以采用类似的方法吧。大褂还是内裤,这是一个难题。以我之愚鲁,大褂不敢妄想,甚至没准内裤也做不出来,那就踏踏实实、裁剪缝制一个真有用的口罩吧。