孫鵬:在微軟學(xué)到的幾個(gè)小技能
2005 年 7 月 11 日,我從學(xué)校畢業(yè)加入微軟工程院,在 Exchange Server 團(tuán)隊(duì)做開(kāi)發(fā),當(dāng)時(shí)的老板就是現(xiàn)在小米合伙人 KK Wong 和林斌。2010 年 4 月份我離開(kāi)微軟加入小米的創(chuàng)始團(tuán)隊(duì),雖然當(dāng)時(shí)差三個(gè)月到才五年,還是拿到了五年的紀(jì)念,一個(gè)玻璃磚,不小心摔碎了一角,我至今還保留著。
最近五年,除了有時(shí)候去找老同事聊聊天順便挖幾個(gè)人,偶爾要個(gè) Windows 的注冊(cè)碼之外,和微軟沒(méi)有任何業(yè)務(wù)往來(lái)。直到春節(jié)的時(shí)候 Windows 團(tuán)隊(duì)和小米接觸打算移植米 4 上的 Windows,我才又大規(guī)模接觸微軟的團(tuán)隊(duì)?;厥走^(guò)去,有幾個(gè)在微軟學(xué)到的小技能,讓我和我的團(tuán)隊(duì)受益很大,寫(xiě)出來(lái)分享給大家。
Code Review (代碼審查)
加入微軟之前,我在學(xué)校寫(xiě)了無(wú)數(shù)代碼,和其他自學(xué)成才的程序員一樣,大家都是各做各的,很少和其他人交流,大多數(shù)時(shí)間是在網(wǎng)上找資料,再自己琢 磨。到了微軟之后,我加入的團(tuán)隊(duì)是和美國(guó)總部的工程師一起工作,分配了一個(gè)資深的工程師來(lái)給我做 Code Review,我還記得他的名字叫 Branden,其實(shí)年齡比我還小一歲,不過(guò)我研究生畢業(yè)參加工作的時(shí)候,他已經(jīng)工作五年了,囧 rz。
在微軟的工作流程里面,Code Review 是非常重要的一步,翻譯成中文是“代碼審查”,我不喜歡這個(gè)翻譯,因?yàn)槠鋵?shí)并沒(méi)有上下級(jí)審批的意思。在工作中不一定是有經(jīng)驗(yàn)老手的給新手做 Code Review,新手也可以給有經(jīng)驗(yàn)的做 Review,只要看不懂的地方就可以提出來(lái),看不懂說(shuō)明對(duì)方寫(xiě)的代碼不容易維護(hù),將來(lái)寫(xiě)的人走了換了個(gè)人負(fù)責(zé)就會(huì)有問(wèn)題。而且這來(lái)來(lái)回回的流程也是互相 學(xué)習(xí)的過(guò)程,你會(huì)發(fā)現(xiàn)原來(lái)這個(gè)地方還可以這么寫(xiě),既然要互相學(xué)習(xí),那做 Code Review 的人也要像寫(xiě)代碼的人一樣認(rèn)真思考,假裝如果是我寫(xiě)的話會(huì)怎么辦。
我剛?cè)肼毜臅r(shí)候印象最深的是美國(guó)同事的耐心,我寫(xiě)的代碼他非常仔細(xì)的看,提了非常多的意見(jiàn),我按照他的意見(jiàn)改一遍,再提交給他,他再提意見(jiàn),我 再改,最多的時(shí)候有十幾個(gè)來(lái)回的,有時(shí)候我都覺(jué)著煩了,但還是忍住了,確實(shí)對(duì)方提的意見(jiàn)都是對(duì)的。幾年后我到了一個(gè)團(tuán)隊(duì),我是里面最資深的員工,有一次在 Code Review 的時(shí)候給新入職的同事提了很多意見(jiàn),還幫他做了測(cè)試,給出了我的解決方案,可能讓他覺(jué)著很沒(méi)有面子,他對(duì)我表達(dá)了非常不滿的情緒,我非常淡然,并感受到了 一種輪回的感覺(jué),因?yàn)?Code Review 就是這樣的。
加入小米之后,才發(fā)現(xiàn)中國(guó)大多數(shù)公司是沒(méi)有 Code Review 機(jī)制的,這讓我非常懷疑他們的代碼質(zhì)量。還好 MIUI 團(tuán)隊(duì)最早的工程師都是從微軟過(guò)來(lái)的,盡管我們拋棄了所有可能降低效率的流程,比如再也不寫(xiě) Design Spec,減少無(wú)關(guān)的測(cè)試等,但是始終堅(jiān)持做 Code Review,并且和在微軟的重視程度一樣多。當(dāng)時(shí)有從別的公司過(guò)來(lái)的同事拒絕接受別人給他提的意見(jiàn),頑固堅(jiān)持自己的風(fēng)格,我們就讓他去別的團(tuán)隊(duì)做新功能 去了。因?yàn)橹挥羞@樣,才能保證在團(tuán)隊(duì)快速擴(kuò)張的情況下,保證工程質(zhì)量和同樣的代碼風(fēng)格。這里還要感謝 Google 做的代碼管理工具 Gerrit,讓我們做 Code Review 比在微軟的時(shí)候都要方便。
Email and Rules (郵件與規(guī)則)
工作中難免會(huì)收到很多郵件,但是我國(guó)人民好像不喜歡用郵件來(lái)交流工作,每次我看到同事的郵箱有幾千封未讀郵件的時(shí)候,就感覺(jué)到了一種無(wú)奈。遇到 孺子可教的新同事,我會(huì)告訴他,每天把郵件處理掉,保證沒(méi)有未讀郵件是一種美德,不信你看我郵箱,一封未讀郵件都沒(méi)有。其實(shí)這里面并不需要勤奮,秘訣就是 把不該看的郵件都直接刪掉。
一般來(lái)說(shuō),正常的郵件原則是,如果發(fā)件人需要你來(lái)相應(yīng),會(huì)把你放到 To 里面,如果只是需要你知情,那會(huì)把你放到 Cc 里面,如果以后不希望你再介入,會(huì)把你放入 Bcc 里面。所以要把出現(xiàn)在 To 里面的郵件單獨(dú)列出來(lái),優(yōu)先處理。然后再把出現(xiàn)在 Cc 里面的列出來(lái),看看就行。其他的如果是發(fā)給你在的小團(tuán)隊(duì)的,和 Cc 其實(shí)差不多的,看看就行。其他的,刪掉就行,不看沒(méi)啥損失,如果有問(wèn)題,也是發(fā)件人的問(wèn)題,誰(shuí)讓他不按牌理出牌呢。比如不把收件人放在 To 或者 Cc 里面,但是正文里來(lái)個(gè)@,以為這是微博呢,親?當(dāng)然公司的行政發(fā)的通知除外,所以要把重要人物(CEO,部門老大,行政主管等)發(fā)的郵件單獨(dú)列出來(lái)。
怎么把不同優(yōu)先級(jí)的郵件分出來(lái)?郵件規(guī)則就是干這個(gè)的。為什么我知道這么多?因?yàn)槲以谖④浀臅r(shí)候就是做這個(gè)的。如何設(shè)置郵件規(guī) 則?Outlook 里面有很多介紹,我就不多說(shuō)了。當(dāng)然有從 Google 來(lái)的同事說(shuō)只要把所有的郵件導(dǎo)入到 Gmail,然后 Gmail 會(huì)自動(dòng)幫你搞定,我表示還沒(méi)有得到。
Calendar/Freebusy (日歷)
這個(gè)是高級(jí)技能了,因?yàn)榇蠖鄶?shù)人用不到,我也是最近才需要的。公司大了最大的表現(xiàn)就是會(huì)多,找人開(kāi)會(huì)難,因?yàn)榻?jīng)常對(duì)方有別的會(huì),時(shí)間對(duì)不上,有時(shí)候想想也挺可笑的。這種情況,經(jīng)常要打很多電話,或者在微信/米聊里面溝通才能搞定,還有臨時(shí)變卦的。
其實(shí)微軟提供了一個(gè)很好的工具,那就是日歷。首先,把自己的安排都記在日歷里面;然后,開(kāi)放權(quán)限讓同事看到你的日程,可以只看到時(shí)間段。這樣, 如果大家都這么做,那召集大家開(kāi)會(huì)的同事就可以在日歷里面把大家都加進(jìn)來(lái),找一個(gè)大家都有空的時(shí)間段。這個(gè)技能只適用于服務(wù)器是 Exchange Server 的郵件系統(tǒng)。
我現(xiàn)在所有的安排都放在日歷里面,不論工作有關(guān)還是無(wú)關(guān)的,連理發(fā)和踢球什么的都有,還養(yǎng)成了一個(gè)習(xí)慣,只要不在日歷里面的都會(huì)自動(dòng)忘掉,所以 一件事沒(méi)有放在日歷里面的時(shí)候就很焦慮,還要手機(jī)就在旁邊,加起來(lái)很方便。公司外面的人要和我約一個(gè)會(huì),打電話的比較多,但我都會(huì)提醒對(duì)方通過(guò)郵件發(fā)一個(gè) Meeting Request 過(guò)來(lái),這樣方便大家都記住時(shí)間,大多數(shù)時(shí)候從語(yǔ)氣來(lái)看我謹(jǐn)慎懷疑對(duì)方并不用日歷。
以前 MIUI 并沒(méi)有好好做日歷,原因是統(tǒng)計(jì)表明我國(guó)人民根本不用日歷,使用率非常低?,F(xiàn)在好像開(kāi)始發(fā)力了,估計(jì)是因?yàn)槲覐S員工自己有需求了,做好了可以提高工作效率。