2010年3月16日星期二

MVP Summit 2010 Trip (CA)

跟张诚、马志文飞抵 San Francisco 以后,我父亲的朋友来机场接我们到酒店。我们住在 Hilton ,当初 bid 这个酒店是想看看五星级酒店如何,确实是 bid 到了很好的价格,但是网络、早餐都不免费。相比之下,之后住的那些三星四星酒店都有免费的网络和早餐。当晚安顿好之后,父亲的朋友开车带我们到 Bay Bridge 对面的 Oakland 吃晚餐──到美国之后的第一顿中餐,而且还有海鲜。之后回到 San Francisco ,游览了一下 San Francisco 的夜景。

DSC02810

第二天才是真正的 San Francisco 游览。我们去看了 China Town 那个「天下为公」的牌坊,这里所有的商店都有中文招牌,只要你懂粤语就能生存。我们去逛了著名的 City Lights Bookstore ,尽管里面的文学作品我们都看不懂,所以我只好买了一本 Lonely Planet Los Angeles Encounter Guide 。然后还去了 Lombard Street (九曲花街),可惜季节不对,看不到花。还好的是,尽管当天没有晒太阳的机会, Pier 39 的海豹们还是爬到木板上来了,让我们拍摄。

DSC02881DSC02960DSC02987

最后一个景点,当然也是最重要的,自然就是 Golden Gate Bridge 了。其实这不是一个景点,我们去了很多不同的观景地点,从不同角度拍摄了 Golden Gate Bridge 。至于哪个观景地点才是最好的,这个争论从来没有停止过。

DSC03018DSC03019DSC03049DSC03074DSC03079

第三天的行程是开车去 Monterey Bay 看 17 Mile Drive 。这是加州西海岸很漂亮的一段路,可惜去的路上一直阴天,到了之后稍微出来了一会儿阳光,接着又变成暴风雨了。这是我们第一天在美国租车,张诚作为司机就紧张得要死了,特别是迎着暴风雨开的那一段。

DSC03182DSC03192DSC03212DSC03215DSC03232DSC03280DSC03283

美国的 Freeway 都是限速 65mph (105kph) 的,天气晴朗的时候所有人都超速到 80mph (129kph) ,就算是暴风雨也能开到 60mph (97kph) 。相比起国内的高速,这样的速度是挺快的,不习惯美国开车方式的话,也是挺危险的。在国内,你胆小的话可以开慢一点,别人爱超你就让他超;在美国,汽车就如同轨道交通工具一样,所有车都走在自己的车道上,都按照一个速度来开,整条 Freeway 非常有秩序地流动,变道比较少发生。在国内,你要变道就先减速,因为大家觉得这样做比较安全;在美国,变道必须先打灯,确认有位置给你变道了,再加速然后变道。

为什么需要加速然后变道?设想一下,你要变道进入一条有轨电车车道,前后两辆有轨电车都开着 80mph ,你要如何才能插进去?为了保证后面那辆车不会撞上你,你的速度必须不低于 80mph 。如果慢了,你也不知道慢了多少,更不知道还差多少就会被后面车撞上;但如果快了,你是知道还差多少会撞上前面那辆车的,这个你可以控制,变道之后再把速度降下来。走在后面的车不是应该让前面的车吗?这是中国的法律。在美国,人家保持车道和保持速度就是没错的,你要变道,你就要小心。所以说,美国人守规矩,马路上没有轨道,但人们按照有轨道的方式来开车,轨道在人们心中。

晚上在 San Jose 一家叫 Pearl River Restaurant 的粤菜餐馆吃饭,味道还不错。随后在跟 Elliott Ng 吃早餐时,他说到一个观点:国内有很多人并不原意相信,美国的粤菜做得比北京要好,但这是事实,不相信的人只是没能在美国找到一家正中的粤菜餐厅而已。我非常认同这个观点,因为每一次我从北京跨越太平洋飞到美国,就饮食方面而言,都让我感觉到离家更近了。

DSC03303

为什么一个离家两万公里的地方比一个离家两千公里的地方更有家的感觉?或许这是文化上的差异吧。说不定,广东人当中愿意飘洋过海到美国的,比愿意到北京的还要多,而且这部分人比到北京的那部分人更有影响力。

第四天早上从 San Jose 开车出来,去跟 Elliott 吃早餐。这是我们第一次在没人带的情况下自己开车,导航全靠 Nuo Yan 借给我们的 GPS 。为了让张诚专心开车,所以就不用他和 GPS 直接交互了,我来负责操作 GPS 和将 GPS 的语音提示用中文转述一遍。即使是这样,我们还是绕了很多弯路,因为我们还不习惯 GPS 的导航方式。当 GPS 提示转弯的时候,我们往往会提前转了,或者来不及转了,于是又要绕回来。

DSC03309

吃完一顿正中的美式早餐后, Elliott 带我们去一家投资公司参观了一下他们的收藏品。我问 Elliott ,加州每天天气都那么好吗? Elliott 说,是的,基本上不用看天气预报,加州每天都会经历四季,但每天的天气都差不多。然后我又问,那为什么我们之前在华盛顿州就阳光灿烂,反而来到加州就遇上暴风雨了呢,这对这两个周来说都很反常啊。 Elliott 说,一定是我们把华盛顿州的坏天气带到加州来了。

随后 Elliott 因为有会议,而让我们自己去参观 Stanford ,于是我们就开车来到了 Stanford 。 我们在 Stanford 里面转了一圈,也不知道看什么,于是就开到 Stanford Shopping Center 停下来,找到有无线信号的地方,上网搜索 Stanford Visitor Center 的位置。接着开去 Stanford Visitor Center ,在 Visitor Center 前面的停车场绕了 20 分钟才搞明白什么车位是给访客的以及哪里有空余访客车位。在 Visitor Center 我们被告知, Golf Cart Tour 仅在提前预约的情况下才能参加,所以我只好就打电话找我在 Stanford 的同学,问他 Stanford 有什么好看的。他建议我们去看 Hoover Tower 和 Memorial Church ,顺便到 Alumni Cafe 吃饭。

DSC03347DSC03348DSC03351DSC03352DSC03355DSC03367DSC03368DSC03371DSC03373DSC03376DSC03381DSC03393DSC03396DSC03399DSC03411

晚上跟 Elliott 去参加 GSR Ventures 的一个新年聚会,由一群华裔投资者和创业者分享回中国投资创业的经验。说实在的,我过去对 entreprenuership 一直没什么兴趣,参加完这次聚会以后至少有那么一点点兴趣想要去了解了。在这里,我必须要感谢 Elliott 为我们提供这样一次机会,尽管后来 Elliott 在 Stanford 的课程我们没能参与旁听。

张诚在开了两天车后已经疲劳得要死了,而且我的 Stanford 同学向我介绍了加州有名的 In-N-Out Burger ,于是第五天起来后我们就来到一家 In-N-Out Burger 补充能量。据说 In-N-Out Burger 有 secret menu ,我们就问服务员 secret menu 是什么,然后被告知其实没有什么 secret menu ,只是有一些特殊的汉堡制作方法而已,例如说放 4 块牛肉加 4片芝士的 4 * 4 。我们三个人各自要了一份 4 * 4 的套餐,我很享受地吃完了,然后张诚和马志文吃了一半就饱得要吐了。

DSC03422

沿着 US-101 开车到 Santa Maria ,尽管无聊但很舒服。习惯了美国的 Freeway 之后,跑起来真的比中国的告诉公路要舒服──你固定车道固定速度巡航就是了,不会有人乱变道,你只要盯着自己车道前方的道路以及头顶的路牌就可以了。下午到达 Santa Maria 后,发现我们住的 motel 竟然还有游泳池,可惜这个季节不开放。晚上到 Ichiban Japanese Restaurant 吃寿司,发现店主一家原来是台湾人,见到有中国游客就特别热情。估计因为 Santa Maria 是小地方,很少有机会见到中国游客。

DSC03445

在 motel 睡了一觉以后,继续沿着 US-101 赶往 Los Angeles 。正如别人跟我们说的一样, Los Angeles 的司机素质比较低, Freeway 的状况跟国内高速类似,不是你守规矩就行了,你还要提防那些不守规矩的人。到达 Los Angeles 后,我们在把 Hollywood Boulevard 上的几个经典都看了一眼,也就回酒店去了。晚上张诚和马志文去看 NBA ,我自己宅在酒店上网,结果他们也只看了一般就因为无聊而回来了。

DSC03480DSC03485DSC03488DSC03492DSC03511

在美国最后完整的一天,我们安排给了 Universal Studio ,想着要花一天的时间来参观这个地方,结果大半天就搞掂了。 Universal Studio 里面的每一项游乐项目都很赞,让你觉得完全值回票价。在 Studio Tour 里面,你能看到很多著名电影当中的场景,而且电瓶车会停在这些场景旁边等候着特技的出现──在山谷里体验洪水从山上而来;在地铁隧道里体验大地震,迎面开来的地铁出轨,路面上的油罐车塌方掉到隧道里;在湖边体验大白鲨出没,即使点燃了码头上的油桶,大白鲨还是敢跃到水面上来。

DSC03560DSC03565DSC03576DSC03581DSC03589DSC03590DSC03593DSC03595DSC03608DSC03616DSC03619DSC03634DSC03636DSC03643DSC03669DSC03675DSC03676DSC03677

离开 Universal Studio 后,我们发现还有时间,于是想赶到 Santa Monica 看日落。可惜我们没有选择让 GPS 给出路线方案,只是朝着大致方向开,结果在绕来绕去的 Sunset Boulevard 上浪费了不少时间,最后赶到 Santa Monica 的时候太阳已经贴着地平线了。

DSC03693

最后一天,我们一早开车到机场,我搭上了回国的飞机,而张诚和马志文则等晚上的红眼航班飞往 New York City 。

2010年3月14日星期日

MVP Summit 2010 Trip (WA)

简单记录一下今年的 MVP Summit 之旅。上半部分是在华盛顿州的一个星期,下半部分是在加州的一个星期。

MVP Summit 期间,我住在 Bellevue 的 Westin 。第一天和第四天的会议在 Hyatt 举行,而第二天和第三天则在 Microsoft Campus 。经历了前年的「 too much salmon 」和去年的「 no salmon 」之后,今年三文鱼又被请回来了,而且是在第一天的 keynote 上── Toby 请来了 Pike Place Market 那一家著名的抛鱼档,让他们现场表演抛三文鱼。

DSC02732

接下来的欢迎晚宴上,有三文鱼扒,也有三文鱼寿司,这通常是整个 MVP Summit 期间吃得最好的一餐,因为大家都不赶时间,可以尽情交流。之后会议期间的餐饮尽管也不错,但更多地只是为了吃饭问题而已。最赞的是 Microsoft Campus 里面的冷柜,各种饮料都有,包括无糖的或者是无咖啡因的。

DSC02751

会议中间我抽空在 Microsoft Campus 里面走走,碰巧这两天还算有点阳光,感觉非常舒服──环境很好,人都很 nice 。当然, Microsoft Campus 如此之大,没有 shuttle 是不行的,所以如果要去一个稍微远一点的地方就需要找 shuttle 。在此也感谢马骐和 Darren ,开车带着我周围去。

DSC02789

说到周围去玩,就必须提及第一天去 Seattle Downtown 的行程。从 Bellevue 搭上大巴一小时候,就来到了熟悉的 Seattle Downtown ──因为之前两年的 MVP Summit 都住在这里,所以相对 Bellevue 来说显得更熟悉一些。在这里有 Pike Place Market ,而我每年来这里的主要原因就是到第一家 Starbucks 买一点纪念品。

DSC02685

Seattle 让我感到最不可思议的是,它在城市中心地下有一条快速公交隧道,而且是巴士与轻轨共用的。国内很多大城市都有快速公交系统,其实也就是一对公交专用车道,但我从来不觉得究竟有多快速。 Seattle 的快速公交隧道如同地铁一样,藏在城市中心区域的地底下,没有需要等候的十字路口,也不会堵车。

DSC02716

在华盛顿州前后总共停留了5天,有一些想去的地方没去成,例如说 Future of Flight ,在这里可以参观到 Boeing 的工厂以及飞机是如何组装出来的。明年以机会再来的话,一定要找机会去看看。 MVP Summit 结束之后,我和张诚、马志文飞往了阳光灿烂的加州,事实上等待我们的却是狂风暴雨。

2010年3月7日星期日

技术大会的时间安排

技术大会的时间安排其实是一场博弈。如果你问程序员,希望技术大会选择在星期几进行,他们一定会说是星期二、星期三、星期四。原因很简单,星期一往往是做本周计划用的,星期五往往是做本周总结用的,实际工作主要集中在中间三天。当然,经理绝对不会喜欢这样的时间安排,因为员工宝贵的工作时间都用于参会了。因此大会组织方一般会选择折衷方案,把会议放在星期四、星期五、星期六。

这又带来了一个新问题,星期六原本是休息日,程序员自然更倾向于休息而不是参会。如果星期四、星期五算是因公参会,星期六就算是因私参会了,除非公司原意把你星期六参会的时间算作加班。为此,大会组织方要给你一个充分的理由,让你因私也来参会。举例来说, Microsoft 的会议往往会把最重要的礼品留到最后一天下午发放,确保了程序员因私也乐意来参会。至于 SD2C 的做法就显得不够成熟了,第一天签到就把礼品都发出去了,星期六来的人就会少一些。

活动的组织是一门学问,不同的 stakeholder 看重不同的价值,如果不小心把哪个 stakeholder 的价值给忽略了,活动的效果就一定不好。

2010年2月6日星期六

Apple 谈论产品 vs Microsoft 谈论技术

看了一下 Jeff 的《李笑来激起千层浪,赵姐夫力拒众强敌》,回顾了一下之前 Twitter 上的讨论。我个人觉得, Apple 观点和 Microsoft 观点是不同的,所以才造成了如此之多的争论。很多人在使用 Microsoft 技术的同时,由于 Microsoft 铺天盖地的宣传信息,自然而然地也接纳了 Microsoft 观点。使用这种观点去跟持有 Apple 观点的人争论是没有意义的,因为大家根本就是站在不同的角度来看到同一个事物。

看看 Jeff 整理的对话记录,里面有多少 Microsoft 技术名词? .NET 、 COM 、 DDE 、 OLE 、 CLR 、MFC ……这就是 Microsoft 观点──我们每天都有众多的技术革新,通过这些技术革新让技术人员感受到震撼( Microsoft 在推 .NET 初期确实很喜欢用 ROCK 这个词)。当然, @virushuo@tinyfool 被震撼多了,就说自己被强奸了。就算是在博客园里,也每天有人抱怨 Microsoft 技术更新太快,没办法跟上技术革新的速度。这就是 Microsoft 观点,满眼都是技术名词,名词刷新速度越快,越 Microsoft 。

再看看对话记录里面有多少 Apple 的技术名词。能看到的也就是 Carbon 和 Cocoa 两个,连 Cocoa Touch 也不提。是因为大家觉得 Cocoa Touch 和 Cocoa 就是足够相似,所以在讨论 iPhone 时没必要提及 Cocoa Touch 吗?显然不是。你看 Microsoft ,除了炒作 .NET ,还炒作 .NET CF 、 .NET MF 。就凭这一点,你就能察觉到 Apple 观点是和 Microsoft 观点不同的。 Apple 观点并不看重技术名词。

那么 Apple 观点看重的是什么?我们可以来对比一下 WWDC 2009 KeynotePDC 2009 Keynote 。在看完 PDC Keynote 之后,我来问你一个问题:这段视频中的哪些信息给你留下了印象?可能你会说,有 Windows Azure ,有 Silverlight 4,等等一堆技术名词。那么我再问你: Silverlight 4 是什么啊?我想你会用更多的名词来解释它比 Silverlight 3 多了什么新增功能。回头来看看 WWDC Keynote ,给你留下印象的是什么。那可能是「 Safari 4 比 IE 8 快7.8倍」,以及 Grand Central Dispatch 。那么 Grand Central Dispatch 又是什么?它可以让应用程序更有效地利用线程,从而提高响应速度,不需要提及更多的技术细节就能把重点说清楚。

Apple 看重的是产品,特别是用户使用产品时的体验。幕后的技术?就跟爱一样,是做出来的,而不是说出来的。最近我读了一篇文章,叫做《 Revolution vs Evolution 》。文章里面说到,用户接触到的人机交互界面应该是 evolution 的,用户原有的使用习惯得到了保持,同时很多细微的地方又有所改进,而这些改进所依赖的正是背后技术的 revolution 。留意 WWDC 中关于 Snow Leopard 内置应用改进的部分,第一个提到的就是 Finder ,其中第一句话就是「我们都爱 Leopard 中的 Finder ,因此我们没有改变 Snow Leopard 中的 Finder ,至少用户界面没有发生变化」。然后才说到, Snow Leopard 中的 Finder 其实是基于 Cocoa 完全重写的,带来的好处包括「更快地绘制图标」、「更快地清空 Trash 」等等。 Finder 背后的技术由 Carbon 转变为 Cocoa ,这是 revolution ,而 Finder 用起来的感觉则只是 evolution 。

既然说到产品,我们再来对比一下 iPad 发布会Windows 7 发布会。在 iPad 发布会上, Steve Jobs 把 iPad 拿出来,然后坐在沙发上摆弄了12分钟。这12分钟里面,他没有介绍任何的新特性,只是把内置的应用逐一打开,使用一下,然后关掉。为什么他不需要介绍新特性?因为这里面根本就没有新特性,任何一个熟悉 Mac 或者 iPhone 的人都能轻易理解 iPad 的用户界面,这正好符合上面所说的「用户界面只能做 evolution 」。当然,这12分钟也不是白白浪费的, Steve Jobs 就是要让所有人看到,作为一个普通用户,使用 iPad 是多么流畅的一件事,常用的功能触手可及,无需进行任何学习。至于 Windows 7 的发布会?请问这里有多少人能够说出 Homegroup 跟一般 Windows 共享有什么区别的?我想没多少人能够说清楚,但 Microsoft 偏要为此创造出一个新名词,以及一种需要重新学习的交互方式。

Microsoft 不仅仅不断地为技术创造新名词,还不断地为产品创造新名词。有很多程序员都抱怨, .NET 3.5 带来一堆诸如 WPF 、 WCF 、 WF 的东西,根本没时间去学。我觉得这没什么好抱怨的,受害的又不仅仅是程序员,最终用户一样面对一堆搞不明白的新概念,例如我就不知道 Homegroup 有什么特别的。最终用户是上帝,犯错的当然不可能是最终用户。类推可得,程序员也没有犯错。在这个问题上,犯错的只可能是 Microsoft 了。

正是这两种观点之间的差异,使得持有 Microsoft 观点的程序员每天都在忙于追逐那些英文里叫做「 buzzword 」的东西,觉得弄懂了某个 buzzword 就是某种进步,而持有 Apple 观点的程序员则在围绕着产品谈论「 how does it look and feel 」。这让我想起了一幅漫画,说的是如何区分科学粉丝与科学家。同样是问「你记得住圆周率的多少位」,科学粉丝会说出一个很大的数字来,而科学家则会说他只记得住1位。或许我们应该思考一下,宣称自己懂得多少种技术,这到底有没有意义。

正所谓「每一个优雅的接口,背后都有一个龌龊的实现」。这个接口( Interface )可能是用户界面( UI )也可能是编程接口( API ),这不重要,重要的是它是否优雅,也就是 @xiaolai 所说的「表面功夫一定要做足」。至于背后的实现是否龌龊,这也不重要,重要的是它必须站在幕后。就算它比接口更优雅,它也不能跑到台前来喧宾夺主。该做的,老老实实地做了,没必要拿出来说;该说的,说到每一个人都心动了,但不一定去做。

2010年1月30日星期六

程序员的品味

上个月跟刘江以及一些《程序员》的热心作者读者吃了一顿饭,刘江让大家谈谈《程序员》的内容以及未来的方向。在激烈的讨论之后,我觉得我应该把自己的想法写下来,但那篇文章在我的草稿箱里躺了一个月了,就是无法结尾。

那篇文章想要表达的意思很简单,我认为《程序员》应该提供一流的阅读体验。至于作者和编辑手上的内容,就如同程序员手上的代码一样,都只是为了实现特定体验的手段而已。就拿《Avatar》来做例子吧,它的内容值多少钱?先别说它内容做得怎么样,就算做得再好,在中国消费者眼里也就值一张盗版光盘的价格。但是大家都原意花钱去电影院看《Avatar》,而且非 IMAX 不看,这说明大家花钱买的是体验,而非内容。

文章写到最后,我认为《程序员》的阅读体验相对于一般 IT 杂志而言,就应该如同 IMAX 跟家里电视机的区别一样大。价格不是问题,大家天天都在家里看电视也不是问题,只要体验是值回票价的,大家就原意排队买票看 IMAX 。然而为什么《程序员》应该去扮演 IT 杂志中 IMAX 的角色,为什么《程序员》就不能老老实实地做电视机,这个问题我无法解答,因此那篇文章也无法发布。

最近我重看了一次 Paul Graham 那篇《创造者的品味》,并且花了些时间去看原版。然后周末在 Open Party 上有和 Tin 聊了一下如何培养程序员的品味,我想我已经知道如何回答上面那个问题了。

什么构成品质

对于博客园这样的草根媒体来说,有高品质的博客,也有低品质的博客,这是可以容忍的。高品质的博客,说的不仅仅是文章内容质量好。就拿 Jeff 的博客来说,模板源自一个漂亮的 WordPress 模板,然后 Jeff 根据他的需求对细节作出了调整。 Jeff 还选择了一个视觉效果比较贴近 Visual Studio 的代码着色器,这使得代码块的整体视觉效果不会太糟糕。而且 Jeff 自己写的代码通常都很简介很清晰,这保证了他在文章中嵌入一些代码块后,可读性还是十分高的。此外,清晰的逻辑结构和小节的划分,使得读者能够快速跳扫描一遍文章,然后认真阅读自己想要深入理解的段落。

至于《程序员》,你随便找一本翻开,和屏幕上 Jeff 的博客对比一下,你可能会觉的 Jeff 的博客才是专业媒体。就拿版式来说,《程序员》和同等价位的时尚、美食、旅游杂志实在没得比。文章中内嵌大量的代码块,而且为了不破坏分栏结构,大多数原本一行的代码必须分作两行写,第二行还不能有缩进,因为缩进了可能就要分作三行写。至于插入 UML ,往往就意味着破坏分栏结构了,最终导致文字环绕的出现。我想任何一个看过《写给大家看的设计书》的人,都能指出这些版式设计的错误。

我知道作为一本程序员的杂志,插入代码和图表是必须的,就如同时尚杂志必须出现服饰、美食杂志必须出现食物、旅游杂志必须出现景点一样。区别在于,凡是出现在杂志上的服饰、食物、景点,展示的都是事物最美好最让人向往的一面,然而《程序员》杂志上的代码和图表并非如此,你看到这些代码后只会感到厌恶,并且心里想着,「我用 TextMate 随便打开一份我写下的代码都比你这要好看」。

说到品质,有一个对比效果非常强烈的例子,那就是2009年10月《时尚先生》上的 IT 企业家李开复,和2009年12月《程序员》上的 IT 民工李开复。我真的很想知道,如果把这两张照片剪下来,然后拿去小学做访谈,问小学生想要长大后成为这两个人当中的哪一个,最终的统计结果会是怎样的。这个统计的结果,或许可以通过类比猜出来。在《程序员》中找到《架构师接龙》这篇文章,把你大脑里对架构师的认识先抹掉,看着文章开头两位架构师的照片问自己一个问题,「我想要成为架构师吗?我想要成为这两个人当中的任何一个吗?」

选择符合自己审美观的事物,是人的天性。这种选择,同时也就是对品质的选择。这种审美观,源自长期的积累,就如同熟练的程序员能够无意识地一下子嗅出代码中坏味道,而无需刻意去思考「这段代码违反 DRY 原则了吗?」

品质影响品味

有人说,「北京有西直门换乘,就不可能有一流的设计师」。因为如果一位设计师每天都要经过西直门换乘,他就必须学会容忍别人的恶心设计,久而久之,他也就学会了忍自己的恶心设计。同样地,如果你每天看在线版的 MSDN ,你就会习惯了里面一些反模式的示例代码,习惯了这种满眼内容但就是找不到你所需信息的文档,习惯了 MSDN 网站打开的龟速。接下来,你就会觉得自己的代码偶尔反模式不是什么问题,自己的文档没人能读懂也不是什么问题,自己的 ASP.NET 网站比 MSDN 网站还慢更不是什么问题。

因此,品味是可以被引导的。你每天使用 Visual Studio 的体验(打开速度、键入代码便捷程度),查阅 MSDN 的体验(搜索多少次才能找到你要的信息),浏览技术博客的体验(文字是否容易理解、代码排版与着色是否易读)……这一切都会影响你的品味。在你写程序写文章时,你的大脑里会呈现出「一个优美的程序应该是这样子的」,或者是「一篇优美的文章应该是这样子的」。这个具体的想象,源自于你平时阅读到的程序和文章。正所谓「 Garbage in. Garbage out. 」,输入的品质决定了输出的品质。

程序员每天都要接触大量的信息源。聪明的程序员会选择那些高品质的信息源,同时避免在低品质的信息源上浪费时间。如果我从博客园首页打开一篇文章,然后看到作者在模板上乱改,例如插入拍得不怎么样的个人照片、消耗我 CPU 的 Flash 时钟等等影响视觉效果的东西,又或者是把 CSS 改得完全没有美感连裸奔都不如,我都不会再去看文章的具体内容,直接把窗口关掉。至于 CSDN 的博客,看到链接我就绕开了,因为我知道那个链接背后的页面有多恶心,右下角还一定会弹一个小窗口出来。这样做的原因很简单,如果你不在乎博客给人的第一印象如何,我不相信你对文章质量能有多在乎。

有品味才有品质

为什么有些杂志能够有如此高的品质,来迎合读者对品味的追求?我觉得这是因为那些杂志的背后有一群有品味的作者、摄影师、编辑……最最重要的是,有一位有品味的 CEO 。尽管我对杂志行业了解不多,但这个道理在软硬件行业是普遍存在的。

Jonathan Ive , Apple 负责工业设计的高级副总裁,在 Steve Jobs 回归 Apple 之后带领着设计团队创造了一系列突破性的产品,包括拯救了 Apple 的 iMac 、美国人手一部的 iPod 以及最近发布的 iPad 。那么在他加入 Apple 之后到 Steve Jobs 回归之前的这段时间里,他又做了什么呢?在这段时间里, Apple 一直在下滑, CEO 换了两任, Jonathan Ive 没能造出任何能拯救 Apple 的产品来。 Steve Jobs 和 Jonathan Ive ,谁的品味更重要一些?

有品质自然会有面包

我一直不明白,为什么博客园要把资源浪费在小组、问答、招聘这类项目上。在我看来,博客园有比这重要得多的问题有待解决。举个例子,文章编辑器和评论编辑器。尽管有不少人用 Windows Live Writer 之类的客户端,但编辑器依然显著地影响着作者和评论者的写作体验,而这个体验决定了最终的文章质量、评论质量。

为什么 Mac 软件的界面设计往往比 Windows 的要好?仅仅是因为 Apple 有 HIG (人机交互指引)吗?这是因为 Interface Builder 会引导你把控件放到符合 HIG 的位置上去。如果你把一个 Label 和一个 TextFiled 放到一行, Interface Builder 会提示你按照文本的基线对齐,而非按照控件边框对齐。回头看看 Visual Studio ,我相信不少人遇到过 LabelTextBox 难以对齐的问题,调来调去都不好看,最后索性就不调了。

写文章的人其实也会遇到同样的问题。谁不希望自己随手写出来的文章就很美观呢?但能够花时间去折腾模板和对每一篇文章进行细节调整的毕竟是少数人。这时候,编辑器能够达到什么样的品质,往往也就决定了文章和评论能够达到什么样的品质。

或许有人会说,问答很重要,因为工作上的问题解决不了我就会被炒掉。类似地,应该也有人会说,招聘很重要,如果连工作都找不到我哪里有闲情来写博客。这样的想法太过短视了。如果你有一个高品质的博客,你不可能没有好工作。不相信的话,你可以看看那些业界大牛的网站,有哪一个品质不高的?对自己的代码有什么样的品质要求,对自己的网站也就有什么样的品质要求。反过来,企业通过看网站的品质,也就能看出你的品质。

我知道,并不是每一个程序员都懂前端开发,也不是每一个程序员都懂视觉设计,但你必须意识到一点──那些大牛也不是天生下来就懂这些的,他们也必须经历学习的过程,只是他们为了把自己的网站做到符合自己的品味,不得不学习更多的知识而已。 Jeff 在做模板的时候,也问过我一些前端开发的问题,因此我觉得关键不在于你是否懂前端开发,而在于你是否真的想要把事情做好。(当然,你心目中「好」的定义由你的品味决定。)

对于网站和杂志来说,同样的道理是成立的。有些时候,不是覆盖越广的人群和满足越多的需求,就是越好的商业策划。如果能力有限,就用心做好一件事情。做到品质完全超越所有同行,钱自然会找上门来。

我最近读了一篇对 P1.cn 创始人王宇的采访。 P1.cn 是一个面向高消费人群的 SNS 。王宇说, P1.cn 用户的家庭月均收入为 ¥8000 ,开心的这数字是 ¥3000 ,人人的则是 ¥2000 , QQ 就更低了。尽管这是未经第三方证实的数据,但至少 P1.cn 上的广告能够说明问题──我想你不可能在 P1.cn 以外的 SNS 见到这些广告:轩尼诗的酒、佳能的数码单反、宾利的汽车……道理很简单,你去开心投放这类广告,回报率不可能高。

最后,用 Steve Jobs 的一句名言来结束这篇文章。在《 Macworld 》的 Mac 20周年采访中,记者问到了关于 Mac 市场份额的问题, Steve Jobs 的回答是:
Apple 的市场份额比宝马、奔驰或者保时捷在汽车市场中所占的份额都要大。成为数字领域的宝马或奔驰有什么不好的吗?

2010年1月29日星期五

能承载移动 Web 应用的唯一浏览器: Mobile Safari

最近拿 iPhone 、 Android 、 Windows Mobile 这三个平台上的内置浏览器来做了一番对比,结果是只有 iPhone 的 Mobile Safari 能够承载现代化的移动 Web 应用,其他移动浏览器的设计思路还停留在上个世纪──能看网页就行,不存在移动应用一说。

我用来做对比的平台是 iPhone 2.0 、 Android 2.0 、 Windows Mobile 6.5 。 iPhone 之所以选择 2.0 ,是因为 3.0 的浏览器跟 2.0 是一样的,尽管我的测试是在 3.0 上做的,但对 2.0 来说也是适用的。 Windows Mobile 6.5 则是在 Windows Mobile 系列中的唯一选择,因为只有它的浏览器是 IE6 内核的,再往前的 Windows Mobile 6.1 都是 IE4 内核的。

拖放

iPhone 对拖放的支持是完美的,使用 touch 系列事件监控触击及拖动,然后使用 preventDefault 禁用浏览器的默认行为(也就是拖动页面显示区域),这就搞掂了。

Android 也支持拖放,具体方案我没有研究过,估计是改用 mouse 系列事件监控触击及拖动,然后使用 preventDefault 禁用浏览器的默认行为。

Windows Mobile 让人很绝望,连拖放也不支持。估计因为这是一个对 IE6 的封装,封装的时候就把浏览器默认行为写死了,所以你不能够通过 mouse 事件监控到任何东西,也无法禁用浏览器默认行为。

手势

最简单的手势,就是通过两个手指靠进和远离来实现放大和缩小,如果这个手势都实现不了,别的手势也就不用测试了。

iPhone 对手势的支持也是完美的,你可以直接使用 gesture 系列事件监控手势操作,也可以用 touch 系列事件监控手势中每一个触点的活动。 preventDefault 同样可以禁用浏览器默认行为(也就是缩放页面显示区域)。

Android 的浏览器不支持多点触击,尽管 Android 的另一些内置应用是支持的,这估计是因为 Google 和 Apple 纠缠不清的多点触击专利官司。因此,如果你要在 Web 应用上支持缩放,就只能在界面上放两个按钮来实现了。

Window Mobile 就不用说了,你不能期望一个缩小版的 IE6 能做什么针对移动 Web 应用的优化。

定位

iPhone 可以使用 W3C 的 Geolocation API 进行定位,而且可以跟踪定位(也就是定位变化时通过事件调用你的函数)。

Android 内置的地图可以定位,但是浏览器就是不提供这个接口,这只能说 Android 就设计为不考虑移动 Web 应用。

Windows Mobile 在安装 Google Gears 后,理论上可以支持定位。这个 ActiveX 嘛,能让你扩展浏览器,实现任何其他浏览器上难以实现的东西。唯一的问题是,这会让人产生疑问──我到底是在 Web 应用开发还是在做客户端应用开发? Microsoft 背负了太多的历史包袱,使得开发者要从客户端应用开发转向 Web 应用开发也不容易。

绘图

iPhone 同时支持 SVG 和 Canvas 。如果你需要面向对象的图形组合方式,你可以选择 SVG 。如果你需要命令式(类似 GDI )的绘图接口,你可以选择 Canvas 。

Android 只支持 Canvas ,这能够满足大多数绘图需求,唯一的问题是你不能把已经绘制的形状如同对象般删除,需要的话只能全部重绘,这就是 Canvas 跟 SVG 在使用上的主要区别。

至于 Windows Mobile ,不仅仅 SVG 和 Canvas 这样的公开标准不支持,连 VML 这样的私有标准也不支持,基本上也就无法绘图了。

样式

iPhone 支持大部分的 CSS3 特性。这是因为 iPhone 1.0 并不支持客户端应用, Apple 为了让开发者能在 Web 上实现跟客户端应用一样的视觉效果, Mobile Safari 必须做到跟 Safari 一样,支持大多数的 CSS3 特性。

Android 支持的 CSS3 特性要少一些。尽管它的浏览器用的也是 Webkit 内核,但 Webkit 管的是布局而不是渲染,在样式渲染方面 Google 的实现总是比 Apple 要慢一步。

Windows Mobile 的话……跟一个 IE6 核心的浏览器讨论 CSS3 ,这不是纯粹浪费口水吗?

体验

上面列举了一大堆的功能,但这一切只是为了实现特定的体验,所以我们真正应该关注的是一款移动浏览器设计为满足怎样的体验目标。

iPhone 上的 Mobile Safari 拥有最高的体验目标设定。在 iPhone 1.0 的时候, Apple 禁止开发人员开发本地应用,只允许开发 Web 应用,因此 Apple 必须为开发人员提供最好的 Web 应用开发平台。

此外, Apple 拥有业界最好的 HIG (人机交互指引),对比之下 Microsoft 的 UX Guide 连 Windows Mobile 都覆盖不到,而 Android 的 UI Guildlines 则显得十分山寨。由于 Apple 鼓励开发者按照 HIG 进行 iPhone 应用程序的交互设计,所以 Mobile Safari 当初就设计为帮助开发者实践 HIG 。至于其他移动浏览器,它们的设计目标则简单得多──只要用户能够在上面流畅使用面向桌面设计的网站就可以了。

正是由于设计目标的差异,使得最终产出的产品存在着巨大的差异。只有 Mobile Safari 能够承载移动 Web 应用,其他移动浏览器只是桌面浏览器在移动设备上的延伸。

2009年12月20日星期日

如何购买 Amazon Kindle 书籍 (Updated)

之前写过一篇《如何购买 Amazon Kindle 书籍》,后来那篇文章成为了除首页外访问量最高的文章,这让我觉得非常奇怪——首页PV占全部PV的50%,而那一篇文章的PV比例竟然超过5%,同时其它文章的PV比例都低于2%——难道真的有那么多人搜索购买Kindle书的方法找到我的博客来?直到昨天,有人打电话来询问我购买Kindle书的方法(因为她看到我的文章然后找到我的电话),我才确信原来真的有那么多人需要这方面的信息。

其实现在在国内购买Kindle书已经很方便的,使用国内银行的信用卡就可以买,而且不需要经过Gift Card中转。如果你使用一个老的Amazon账号,里面关联过你的各种信用卡和地址信息,这有可能导致Amazon判断你不是指定区域的用户而不卖书给你。这时候你有两个选择:如果你愿意放弃你这个账号所有消费记录的话,你可以重新注册一个Amazon账号,然后就绑定一张国内银行卡,然后就可以正常通过1-click买书了。如果你不愿意放弃已有的账号,那么你可以尝试把上面关联过的各种信用卡和地址信息都删除,这也能让你通过Amazon的判断。

最后,我今年圣诞的最大消费竟然是购买各种打折电子书(不仅仅是Kindle的),看来这真的是一个很有潜力的事情哦!

看对的书 (Part 0 - 何谓对错)

在《老赵书托》里面,Jeff把人脑比喻为「寄存器」,而我则更倾向于把人脑比喻为「神经网络」。但是「神经网络」的定义本身就源自人脑啊,这不是循环引用了吗?其实我的意思是,我们应该参考训练神经网络的方式来优化人脑的思维方式。

我们都知道,训练神经网络应该用对的数据,这样才能让神经网络逼近于我们期望的行为模式。如果使用错的数据进行训练,结果将是不可预知的,而且往往意味着偏离我们期望的行为模式。基于同样的道理,书必须选择对的,因为读错书不仅仅浪费时间,还有副作用,比不读书还糟糕。基于这一点,我推荐的书都是观点导向型的,而非知识导向型的。尽管其中一部分可能也包含大量关于「怎么做」的知识,但是我看重的是「站在什么立场思考」的观点,因此后者才会是我推荐一本书的原因。

如果你关心的是「get the right thing」,你可以来看看我的推荐;如果你关心的是「get the thing right」,你可以去看看Jeff的推荐。当然,绝大多数人都会同时追求这两者,所以我并不反对把我们的推荐书籍混合起来看。但是我必须提醒你注意一件事情,不要尝试在一本观点导向型的书里面刻意寻找知识,这只会让你感到迷茫和挫败。很多观点导向型的书并不会告诉你具体「怎么做」,或者作者介绍的「怎么做」并不适合你的情况,因为书的重点在于「怎么思考」,你必须自行摸索适合你的「怎么做」。

最后,跟Jeff一样,我无法保证推荐的周期,也无法保证书的来源。我提供的只是观点,做法请自行摸索,或参考他人(如《老赵书托》中的最后一句注释)。

2009年12月15日星期二

China MVP Open Day 2009

又是一年一度的MVP Open Day,前年在三亚去年在北京,今年还在北京,明年能不能换个地方啊?我觉得两岸三地是个很好的主意,让我能认识到平时接触不到的港台MVP。不过,也请容我私下阴谋论一下,是不是好像TechEd裁减预算三场合办为一场那样,MVP Open Day也用两岸三地的预算合办了啊?

去MVP Open Day的路上,第一感觉是会务安排的失职(CSDN,又在说你呢!)——活动地点写的是「北京东方嘉宾国际酒店」,建议行车路线写的则是如何达到「东方太阳城」。说实在的,参会者谁知道「北京东方嘉宾国际酒店」就在「东方太阳城」里面呢,整份文档又没有提及过这个事情,行车路线描述得又非常不清晰。最搞笑的是,4条路线里面有3条都是到潮白河大桥后往南走的,这条路线非常饶,告诉人家走机场高速不就好了吗?之后从酒店往返微软利星行的大楼都是走机场高速嘛。

我到酒店check-in后,发现同房的衣明志已经到了,他刚刚去找吃的回来。接着我们就好好欣赏了一下酒店房间里的「开放式浴室」——把浴室和房间之间的窗户打开,浴缸基本上就贴着床了,非常有趣的设计,可惜当时忘记拍照留念了。之后就是聊天时间喇,尽管我想上网看看,但是发现酒店的网络用不了(第二天才明白到,酒店的网络必须狂刷DHCP,然后才可能分到一个IP)。

Day 1的开场keynote,感觉就是讲给新来的MVP听的,因为这部分keynote几乎每年一样(除非有人想要站出来提及一下那个敏感的$150问题)。下午我先回酒店睡了个觉,然后再跑出来听breakout session,尽管没有哪个题目是特别吸引我的,不过跟MVP参与session是和参加TechEd session不同的,因为大家提出的问题要更深入一下,而且speaker解答不了的问题或许别的MVP能解答。

跟speaker聊得比较好的一个session是Windows Home Server的那个。尽管session上演示的是Windows Home Server第一代产品,并且论存储跟Drobo没得比,论备份也跟Time Capsule没得比,不过如果价格能够降下来,功能更加模块化,我觉得还是有市场的。我相信现在有很多人买家用电脑已经不是为了买一部样样都不精的机器,他们要的是一个大容量存储器,或者是一个高清电影播放器,又或者是家庭网络服务器之类的。

相比之下,Day 2下午的MSPY见面会就惨烈得多咯——上次见面会提出的众多high priority需求都未能在Beta 2中实现,也不可能在MSPY 2010中加入,只可能等到下一个版本才能看到。举例来说,衣明志最看重的就是数据同步功能,不仅仅词库要能同步,调整后的词频也要同步。这个功能其它输入法都做了几年了,MSPY却说要下一个版本才能支持,这使得MSPY足足落后别人两个大版本啊。

From Day 2 Party of #mvpopenday

Day 1晚上有个名义上的party,不过party这个词本土化之后就成了「文艺晚会」,各位「被报名」的MVP上台唱歌,最终获得前三的三位MVP分别来自台湾、内地、香港。上台的港台MVP算是100%获奖的(因为港台分别只有一位MVP上台),这不是说评比顾及平均性什么的(因为我们的是外籍评为团),而是说港台MVP确实更懂得娱乐,看来内地忙于工作的MVP应该多多学习哦。

Day 2参观微软办公室,对于我们这些长期在北京的MVP来说就比较无聊喇,因为我们经常去,也没什么好参观的。比较有价值的是,在往返的大巴上跟香港的MVP聊聊天,顺便了解一下大家去Global Summit的意向。晚上的session我选择了王洪超讲的「面向技术人员的演讲技巧」,详情可以看我的另一篇文章

Day 3是最无聊的一天了,来参加颁奖的人本来就少,大家都自行去市区活动了,或者提前离开了。keynote讲的是Office的内容,对Developer MVP来说十分无趣。总体来说,今年的MVP Open Day是比去年要好的,包括在会务安排上(除了没提供详细路线这点外),还有两岸三地联合举办的做法。吃饭是的餐桌主要还是按专长和按地区来划分,希望以后能够再鼓励一下跨界的MVP交互。

最后,今年很高兴认识了WillMartin等港台MVP,跟张欣等MVP玩杀人也很开心(原来那么多MVP不懂玩杀人啊,搞得我很有优势呢),跟衣明志聊天则注定让我缺乏睡眠 @.@

2009年12月14日星期一

程序之外的事情 (Part 1 - Speech)

相信大家最近都看到了有一篇题为《程序员需要培养企业家式的能力》的热文吧。在我首次读到这篇文章时,我并不太同意文章开头的几段话——“程序员在公众面前讲话会脸红,不能很好地表现自己”,你开玩笑吧?在我熟悉的程序员当中,没几个是这样子的,我很喜欢跟他们聊各种各样的事情,从而获得更多有趣的观点,也激发自己的创意。后来想想,或许仅仅是我所在的圈子如此吧,我熟悉的都是那些拥有良好沟通能力的程序员。

还记得2007年第一次参加MVP Open Day的时候,我所认识的MVP不超过5个,看别人都是连任好几届互相认识好几年的老朋友了,在酒店大堂里一起聊天,我实在不知道怎么融入进去。随后在游泳池边的自助晚宴上,Bean对我说了这样一番话:
MVP主要包括三种人:搞线上活动的,例如写博客、回答问题;搞线下活动的,例如各地.NET俱乐部主席;还有就是企业中的职业讲师。其中第一种人很容易辨认出来,那些拿着一杯饮料一个人站在那儿的就是。


没错,我就是第一种人,生活在与世隔绝的校园里,天天上网写文章回答问题。站在游泳池的边上,看着别人都三五成群地在聊天,我知道如果没有Bean介绍我认识其它MVP的话,我也会拿着一杯饮料孤零零地一个人站在那里。我当时唯一的想法就是,我不要永远这样子下去,我需要作出改变。

后来,我成为了微软广州.NET俱乐部的讲师,到北京后又活跃于各种Ajax交流活动,再到今年成为TechEd的讲师,在这个过程当中有沟通技能的提升,但更多的是心态上的改变。我觉得,要跟陌生人说话并不是难事,我知道什么就说什么。如果是我说错了,我很欢迎别人指出来。如果双方立场不一样,而不存在绝对的对与错,那就互相包容好了。

在今年的MVP Open Day上,我参加了王洪超的一个session,题目是「面向技术人员的演讲技巧」。这个session提到了一些演讲方面经验与技巧,当然也鼓励现场的MVP们多进行演讲,并从中锻炼自己的自信心与沟通能力。到最后,现场的一位MVP提出了这样一个问题,他说他可以面对上千人做演讲,但在面对官员做演讲时仍然会感到紧张,并且觉得这是无法改变的。我跟他说,「你可以拥有一万个理由来解释为什么这对你来说是无法改变的,但关键问题其实在于你是否真的想要改变」。

是的,很多程序员总能列出一堆的理由来,说明为什么自己不适合学习或者不需要掌握某项与程序无关的技能,例如说演讲、英语、设计等等。但其实问题并没有那么复杂,你需要考虑的只是多学一项技能是否对你的职业发展更有利,只要你愿意,没什么是不能改变的。

「关键问题就在于你是否真的想要改变」——这是我必须放在这个文章系列首篇末尾的一句话。这是一个关于程序以外各项技能的文章系列,我们在这里不再讨论某个技术点应该如何设计与实现,我们所做的也就是分享一下学习某项技能过程当中的经历而已。如果你对这方面的话题感兴趣,可以留言分享你的经历,也欢迎订阅我的博客: