巴别塔上的雇工


我们所有的进步都来自于反馈
1月 30, 2009, 11:22 上午
Filed under: 工作心情

我们所有的进步(Progress)都来自于反馈(feedback),即使你不曾注意到。

先看看软件工程师日常是如何获得Progress的:

  • 我们写一段code,编译它,出错,我们得到的是编译器的负面的反馈,我们知道我们的code有问题,回去修改,这样我们才能往前走一步让这段code编译通过。
  • 编译成功之后,我们执行它,有可能一次我们的test case就通过,这是TDD(Test Driven Development)给我们的正面反馈,当然也有可能不通过,这是负面反馈,于是我们debug,直到让test case运行通过,这是TDD的反馈帮助我们做出可运行的code。
  • code已经写好了,我们拿出来给同事做code review,通常都会被指出一些问题,我们发现原来让计算机理解的code并不等于能够让人理解,我们于是refactor,写出readable code that works

这个日常的软件开发过程中,都是feedback给与我们指导,只不过有的feedback是来自于机器,有的是来自于人。假如没有feedback,我们写一段code,就认为它OK了,发布给客户,那就如同自杀一样,feedback还是会从客户来,相信我,这样的feedback会比之前的feedback难处理一万倍。

上面关于软件工程师的个人工作很简单易见,再深入一点,对于软件产品的整体开发,进步依然是来自于反馈。假如我们开发了一个软件产品或者服务,经过一系列通过feedback而progress到了发布的时候,产品投放出去了,然后呢?然后我们怎么做,就要看上一次发布带来的feedback,市场上客户的反应怎么样,决定了产品组接下来应该怎么做,有哪些缺陷需要修正,有哪些功能需要添加,就得看客户的反馈。我想不出来产品组除了听取客户反馈之外还有什么好方法能够指导之后的开发活动的。

做软件产品或者服务是这样,做一切产品和服务都是这样,Focus on the feedback!

做事这样,做人也是这样。

我们先不说要态度谦虚接受别人反馈的问题,只说有没有恰当的反馈的问题。《美国偶像》的海选总要刷掉一大部分人,但是有相当一部分表现很烂的被淘汰之后还不服(这种现象可以在任何一个有海选的节目中都有),他们的家人也不服,说我儿子或者闺女唱得很好也跳得很好,为什么要淘汰他/她?他们被淘汰是因为从小没有获得恰当的反馈,不管他们怎么唱怎么跳,他们的父母总是说他们做的很好,他们没有获得负面的反馈,不知道提高,所以他们就继续保持这种水平,在家里还能够被追捧,但是出来秀就有点吓人了。当然,父爱和母爱都值得尊敬的,有勇气表现自我也值得褒奖,但是如要真的获得进步,首先要确保自己能够获得恰当的反馈,因为很多问题你自己是发现不了的,需要别人给你指出来,负面反馈比正面反馈更重要

要获得反馈,不是容易的事情,首先和你关系亲密的人有可能出于爱心不会给你负面反馈,找一批真正愿意给你反馈的人,最好的方法就是夸大反馈面,不光听取和你关系近的人的意见,也要听取和你关系远的人的看法,多样性能够保证你获得反馈全面。获得反馈要有感激之心,要知道别人可是没义务给你反馈,他/她要是恨你完全可以放纵你的缺点,所以当人给你反馈的时候,尤其是负面的反馈的时候,记住说“谢谢”,这样别人才会愿意继续给你意见。



Live Hotmail in Chrome
1月 28, 2009, 6:56 上午
Filed under: 技术体会

自从Chrome发布以来,在上面使用Live Hotmail就一直有些问题,比如无法写一封邮件,你可以进入写邮件的界面,但是没法敲进任何邮件内容。这个现象存在这么久,昨天被TechCrunch抖出来,TechCrunch使用的标题是“How Many Engineers Does It Take to Make Hotmail Work In Google Chrome?”,很明显原作者认为这个问题是Microsoft的责任。

Live Hotmail在IE和Firefox上工作正常,但是在Chrome上不正常,说到底是Internet API的标准化问题。从上世纪Mozilla和IE之间的浏览器战争开始,各个浏览器的功能开发就比标准制定还要快,这样自然造成不同浏览器对API的解读不同,就是在浏览器战争结束多年之后,还是有很多内容没有标准化。由于这些历史原因,同一个网页内容在不同浏览器上出现不同行为也就很可能了。

有人用阴谋论思维说这是Microsoft故意让Live Hotmail只能运行在IE之上,以打压Chrome,这真是无稽之谈!虽然我不是Live Hotmail部门或者IE部门,但是我相信他们和所有其他产品组一样有更重要更光明正大的事情要做,谁也没有闲功夫去故意让Live Hotmail只能运行在自己公司的浏览器之上。事实上,Live Hotmail在非微软产品的Firefox上也能正常工作。

按照TechCrunch上作者的观点,这是一个急需修正的问题,最好立刻fix,作为一个终端用户,我也觉得这个bug带来一些不方便,但是每一个了解专业软件开发的人都知道,不是每一个bug都能够获得第一时间的fix,有些bug的severity和priority不高,就会被延迟fix,产品组重点把资源放在处理severity和priorty更高的问题上。目前Chrome的Market Share不足2%,实在很难说服Live Hotmail去提高这个问题的severity和priority。

今天,我在Chome上登陆Live Hotmail,惊喜的发现这个问题已经被解决了,不知道这是一个为了响应TechCruch批评而作的hot fix,还只是碰巧这个bug按照计划在这个时刻被fix,我个人更希望是前者,要是Microsoft的在线部门都能够灵活积极地对用户反馈进行修改,那咸鱼翻身也指日可待了。

Update:
按照Google在1月28日公布的博客信息,他们一方面知道Live Hotmail正在搞一个fix,一方面已经等不及了,增加了一个等于是hack的Chrome端fix。


Windows
Live Hotmail now works. While the Hotmail team works on a proper fix,
we’re deploying a workaround that changes the user agent string that
Google Chrome sends when requesting URLs that end with mail.live.com.“


有意思,这种通过修改User Agent的方式来骗过Web Server的方式,上世纪浏览器战争时期就在使用,到现在还在被使用,我们现在出于第二次浏览器世界大战中:-)

这篇文章介绍了User Agent变得如此混乱的历史。



To Express Oneself Honestly
1月 25, 2009, 11:50 上午
Filed under: 工作心情

"Ultimately, martial art means honestly expressing yourself. It is easy for me to put on a show and be cocky so I can show you some really fancy movement. But to express oneself honestly, not lying to oneself, and to express myself honestly enough; that, my friend, is very hard to do."

——李小龙

武术的内涵就是诚实地表达自我,这不是只适用于李小龙,也不是只适用于武术,而是适用于任何人,适用于任何事。

 

;



Live Spaces的Blog标题
1月 24, 2009, 1:50 上午
Filed under: 八卦杂谈

Live Spaces上一次升级,有一个不大引人注意的变化,但是这个变化的实际影响可能不小,这个变化是关于Blog Post的标题(Title)。在升级之前,这篇Blog的Title会是这样

Live Spaces的Blog标题–巴别塔上的雇工

升级之后,也就是现在,Title是

Live Spaces的Blog标题–Windows Live

也就是说,以往Blog的Title是文章的名字+Blog的名字,现在是文章的名字+Windows Live。这个改变会影响 Search Engine对Live Spaces的索引,不同Search Engine的算法都不一样,都普遍都把Title中的词加上比较高的权重,现在Live Spaces每一篇文章的Title都含Windows Live,就会导致搜索关键词带Live都很有可能产生内容和Live这个词完全无关的搜索结果,搜索“Live + 巴别塔”,可以看到搜索结果的文章内容和Windows Live没有关系,唯一的关系就是存在于Live Spaces上。

也许是Live Spaces组有意做了这个修改,算是SEO(Search Engine Optimization),但是我认为这样做不大恰当,让网页内容和语义不符合,还有一个相关的现象是关于Thread关键词,当你想搜索一个关于线程(Thread)的信息,搜索结果有时候就是一些和线程风马牛不相及的论坛文章,因为英文论坛用“Thread”表示一系列相关讨论,所以这个Thread词的出现干扰了Search Engine对用户的真正意图(intention)的判断。

还有一点,因为搜索引擎会把Title放在搜索结果的第一位,我觉得以前的Title包含我Blog的名字挺好,挺能吸引眼球,但是现在所有人的Live Spaces被搜出来都是Windows Live,这样个性就没法表现出来。当然Live Spaces组也许觉得Windows Live比每个人自己的博客名字更显眼,但是我希望能够添加一个功能定制自己的Title。



Lost: A Story About Leadership
1月 23, 2009, 9:51 上午
Filed under: 电影电视

美剧《Lost》第四季开播,和以前一样,解开了一些谜的同时,又增加了新的未解之谜。如果不考虑关于这座岛上稀奇古怪的事情的话,我看Lost其实就是一个关于Leadership的故事。什么是Leadership?Leadership是说服别人按照自己的决定来行动的能力,而经常使用这种能力的人,就是Leader。这个定义很清楚很简洁,Leadership就只是一种能力,某个人做的决定,其他的人会跟随这个决定,nothing else,和组织结构无关,和头衔级别无关。

但是,似乎Leadership经常被误解,比如被误解为是一种权力,某人做的决定其他人必须遵从;或者被误解为一种头衔,只有名片上印了Leader/Manager/Director/President/CxO的人才能够行使Leadership,这样的理解是错误的,Leadership是能力而不是权力,也不是说只有管理者对下属才有leadership。因为现实中普遍存在的社会关系结构,这样的误解还是普遍存在,但是在《Lost》中,岛上幸存的人完全平等,现代社会的权利和头衔全都不适用,这种从头开始的社会构成,最容易看清真正的Leadership。

看看《Lost》中的Leadership。

幸存者中的Jack Shephard,虽然没有头衔,但成了事实上的Leader,因为他的技术特长(医术)使得他成为可以依赖的角色,而当群体出现困难的时候,他也愿意站出来解决问题。Jack不是我最喜欢的角色,因为一方面他扮演Leader的角色,一方面又有固执冲动的缺点,这些缺点让他几次坏了大事。第三季中有个情节,白灵给Jack算命,说他天生就是Leader,我很怀疑leadership是天生就有的能力。

幸存者中的第二号最具有Leadership的角色John Locke,他拥有打猎的特长,解决了大家的食物问题。此人的one-on-one技巧非常高,三言两语就能把人生大道理讲得明明白白,我还清楚地记得他用飞蛾破茧例子说服摇滚歌手戒毒。John Locke对信念执著到了迷信的程度,一方面让他做什么事情都有信心,一方面也让他有时候做事不顾后果。

不能只说正面例子,leadership也有反例,骗子Sawyer在幸存者中也很有影响力,首先是通过囤积物资,通过控制稀缺资源来让别人就范,然后还使用骗术控制了幸存者中所有的军火,用暴政来实现Leadship,后果表明这两种获取Leadership的方式不稳固也完全不能长久。当然,后来Sawyer算是改邪归正了。

岛上The Others这伙人中的首领Ben Linus,几乎就是一个完美的Leader,无论个人战斗力、智谋、组织能力,都是上乘,但是Ben的leadership更多的是靠心理控制(manipulation),这招使用的当时还让别人觉得是自己心甘情愿,但等回过神来,就会对他产生戒心,丧失了信任。在第四季结束的时候,Ben被岛上的神秘主宰者Jacob抛弃,这何尝不是映射他已经被他的团队抛弃了呢。

LostPedia上有关于《Lost》中Leadership的介绍,可以看到哪些是Leadership Pros,哪些是Leadership Cons。



Mercurial
1月 22, 2009, 10:12 上午
Filed under: 技术体会

虽然公司有让产品组使用的版本控制系统(VCS),但是我一直使用另外一套VCS,因为在产品里check-in代码还是要谨慎,如果某个功能修改比较大,有可能要花几天的时间,这几天里如果一次都不check-in不大好,我一向喜欢频繁check-in,但是又不能往官方VCS里check-in,所以这些中间工作我就check-in在我的私人VCS里。

我的私人VCS一直是Subversion,简称SVN,Coding Horror上有一篇文章非常详细地介绍了如何假设自己的SVN环境,另外还有Windows Explorer中的插件TortoiseSVN,Visual Studio中的插件AnkhSvn,所以SVN和微软开发平台(Windows +Visual Studio)就是绝配。不过我使用SVN也有不爽的地方,SVN是一个Centered VCS,也就是说Repository是在某个中心Server上,要check-in就只能提交到这个Server上,比如我把Repository设在我的一台PC机上,在办公室的时候我在笔记本上开发没问题,但是我要是离开办公室到了一个没法连接这个Repository的地方,那我就还是没法Check-in了,这可不好。

要解决这个问题,就得使用DVCS(Distributed VCS),首选当然是GIT,但是Windows上使用GIT不是被支持的很好,倒不是因为没有GUI界面,主要是在不同机器之间同步不方便。我曾经尝试同时使用GIT和SVN,在家里用笔记本写的code用GIT check-in到本地,回到办公室再用SVN和Reposotory同步,很快就发现使用三个版本控制系统实在太晕了,只好作罢。

最近尝试使用另外一款DVCS叫Mercurial,和GIT很相似,但是在Windows上被支持得很好,简单实用。Mercurial这个名字的确很形象,这个工具之下被控制的版本,就和《终结者2》中的水银机器人一样,可以任意变形,任意branch和merge,咳,任何一个VCS都可以任意branch和merge,只不过Mercurial更加显得灵活而已。

没必要讨论SVN、GIT和Mercurial谁优谁劣,每个工具都有所长,就看其特长是否适合我们特定的工作需要,Mercurial就比较满足我的需要:

  • 工作在Windows平台;
  • 每台机器都有自己的Reposotory可以check-in;
  • 不同机器之间可以很方便的Sync
  • 简单易用:Mercurial的上手教程



奥巴马的就职演讲
1月 21, 2009, 3:23 下午
Filed under: 八卦杂谈

奥巴马的就职演讲中,有这样一段:

“Recall that earlier generations faced down fascism and communism not just with missiles and tanks, but with sturdy alliances and enduring convictions.”

CCTV对就职典礼进行了直播,现场翻译很直接地将这句翻译了,导播的手慢了,主播又不知所措,这是CCTV的直播。

 

这里我就不多说CCTV在处理这事上的无能,CCTV Sucks,废话就不多说了,这里只研究一下奥巴马这句话。

首先,奥巴马居然将共产主义和法西斯主义相提并论,因为冷战等历史原因,西方世界就是存在奥巴马这种观念,但是作为一个国家领导人,就不应该还是这种冷战思维。

根据上下文,奥巴马所说的和fascism和communism的斗争指的是第二次世界大战到冷战结束这段时间的故事,当然也就包括朝鲜战争、越南战争、古巴猪湾登陆以及杀害切.格瓦拉,看这几个事件的结局就知道,使用face down(令…屈服)是不正确的,美国并没有让communism屈服。

卡尔.马克思提出communism是为了解决当时的社会经济问题,从那个时候到今天,社会经济矛盾一直在变化,communism实际上在不同地区不动时代都有不同的内容和形式,有的干得好,有的干得就很糟,所以将communism当作一个整体来攻击,要么是因为无知,要么就是为了转移矛盾的一种懦夫行为。让我们对奥巴马先生拭目以待吧,说得再好听,事没做好也没用。



翻译“不折腾”
1月 21, 2009, 3:15 上午
Filed under: 八卦杂谈

涛哥的这句“不折腾”,不光难倒了现场翻译员,各方神圣都提出了自己的翻译。

12月30日现场翻译使用的是汉语拼音“bu zheteng”,对于无法翻译的汉语词汇,先用汉语拼音顶着也是不错的选择,如同Kong-Fu、Tou-Fu。

季羡林认为应该翻译成“no trouble-making”,季老是语言学大师,但是他老人家钻研的主要是国学和一些快绝种的语言,不是对季大师不敬,但是我想这个“不折腾”本来就是中国俚语,翻译成英文还是用一个俚语好,“no trouble-making”有点太文邹邹了。

某大使说应该是“avoid self-inflicted setbacks”,这个翻译让人感觉不简洁。

Google Tranlsate说是“Do not toss”,意思还是差那么一点。

找乐子的洪晃认为是“Don’t F*** Around”,这是个翻译很有街头俚语的味道,但是到底上不了庙堂。

……

今天看到一个——“No Z-Turn”,真的是形神俱备的绝妙翻译!首先Z-Turn就是“折腾”的谐音,然后英语中本来就有U-Turn这种说法,英语的“象形字”,一个U表示一个掉头的轨迹,这个Z-Turn形象地表示了瞎折腾人的做事方式,No Z-Turn就是不折腾。



我和AJAX创造者有张合影
1月 20, 2009, 9:14 上午
Filed under: 工作心情

AJAX(Asynchronous Javascript and XML) 是一组能够创造Rich Internet Applilaction的的Web开发技术,这个术语在2005年被第一次提出,但是相关技术从上个世纪就开始存在了,包括:

  • 用来显示的XHTML和CSS
  • 用来操作网页内容的DOM(Document Object Model)
  • 可以在浏览器中运行的Javascript
  • 还有,用来和Server端进行异步通讯的XmlHttpRequest

就是这些技术,支撑了目前众多AJAX网络服务。其中最重要的最核心的技术XmlHttpRequest,源自于微软,最早由Jim Van Eaton和Bob Gering创造

这次Redmond之行,我有幸能见到Jim Van Eaton,说起XmlHttp,Jim很谦虚,说这不是他的功劳,而是Team Work。

with-jim-van-eaton

更有幸的是,能够和Jim合影,Yeah,我和AJAX的创造者有张合影!



超级小巴
1月 20, 2009, 1:03 上午
Filed under: 城市丛林

我们一行人没一个会开车的,东西又多,所以打电话叫了一个Shuttle Bus把我们从住所送到西雅图国际机场。这种Shuttle相当于曾经在国内风行一时的“面的”,又能运人又能运货,后来似乎是为了树立现代化形象,“面的”在大城市完全被轿式出租车取代了,其实人家美国佬还一直用呢。

打个电话讲清楚自己是要赶哪一班飞机,接线员就会安排一个20分钟的时间断,Shuttle会在这段时间来门口接人。安排给我们的Shuttle要送两拨人到机场,都是要回国的,司机大哥Mike没料到我们每个人都是两个大箱子,很是费了一些脑筋,最后后厢里也是箱子,前排座位上也是箱子,过道上也是箱子,总之车里面的空间除了人之外就是箱子,这才得以上路。

Mike说他这辈子都没一次运过这么多人和货,所以要拍张照留念一下。总共八个人十六个箱子,现在都难以想象怎么挤上了一辆小巴。

super_shuttle