2005 年 7 月 11 日,我从学校毕业加入微软工程院,在 Exchange Server 团队做开发,当时的老板就是现在小米合伙人 KK Wong 和林斌。2010 年 4 月份我离开微软加入小米的创始团队,虽然当时差三个月到才五年,还是拿到了五年的纪念,一个玻璃砖,不小心摔碎了一角,我至今还保留着。
最近五年,除了有时候去找老同事聊聊天顺便挖几个人,偶尔要个 Windows 的注册码之外,和微软没有任何业务往来。直到春节的时候 Windows 团队和小米接触打算移植米 4 上的 Windows,我才又大规模接触微软的团队。回首过去,有几个在微软学到的小技能,让我和我的团队受益很大,写出来分享给大家。
Code Review (代码审查)
加入微软之前,我在学校写了无数代码,和其他自学成才的程序员一样,大家都是各做各的,很少和其他人交流,大多数时间是在网上找资料,再自己琢 磨。到了微软之后,我加入的团队是和美国总部的工程师一起工作,分配了一个资深的工程师来给我做 Code Review,我还记得他的名字叫 Branden,其实年龄比我还小一岁,不过我研究生毕业参加工作的时候,他已经工作五年了,囧 rz。
在微软的工作流程里面,Code Review 是非常重要的一步,翻译成中文是“代码审查”,我不喜欢这个翻译,因为其实并没有上下级审批的意思。在工作中不一定是有经验老手的给新手做 Code Review,新手也可以给有经验的做 Review,只要看不懂的地方就可以提出来,看不懂说明对方写的代码不容易维护,将来写的人走了换了个人负责就会有问题。而且这来来回回的流程也是互相 学习的过程,你会发现原来这个地方还可以这么写,既然要互相学习,那做 Code Review 的人也要像写代码的人一样认真思考,假装如果是我写的话会怎么办。
我刚入职的时候印象最深的是美国同事的耐心,我写的代码他非常仔细的看,提了非常多的意见,我按照他的意见改一遍,再提交给他,他再提意见,我 再改,最多的时候有十几个来回的,有时候我都觉着烦了,但还是忍住了,确实对方提的意见都是对的。几年后我到了一个团队,我是里面最资深的员工,有一次在 Code Review 的时候给新入职的同事提了很多意见,还帮他做了测试,给出了我的解决方案,可能让他觉着很没有面子,他对我表达了非常不满的情绪,我非常淡然,并感受到了 一种轮回的感觉,因为 Code Review 就是这样的。
加入小米之后,才发现中国大多数公司是没有 Code Review 机制的,这让我非常怀疑他们的代码质量。还好 MIUI 团队最早的工程师都是从微软过来的,尽管我们抛弃了所有可能降低效率的流程,比如再也不写 Design Spec,减少无关的测试等,但是始终坚持做 Code Review,并且和在微软的重视程度一样多。当时有从别的公司过来的同事拒绝接受别人给他提的意见,顽固坚持自己的风格,我们就让他去别的团队做新功能 去了。因为只有这样,才能保证在团队快速扩张的情况下,保证工程质量和同样的代码风格。这里还要感谢 Google 做的代码管理工具 Gerrit,让我们做 Code Review 比在微软的时候都要方便。
Email and Rules (邮件与规则)
工作中难免会收到很多邮件,但是我国人民好像不喜欢用邮件来交流工作,每次我看到同事的邮箱有几千封未读邮件的时候,就感觉到了一种无奈。遇到 孺子可教的新同事,我会告诉他,每天把邮件处理掉,保证没有未读邮件是一种美德,不信你看我邮箱,一封未读邮件都没有。其实这里面并不需要勤奋,秘诀就是 把不该看的邮件都直接删掉。
一般来说,正常的邮件原则是,如果发件人需要你来相应,会把你放到 To 里面,如果只是需要你知情,那会把你放到 Cc 里面,如果以后不希望你再介入,会把你放入 Bcc 里面。所以要把出现在 To 里面的邮件单独列出来,优先处理。然后再把出现在 Cc 里面的列出来,看看就行。其他的如果是发给你在的小团队的,和 Cc 其实差不多的,看看就行。其他的,删掉就行,不看没啥损失,如果有问题,也是发件人的问题,谁让他不按牌理出牌呢。比如不把收件人放在 To 或者 Cc 里面,但是正文里来个@,以为这是微博呢,亲?当然公司的行政发的通知除外,所以要把重要人物(CEO,部门老大,行政主管等)发的邮件单独列出来。
怎么把不同优先级的邮件分出来?邮件规则就是干这个的。为什么我知道这么多?因为我在微软的时候就是做这个的。如何设置邮件规 则?Outlook 里面有很多介绍,我就不多说了。当然有从 Google 来的同事说只要把所有的邮件导入到 Gmail,然后 Gmail 会自动帮你搞定,我表示还没有得到。
Calendar/Freebusy (日历)
这个是高级技能了,因为大多数人用不到,我也是最近才需要的。公司大了最大的表现就是会多,找人开会难,因为经常对方有别的会,时间对不上,有时候想想也挺可笑的。这种情况,经常要打很多电话,或者在微信/米聊里面沟通才能搞定,还有临时变卦的。
其实微软提供了一个很好的工具,那就是日历。首先,把自己的安排都记在日历里面;然后,开放权限让同事看到你的日程,可以只看到时间段。这样, 如果大家都这么做,那召集大家开会的同事就可以在日历里面把大家都加进来,找一个大家都有空的时间段。这个技能只适用于服务器是 Exchange Server 的邮件系统。
我现在所有的安排都放在日历里面,不论工作有关还是无关的,连理发和踢球什么的都有,还养成了一个习惯,只要不在日历里面的都会自动忘掉,所以 一件事没有放在日历里面的时候就很焦虑,还要手机就在旁边,加起来很方便。公司外面的人要和我约一个会,打电话的比较多,但我都会提醒对方通过邮件发一个 Meeting Request 过来,这样方便大家都记住时间,大多数时候从语气来看我谨慎怀疑对方并不用日历。
以前 MIUI 并没有好好做日历,原因是统计表明我国人民根本不用日历,使用率非常低。现在好像开始发力了,估计是因为我厂员工自己有需求了,做好了可以提高工作效率。