巴别塔上的雇工


四分法清理RSS Reader List
12月 14, 2008, 5:31 上午
Filed under: 技术体会

几年之前,总有人说“这是一个信息爆炸的时代”,但是并没有深刻体会,毕竟你不去找信息,信息也不会找上门。现在切身感觉到“信息爆炸”了,在Google Reader上订阅了太多RSS Feed,太多信息可以自己找上门来,未阅读的文章数永远都是+1000,似乎永远也看不完,是时候来清理一下我订阅的Feed List了。

使用四分法,按照内容很有用和不是很有用,更新频繁还是不频繁,可以将所有的Feed分为四类:

A. 内容很有用而且更新不频繁

B. 内容很有用但是更新频繁

C. 内容不是很有用但是更新不频繁

D. 内容不是很有用而且更新频繁

为了防止意外删除一些有价值的Feed,我还是用“宁可放过千个,不可错杀一人”的策略,从应该保留的A类开始。

A类Feed是很有用的,往往是著名专业人士的Blog,比如ScottGu的Blog,这样的Feed一定要保留,而且要优先阅读。为了保证这些Feed再忙也会看,我在Google Reader中加了一个新的Tag叫"Must-Read-ASAP",放在Subscriptions列表的第一位,这样每次上Google Reader都会优先看这些feed的内容。

image

B类也应该尽量保留,比如cnbeta.com的IT界新闻,一天可以推出上百个新闻内容,不可能每个都仔细看,但是每天花点时间过一遍可以了解一下业界消息,而且因为这是一个中文网站,发布的消息往往也是我感兴趣的,所以保留,当然,不用进Must-Read-ASAP。

C类这样的Feed,属于鸡肋,比如Dilbert漫画,有时间就看看,不看也没什么大不了的,因为更新不多,所以留着也没什么坏处,留着吧。

D类,内容特别多更新特别快,比如Yahoo! News这样的新闻性Feed,当初订阅是觉得图文并茂,但是实际上内容太多就毫无重点,我也几乎从来没有仔细看过,这种Feed是要删掉的,不然几个小时下来就会让未阅读文章超过1000。

这样筛选完以一轮之后,用壮士断腕的决心将所有未读过的内容改为“已读”,过了一晚上,未读内容恢复为大约500个,这还是太多,于是再重复上面的筛选步骤走一轮,现在一天要读的内容大约为200个左右,这对我还比较合适。

 

顺便说说四分法,这是常用的分类方法,比如时间管理(Time Management)上我们按照事情是否紧急是否重要来分成四种,优先做紧急而且重要的事情。

据说,德国元帅曼斯坦因曾用四分法选拔军事人才,他按照军人是否聪明是否苦干分为四种:

聪明的而且苦干的,提拔为中层军官,因为这样的人可以很好的完成指派的任务,不管任务有多困难。

不聪明的而且不苦干的,不用提拔,但是要保留住他们,因为大部分人都是这样的,要是得罪了他们就得罪了大多数,那样什么事情都干不了。

聪明的而且不苦干的,这样的人要把他们提拔成将军,因为他们不用自己去苦干,他们会用他们的领导力去让别人卖力干,自己就有足够的时间思考战略性问题。

最后一种,不聪明的而且苦干的,这种人该怎么处理?应该让他们赶紧卷铺盖滚蛋!因为不聪明的人不干活至少不会有害,而这种不聪明还要瞎干活的只会把大家都带向错误的方向,到头只会把集体都害了。

你想想,自己属于哪种人?



Google Chrome摘掉Beta的帽子
12月 13, 2008, 1:31 上午
Filed under: 技术体会

和在线产品(比如GMail)似乎漫无止境的Beta状态不同,Google只用了101天,就将浏览器Chrome摘掉了Beta的帽子,相对而言,可谓神速。

我不觉得这说明Google在Chrome的工程上做的比其他在线成品更好,这只是不同产品的开发策略的不同。GMail这样的在线产品,在Beta阶段,还是在不停的添加新的功能,我不知道Google确定何时GMail能够走出Beta的标准,但是这个标准肯定不是列出基本的email功能,做完这些基本功能就算正式版了;而Chrome不同,在Chrome的正式版中,我们看不到和101天之前第一次亮相相比更多的显眼功能,呼声很高的要求支持Add-On和Tool-bar的功能还是没有,能够在Mac和Linux上运行的Chrome也没有,所以我觉得Google只不过利用这三个月的反馈,将一些bug给fix了,而feature list没有变化。

Google为什么这么干?还是由市场决定的,Google的在线产品,如果上来就抢占很大的市场份额的,他们就不着急走出Beta状态,按照我之前对市场划分的戏评,在成熟和狭窄的市场,有竞争优势就是好办,Google在在线产品市场目前就有这样的优势。但是如果这个成熟或者狭窄的市场已经被别人占领了,那就要费点功夫了,浏览器市场目前还是Microsoft IE、Firefox和Safari前三,Chrome目前也就大约1%的份额,据说还有下降趋势,先别管什么原因,要扭转这种局势,branding是一定要打造好的,这时候要是还是始终beta版,给用户一种不可靠的感觉,毕竟浏览器是装在自己机器上的,所以Google在Chrome上没法采用以往的beta模式,在完成基本功能之后就正式发布了,当然,相信很快也会看到新的版本发布。



REST: PUT or POST
12月 11, 2008, 1:42 下午
Filed under: 技术体会

REST(Representational State Transfer)是网络服务接口的一种风格,并不是一个标准,就web service而言,REST要比SOAP(SOAP是标准,不是风格)轻量得多,容易得多。我记得我最初开始接触web service的时候,所有的材料上来就是一大堆的名词,SOAP, WSDL, bla~bla~,看得头都要大了,后来提出来的REST就容易理解得多,虽然目前SOAP在企业级的web service中还有一席之地,但是在公共的Internet上,不时REST的服务实在不好意思和人打招呼,我们经常可以看到评价某某服务是RESTful的,但是从来没有听说某某服务是SOAPful的 🙂

微软对REST的支持有点晚,自.NET3.5开始,WCF也可以提供RESTful接口。当然,REST不光限于web service,网页服务也可以RESTful,微软的ASP.NET MVC框架提供了直接的REST支持。

因为REST只是风格,不是标准,所以有的方面容易有误解,比如说创建和更新某个URI代表的资源的时候,是用HTTP的PUT还是POST命令。REST常用的四种HTTP命令,GET、DELETE、PUT和POST,对于GET和DELETE,一个是获取资源,一个是删除资源,没什么异议,问题是PUT和POST,两者都有更改指定URI的语义,那么,究竟是用哪一个呢?

有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都只看到了风格,争论起来也只是争论哪种风格更好,其实,用PUT还是POST,不是看这是创建还是更新资源的动作,这不是风格的问题,而是语义的问题。

REST是一种风格,但是还是依赖于HTTP协议,在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。

“Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.”

上面的话就是说,如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的。

举一个简单的例子,加入由一个博客系统提供一个Web API,模式是这样http://superblogging/blogs/post/{blog-name},很简单,将{blog-name}替换为我们的blog名字,往这个URI发送一个HTTP PUT或者POST请求,HTTP的body部分就是博文,这是一个很简单的REST API例子。我们应该用PUT方法还是POST方法?取决于这个REST服务的行为是否是idempotent的,假如我们发送两个http://superblogging/blogs/post/Sample请求,服务器端时什么样的行为?如果产生了两个博客帖子,那就说明这个服务不是idempotent的,因为多次使用产生了副作用了嘛;如果后一个请求把第一个请求覆盖掉了,那这个服务就是idempotent的。前一种情况,应该使用POST方法,后一种情况,应该使用PUT方法。

也许你会觉得这个两个方法的差别没什么大不了的,用错了也不会有什么问题,但是你的服务一放到internet上,如果不遵从HTTP协议的规范,就可能给自己带来麻烦。比如,没准Google Crawler也会访问你的服务,如果让一个不是indempotent的服务可以用indempotent的方法访问,那么你服务器的状态可能就会被Crawler修改,这是不应该发生的。



Soft Skills
12月 10, 2008, 11:38 上午
Filed under: Uncategorized

Soft Skills,wikipedia上将其定义为人的EQ(Emotional Intelligence Quotient),相对应的,Hard Skills定义为IQ。

前一整子有STC的General Manager来给大家讲Soft Skills的培养,讲了Soft Skills的各个方面,很值得学习,但是现在回想一下,想不起来这位前辈说了些什么内容,关于Soft Skills影响最深的是另一位前辈Philip Su的几句话,我想主要是因为Philip的话更加一针见血。

Philip Su的话大概意思是,Soft Skills之所以是Soft的,就是因为每个人都可以有自己特色的Soft Skills,没有固定的形式,Steve Ballmer有Steve Ballmer的Soft Skills,Steve Jobs有Steve Jobs的Soft Skills,你看这个人的Soft Skills很不一样,但是都很有效果。Hard Skills是“硬”的,你花费了10年学习C#,就有10年的C# Hard Skills,但是Soft Skills不是这样简单的靠投入时间训练,Soft Skills的学习主要靠榜样的影响

榜样的作用可以来自于书籍或者影视作品,但是最有效的还是通过直接和榜样接触来学习,毕竟没见面的榜样还是虚幻的,说服作用没有面对面强烈。在小环境中,榜样的作用更明显,试想,如果你身边的人表现出坦诚,而且能够用坦诚把事情搞好,那你自然也很容易学会坦诚这种Soft Skill。反过来,两种情况,第一,有人是很坦诚,但是没把事情搞好,第二,大家都不坦诚,遇到两种情况,你就不大可能学会坦诚了。虽然每个人的Soft Skills都不一样,但是就我的观察,成功人士的Soft Skill Set都还是有不少共同之处的,说道这里,就要定义一下什么是“成功”,这里定义的成功指的是能够做自己喜欢做的事情而且能过做得很好,这样的成功人士,不管是喜欢吼叫的Steve Ballmer还是老成持重的Steve Jobs,坦诚和激情,就一定是他们的Soft Skills。



Need For Asynchronous API
12月 7, 2008, 4:01 上午
Filed under: 技术体会

以前我反复说过Asynchronous Programming(异步)的问题:

异步好…难 (Asynchronous Is Hard)

异步是正道:Asynchronous Is The Right Way 

异步(Asynchronous)和可扩展性(Scalability …

利用iterator block来实现易读的异步 

对于严肃的软件开发,为了增强系统的Scalability,异步是一个必须要考虑的问题。但是异步编程的确要稍微困难一些,所以很多Library或者Framework一开始是没有异步支持的。

C# 3.0中包含的LINQ(Language INtegrated Query) query就没有很好的异步支持,事实上你还是可以写asynchronous query的,但是LINQ的目的是为了可以用统一的方法去写对任意数据源的查询,而这样在读取query的结果的时候,被迫需要知道数据源的API,这实际上违背了使用LINQ的最初目的,而且code也很冗长。

这是一个语法性的问题,我们写一个LINQ query只是表示清楚该如何去查询,但是并没有去做这个查询,比如写from prod in Products where prod.Price < 100.0 select p,我们只不过建立了一个从数据源Products里面找出价格小于100.0的产品的查询命令,但是并没有去执行,怎么执行还是依赖于数据源,数据源可能支持异步,也可能不支持,这就导致使用异步执行的时候必须知道数据源的类型了。

LINQ的这个问题目前看没有一个显而易见的解决方法,但是也有明显有解决办法但是没有提供异步接口的Framework,比如ASP.NET MVC。

我刚参加工作的时候,MVC已经是业内普遍使用的一种模式了,后来接触了ASP.NET,和MVC走的完全不是一个道路,但是觉得设计的的确很精巧,但是就是容易让程序员写出没法Unit Test的网页程序。过了好几年之后,微软终于觉悟了,推出了自己的MVC Framework,叫做ASP.NET MVC,微软的网页上反复的强调这只是传统ASP.NET WebForms的一个alternative,不是一个subsitition,我觉得结果如何完全看市场,目前看来,越来越多的开发者倾向于使用ASP.NET MVC开发Web Application。当然,ASP.NET MVC的道路还很长,目前还只处于Beta阶段,而且,还没有异步接口:-)

动态生成的网页往往都需要访问后台的数据源,这样就有了I/O操作,这样,为了提高Scalability,异步就显得必要了。不过还好,ASP.NET是一个很flexible得平台,ASP.NET MVC就是利用了这样得灵活性建立得,而且ASP.NET进一步提高了flexibility,虽然官方ASP.NET MVC没有提供异步支持,但是可以很容易得做一个山寨版的异步支持。虽然ASP.NET MVC没有支持异步有点让人失望,但是我觉得目前的确是把工夫用对地方了,从Preview到Beta版,易用性和可测试性大大提高了,一个没有异步但是很容易用的平台,比一个有异步但是很难用的平台更抢夺市场,当然,我希望ASP.NET正式发布的时候能够有异步支持,这样才能满足专业需求。



一定很忙
12月 6, 2008, 4:22 上午
Filed under: 技术体会
Windows Live Team一定很忙,忙着对这次的升级做调整,看Space上显示的自己的名字就能看得出来,升级之前显示的是Morgan Cheng,升级后第一天变成Cheng Morgan,第二天又变成了Morgan Cheng,然后又是Mo Cheng,现在又回到了Morgan Cheng。



You Don’t Have Infinite Time To Prove Yourself
12月 5, 2008, 10:51 上午
Filed under: 工作心情

image 

Steve Ballmer今天早上发信,来自Yahoo!的陆奇将领导微软在线服务部门,同时,另一个领导人Brian McAndrews,曾是被Microsoft收购的iQuantative的CEO,将要离开微软。这只是这几年来Microsoft数不清的领导人更换中的一朵小浪花而已,没法让我们吃惊了,这样频繁的变动传递的是这样一种信号:每个executive都只有有限的时间(我看最多一年)的时间去打胜仗,时间到没起色,就得走人。游戏规则就是这样,没有更多的时间去让你证明自己,就算你想“不抛弃,不放弃”,但是,照《士兵突击》里的另一句话讲:“残酷啊!” 同样,陆奇,你的时间也不是无限的。



New Windows Live: 骂评如潮
12月 4, 2008, 2:35 上午
Filed under: 技术体会

昨天看到Windows Live各在线服务都升级了,第一感觉还觉得不错,但是很快就发现,这次“升级”可能只能称为“改变”,甚至可以说是“降级”。

如果用户都只是把Live的服务当玩具,看到界面漂亮了一些,自然都会哈哈一笑,夸奖一番,但是Live应该明白,真正的用户不是把他们的产品当玩具,真正的用户会尽量发掘你们产品提供的功能,并且会依赖这些功能,所以,别以为把界面搞漂亮一点而一些功能丢了会取悦用户。

When will you guys LEARN. You have taken a masterpiece of simple, elegant design, and filled it with crap. The most important thing in a home page is CONSISTANCY! The new homepage takes a huge amount of space to give me less! Not even links to my space or personalised pages. Also, the things that are there don’t work, no emails, profile upates from september labelled as 49mins ago (been 49mins for the past 3 hours!)
If this is how things are going to change, I feel I can no longer rely on any of your other services to be reliable to use, and can no longer recomend them to anyone else.
P.S. Just tried to add this comment, only to get "Sorry, we can’t add your comment right now. Please try again later." Says it all really, doesn’t it.

——"No Name" in Windows Live Blog comments

这段Comment引自Windows Live官方博客的留言,留言者是"No Name",是因为Live Space的bug,很多人留言都成了"No Name"。

让我感觉最头疼的被丢失的功能,就是没了访问统计,应该明白一个严肃的Blogger都会去查看访问统计,所以任何一个有竞争力的Blogging系统都会提供可靠访问统计功能,怎么能这个功能都没有搞定就发布了呢?还好,这个功能恢复了,但是用户需要费点劲才能找到,因为它换了位置,登陆之后在Options下的Stat里。

产品的“升级”必须是能够优化用户的体验,如果用户不能感觉到用得更舒服,那Value Proposition在哪里?

虽然我也不清楚具体是什么根本原因导致这些问题,但是从一个工程师的角度看,这次升级还是明显有这些教训:

  • Be Cool and Be Functional. 光是很漂亮很酷还不够,你声称的功能必须还要好使,不好使啥都别说了。
  • Do Better Beta Test. Live Mail之前就挑选了一部分用户进行了很长时间beta测试,不断根据反馈改进,所以出现的问题比较少,据说有联系人丢失的问题,我还没碰到。
  • Keep Legacy Link Work. 这似乎是微软在线服务部门经常犯的一个老毛病,一升级就把一些服务的URL改了,改就改了吧,但是要知道还有用户就知道老URL呢,以前是通过http://morganchengmo.spaces.live.com/Settings/Stats/看访问统计,现在改成http://morganchengmo.spaces.live.com/Options/Stats了,那让老的URL redirect到新的URL上总可以吧,Live没这么做。
  • Don’t Be Shot by Same Bullets Twice. 记得Live Space取代MSN Space的时候也是出现了很多问题,官方解释是networking有问题,这次,很多问题还是说networking有问题,这么多年了,networking问题还没解决?


New Live Spaces: A New World Without Ads
12月 3, 2008, 2:06 上午
Filed under: 技术体会

突然发现Live Space上面的广告条幅(Ad Banner)不见了,这只能有两个原因,要么是Live Space的bug,要么是Live Space又被升级了。查看一下Windows Live的官方blog,果然,这两天有一个升级。

官方Blog上对Live Space升级的介绍是

  • Removal of the banner ad that used to be at the top – we found that our users dislike having ads on their personal blogs and that this advertising didn’t perform particularly well for advertisers either.
  • New default themes, fonts, colors, and other design elements that are now more readable and appealing, and consistent with similar changes elsewhere on Windows Live.

 

A New World Without Ads

以前总出现在上方的Ad Banner的确挺讨厌,明显没有很好的Behavior Targeting,推销的产品也完全不是访问用户想要的,既然end user不喜欢,advertiser也不满意,将其拿下也是应该的,众望所归。

我想,等到Live能够更加准确的探测到用户喜好,肯定还是会把广告重新放到Spaces上去。最好的方式是,在Spaces上显示的广告内容是根据访问用户的喜好和Spaces的内容来综合决定的,比如我喜欢写关于电影和.NET技术相关的内容,某个被探测出是技术人员行为的用户访问我的Blog的时候,显示的就是类似推销ASP.NET书籍或者培训的广告,而某个被探测出是喜欢吃喝玩乐的朋友,看到的就是某某电影院或者电影票打折相关的广告,还有,最好能够让写Blog的能够从广告收入中分一杯羹,这样形成ecosystem才是长久之计。当然,这些道理任何搞在线广告的人士都应改明白,就看能不能做出来,有多快能够做出来。

不管怎么样,在还没有达到这样的能力之前,将这个不讨好的Ad Banner删掉很好。

More Themes

Live Space还声称提供了更多的Theme,但是没有我想要的,我喜欢简洁清新的Theme,像http://home.live.com那样的,但是在可选的Theme中没有。

image

Missing Panel

以前,Live Spaces有个很好的功能,访问http://{your space name}.home.services.spaces.live.com,比如,我就访问http://morganchengmo.home.services.spaces.live.com/,看到的是一个Panel页面,在一个页面里可以看到所有朋友最新的更新、所有对我Blog的留言还有访问量统计,但是这次升级之后这个Panel消失了,这真是一个遗憾。还有,这次升级导致访问统计丢失了,希望不是Live Space打算去掉这个功能。

image



过去一年对我影响最大的三句话
12月 2, 2008, 8:34 上午
Filed under: 工作心情

快到年终,是时候总结一下了。过去的一年发生的事情挺多,自己也有很多变化,有的变化是长期积累的结果,有些变化只是一句话的点醒,这一年里给我影响最大的有三句话。

第一句话:“Ten years later, if this company still exists, those people will still argue in meeting rooms. So, why not voice your own opinion now. Lead the argument to the right way. Do it now!” 这是一个内部的一对一辅导课程中coach对我说的,当时我正在抱怨会议太多,每个会议都是争吵,粗鲁的争吵,无意义的争吵,我自己不想卷入其中。这个coach说的对,会议室里的争吵是这个公司(也就是Microsoft)的风格,与其逃避,还不如站出来,指出无意义争吵的无意义之处,把讨论引向健康正确的风向,如果没有人来做这件事,这样的争吵只会持续下去。别错误理解我的意思,我不是说每个人都应该在会议上吵架,能够直面争吵是第一步,你还要了解谈判的艺术,每一个争吵其实也是一个谈判,后来我们的GM写email推荐了一本书Getting To Yes: Negotiating Agreement Without Giving In,我反复看了几遍,逐渐掌握了一些谈判技巧,应用起来效果还不错。我需要再重复一遍,我不是希望每个人都成为“吵架王”,我希望每个人都成为谈判高手,但是首先,你要愿意面对“吵架”或者“谈判”,并用合理科学的方式去影响别人。

第二句话:“Shift your mind. Don’t just be a problem solver. Be a facilitator.” 公司挑选了一部分人进行leadership培训,我有幸被选中,课程很长,讲的东西很多,给我映像最深的就是这句话。在你漫长的生涯中,你会有一些好的想法,但是这个想法可能很大,不是你一个人能够完成的,你需要别人的帮助,当然,这个想法是如此的大,以至于你自己都并不是知道每一个细节该怎么做,你需要别人找出办法来完成,这时候你就需要能够做一个facilitator,帮助别人来找出solution;同样,别人也会有一些好的想法,但是他没有做过,需要你的帮助,你可以帮助他实现,但是更好的方式是你不要直接告诉他该怎么做,而是帮助他自己找到问题的答案。成为一个好的facilitator,是一件相当重要的能力。

第三句话:“For Windows 7 … the most important thing is not quality, not engineering practices, but VALUE PROPOSITION!” 这句话是Microsoft Engineering Excellence部门的大佬在EE & TwC Forum 2008上说的,在说此话之前,他给大家若干选项,包括Quality、Engineering Practices和Value Proposition,让大家选择哪件是对Windows 7最重要的,很多人都以为此会乃Engineering Excellence会议,此人乃Engineering Excellence的大佬,那答案肯定是Engineering Practices了,大错特错!答案是Value Proposition。Windows XP获得巨大成功,太成功了以至于用户都普遍不愿意使用Windows Vista;Windows Vista虽然卖出去了很多,但是骂评如潮,这时候要退出Windows 7,首先要考虑的是,用户凭什么要买你的产品。不光是Windows 7,每个一个产品,每一个公司,每一个部门,每一个个人,都应该好好思考一下自己的Value Proposition,那就是,我的能够给用户带来什么好处?还有,很重要,用户会不会接受?用户是我们的衣食父母,要是抛开他们,你可以谈技术谈创新,谈得天花乱坠,用户不买账,全都是白搭。