如何看待王垠的《微软感受》?

2016.09.13 17:58更新: 收回前一篇文章 ============================================================== 我就知道,我们认识的王垠从来就不是一个混吃等死的程序员。世界变了,他还是没有变。想知道大家看到这条消息后的第一反应是什么? 另外,「Windows 似乎并没有比以前质量好很多」,你们有所体会吗? 「在微软工作之后,我似乎理解到了 Unix 和 Mac 的优点。Unix 的设计确实是丑,然而它把这种丑给标准化了,做得…
关注者
1604
被浏览
186808
如果提问者真心要问「这对于我们这些处于程序员食物链低端的求职者来说,有什么值得借鉴的呢?」,如果提问者真的是自称的「一个即将成为微软中层的程序员」,那我就回答一下吧。(继续黑王垠实在是没意思。)

我觉得王垠这个故事最值得借鉴的地方在于,如果一个人在 people 和 direction 上不及格,technical 就算满分也永远突破不了底层。为什么要把一个人的行为划分为 technical、direction 和 people 三个方面来看?因为这样比较容易解释清楚大公司的级别系统是如何运作的,以及为什么王垠不可能拿到更高的级别。

最容易说明白的就是 technical,这就是你能解决多难的问题,以及解决得有多好。给你很难的问题你解决不了,自然 technical 不行。给你容易的问题你解决了,但代码质量低、架构混乱、维护成本高,这同样是 technical 不够高的表现。总的来说,technical 侧重于解决问题,也就是中国应试教育擅长培育的项目。

与之对应并且相反的是 direction,也就是定义问题,一个中国应试教育从来没有教过你的项目。这个世界上有千千万万的问题,为什么你要解决这个问题而不是解决那个问题?如果你选择了解决这个问题,哪些事情属于这个问题的范畴哪些事情不属于?这些都是 direction 关注的问题。

打个比方来说,你的目标还是在 120 分钟的考试拿 100 分,但试卷如同 1000 分普通试卷的容量,要 120,000 分钟才能全部做完,总分 100,000 分。没错,只要你做完 0.1% 就 100 分了,但到底做哪 0.1% 呢?这才是个问题。这份试卷有 90% 是你不会做的,剩下有 9% 是你正确率不高的,只有 1% 是你很确信能做对的。对于你擅长的 1%,你只要做其中 10% 你就能搞掂那 0.1% 的要求,但这还是大海捞针。

然而对于一家大公司来说,这个大海捞针的过程十分重要。选择了对的问题,才能做出来有意义的答案。选择了错误的问题,浪费大量公司资源最终什么都做不出来,或者被同行打败,那 technical 再好也没用。

其实看王垠对之前各家公司的评价,大概可以看到这样一种模式:我这么厉害,为什么总是得不到我应得的机会?为什么上级总是给我一些不重要的事情去做?其实这样的思维方式就已经表明了他在 direction 方面没有什么能力。他没有尝试去定义什么问题值得解决,什么问题适合用他的能力去解决,他觉得上天(上级或者是老师)应该把这一切都安排好了,给他的问题就是最最反应他能力的,他只需要把他 technical 方面的优势展现出来,结果必然是非常有影响力的。然而上天并没有什么心思去照料他,他自己也没有能力去找到正确的 direction。

当然有时时候你找到了正确的 direction 别人也不支持你。你的上级不相信你,不愿意给你资源,甚至直接不批准你做你认为正确的 direction,强迫你继续做他认为正确的 direction。你的下属不相信你,不跟随你的 direction。又或者是你的下属没办法很好理解你的 direction,以为自己做的事情对你目标有贡献,结果是什么帮助都没有。还有可能你的下属 technical 的能力就不够,帮不上忙还降低整个项目的质量。这时候就涉及到 people 的问题了。

所谓的 people,最终还是要服务于你的 technical 和 direction 的,或者至少是服务于整个公司的 technical 和 direction 的。你要让 direction 跟你不一致的人信服你,或者至少是能够跟他们做交易:我帮你这件事情,你帮我那件事情。你要让 technical 不够好帮不上忙的人成长起来,让他们变得能够帮忙。

从王垠之前的文章来看,他是从来没有在意过 people 这一项的,反正其他人不喜欢他也没问题,他的成功不依赖于其他人。但其实在公司里面,尤其是大公司里面,不依赖于其他人的成功是几乎没有可能的。一方面,你要选择正确的 direction 就需要收集很多信息,例如公司未来计划是什么,重点会在哪方面投入,近期最大的障碍会是什么。这些信息都在不同的人手上,你需要很多的沟通才能收集回来。另一方面,一个人的 technical 再怎么厉害也是有上限的,你要你的输出程指数级增长,唯一的办法就是借助别人的 technical 能力帮你解决部分你的问题,否则你达到自己的上限了就上不去了。

对于科技公司来说,级别增长对于输出的要求都是指数级增长的,线性增长是没办法帮你晋升的,只能拿更多的奖金。作为 senior,输出至少要相当于几个 junior,而且最好能做一些几个 junior 各自为政做不到的事情。前者估计王垠可以做到,其它 junior 修改几天才能完美的代码他一天就写出来完美的版本。后者他可能就做不到了,因为 junior 需要别人给他们定义问题,需要别人告诉他怎样成长,而我看不出来王垠有这种能力。(如果他有这种能力的话,他在博客上抱怨的问题应该是不一样的。他应该抱怨级别比他低的人不理解他设定的目标,或者是有意愿但没能力对他的目标作出贡献。)

从 senior 到 principal 或 staff 的过程也是类似的,你的输出至少是一个顶几个,而且最好能做到几个低一级的人各自为政做不了的事情。这时候 direction 和 people 就会显得越来越重要,因为你要说服别人各自带领自己的团队单干效果不如多个团队分工合作完成你的目标好,那首先你要有个好目标,其次你要能说服人。王垠觉得自己应该是 principal,但他估计从来没有意识到这个问题。如果一个 principal 要有能力帮助几个 senior,让他们做得比各自单干要更好,那作为 principal 的王垠要解决什么问题呢?(如果他真的有思考过和解决过这样的问题,从他的博客是能看得出来的。没有就是没有,这没办法装。)

回到最初提问者的问题上来,其实很多中国人晋升的瓶颈真的不在 technical 上面,但 technical 在优化下去对全局的贡献不大。你需要意识到自己当前的瓶颈在哪里,是什么阻碍了你的输出指数级上升,然后专注于解决这些障碍。还是回到上面所说的,不要等着别人告诉你你的问题在哪里,你要在千千万万的问题里面找出来你身上的什么问题如果解决了你能更快地成长。

因为原文链接已经 404,所以下面附带 Google Cache:

微软感受

在微软两个月了,也可以说一说自己的感受了。简言之,我并不觉得微软是可以发挥我才能的地方。我觉得我在浪费自己的生命。


在微软的感觉,总的说来其实是烦和累。按理说在这样稳定的大公司,工作时间不应该超过6点(甚至5点),然而我经常看到有人7,8点还在办公室忙乎,甚至有人半夜还在通过 vpn 工作。当然,没有人明确要求我必须待在那里,然而看到那么多人7,8点都还在,包括大小两个 manager,我会担心自己如果每天按时6点下班,会有什么后果。从来没有队友对我轻松的说:“今天星期五呢,你怎么还在这?该回家啦!” 相反,我会在星期五下午5点还收到这样的 email,说:“PM还在等着测试结果呢,我知道你的机器出问题了,你能不能再加把劲,重装下系统,跑这些测试?” 你可能不知道,跑这些测试是要好几个小时甚至一整天的。上一次装那个系统,需要绕过各种毛病和脚本的 bug,来回折腾,到处问人,花了我好几天时间。


这两个月以来,我做出了应有的努力去融入自己的团队,去理解自己所在的项目,掌握自己所需要的工具,手到擒来。然而两个月以来,我越来越感觉到这个公司气氛的封闭和压抑。仿佛每个人都怕别人抢了自己饭碗似的,不想跟你多说。我发现有好些人从来没有接触过 Windows 以外的其它系统,从来没接触过 Java。我发现自己所做的事情,被局限于修补别人遗留下来的 bug 这种毫无趣味的工作,这跟当年在 Coverity 做的事情没有很大区别。我并没有感觉自己是在被引入到更加重要,有趣,可以发挥自己才能的任务,而是被故意圈在一个小范围。


微软在招我的时候,努力的压低工资和职称,比我之前的职称还低,还跟我说什么“小公司的职称不算数”。我本来早就不满意之前的职位了,你还给我降一级,所以被我一怒之下断然拒绝。结果不得不加了工资,改口说那职称是为了我 performance review 的时候有优势,进去之后会很快给我升职。我将信将疑,最后还是决定进来看看。不过到现在我逐渐感觉到,他们确实不知道我的价值,没有考虑过我将来的发展。根据两个月以来我跟各种级别人士的交流和切磋,我在微软的职位应该至少是 Principle Engineer。因为还不熟悉微软的工具和流程,我可以暂时委屈一下,然而看见我每天干的那些无聊事,我没有看到成长的希望。我对职称,薪水和工作内容,都相当的不满意。由于这职称跟我的水平差距实在太离谱,我都不好意思把微软的工作列在我的 Linkedin 上面。


好多年没碰 Windows 了,再拿起来,发现它并没比以前质量好很多,几乎每天都要重启才能解决某些问题。内部工具(包括 Visual Studio,Roslyn 静态分析和各种工具性质的 Powershell 脚本)也有很多莫名其妙的问题,你按说明做了,却不能得到期望的结果,还不给你合理的反馈信息,所以倒腾半天还不知道为什么,没法继续做该做的事。微软有些东西的设计理念确实美好,然而实现的细节里面,就有各种问题。俗话说,一切都在于细节。所以你就发现,成天都在反复倒腾,得出的结果却非常少。很多时候,工作时间长并不是因为工作太多,而是因为工具不可靠,工作方式太笨。


在微软工作之后,我似乎理解到了 Unix 和 Mac 的某种优点。Unix 的设计确实是丑,然而它把这种丑给标准化了,做得一丝不苟。我们说要做成那个丑样,那它最后就一定是那个丑样,而不是别的。丑是丑点,但你用的时候不会有出人意料的毛病,所有的毛病都是有文献记载,载入史册的 :P


有些莫名其妙的问题反反复复折腾那么多次,费那么多时间,到后来我发现自己眼睛都花了,头脑都麻木了,都快忘了自己是谁了。这就像一个在工厂拧螺丝钉的工人,而且那些螺丝钉不大可靠,一次还拧不好…… 这根本不应该是我做的工作。由于这种情况,目前我并没有在微软久呆的打算。过一天算一天,做做其它打算吧。


(有人跟我说有微软员工想把我的文章翻译了给我老板,我请这些人尽管翻!其实我早就想写一篇英文的,把跟美国公司的这些经历永远公开记录在案,并且把某些特别恶劣的公司告上法庭。我早就觉得微软的中国人好多阴阳怪气的,甚至在微软内部的华人论坛背地里讨论我。我不屑于认识这些人。)