1. 程式人生 > >在蘇州微軟的三個月實習(二)

在蘇州微軟的三個月實習(二)

上一篇 主要說了下我的mentor 。 這一篇把我的實習過程再具體一些,以及我和在同一個會議室的最終在微軟工作的另一個實習生的互動(叫他Fox吧,就是前面和我交換任務的人。)另,我們的會議室是四個人共享的。另外兩個人叫他們 Hippo 和 Snake吧,其中Snake 是女生。如果你想最終留在MS,也許 Fox 和 Snake 的做法你可以參考。或者從我和Hippo 的 反例中吸取教訓。至於為什麼acm金牌的Hippo同學被淘汰掉,而演算法上幾乎一無所知的Fox 卻能拿到SP,就是另一個故事了,如果有時間我另寫一篇。

一年後再寫這篇,是因為nerd如我,當時有很多地方都沒有想清楚。
在這裡插入圖片描述

報道當天,我和另外兩個一起住的女生坐在一個桌子周圍閒聊,Fox主動上前自我介紹。然後,時間到了,所有人集合,HR 發工卡(不知道為什麼我和另外兩個人沒有工卡?)HR 帶我們(二十個左右?)到會議室收集材料,講下實習的注意事項,再帶我們上樓去各自的會議室。此時有部分人拿到紙或紙條,我沒拿到。我這個時候由於還在糾結工卡和紙條,反應慢了三拍。會議室四個位置,如下圖。Fox 反應最快先到了最裡面的位置,Hippo 反應也算快,佔了裡面那排的第二個位置,Snake 雖然不及他們但還是的走到外側靠裡的位置,然後我才反應過來,但是隻剩下靠門的位置。由於我們的會議室的門是常開的,所以從此刻開始,路過的人都可以看到我在做什麼,而我如果不回頭,並不會知道是誰路過。
H

i p p o F o
x
S n a k e \begin{matrix} Hippo & Fox \\ \\ 我 & Snake\\ \\ 門 & 玻璃牆 \end{matrix}

接著只好裝機器,由於Snake 是女生,Fox幫Snake裝了機器。裝好機器後開機需要用自己的使用者名稱密碼登入。我才知道前面那個紙條是密碼。此時Fox 和 Hippo 是有密碼的,我和Snake沒有密碼,就只好等待。 交流中我們發現,我和Fox 是相同的manager。然後是 Snake 的 mentor 過來找她,Snake 向他說了沒有密碼的情況,此時我順帶問了一下我該怎麼得到密碼,得知我的manager 在 休假,然後就進入一種不知道做啥的懵逼狀態。中午 我和Fox 被另一個team的manager叫去吃飯。Hippo 和 Snake 大概後面被另一個team叫走。無聊的午飯後,Fox 提出我們可以去見一個先來的實習生Dolphin,去問下情況,Dolphin告訴Fox 那個密碼要先在別人用過的機器上登入才能啟用,然後Fox 在Dolphin的幫助下,激活了自己的賬戶,此時另外一個和Dolphin同一個會議室的實習生Bull 問了我的情況,然後他說他有我的manager的微信,可以幫我問下,於是我從他那裡要了manager的微信,並在好友驗證資訊中問了下。回到四人的會議室等待。這期間Fox 協助 Hippo 激活了賬號,Snake 的 mentor 幫他搞到了密碼,也在Fox的協助下激活了賬號。一段時間後,manager 通過了我的好友請求,把密碼發給了我,然後我在 Snake 的幫助下激活了賬號。(雖然啟用密碼的順序完全是外因決定的,但是不知為何這個層級模式一直延續到實習結束。)

啟用密碼後,Hippo 和 Snake 陸續被分配了事情做。我和 Fox 則 無事可做只好聊天。鑑於是在微軟,就聊到 C# 和 typescript 。Fox 說他是會這套東西的,而我自己的技術棧是 C++/Python/Linux 所以不好說啥,只能對Fox 說,自己不會C# 後面請他多多指教。(我不知道這句客氣的話是否強化了他在四人中的層級。不過,對MS感興趣的同學,C# 和 typescript 或者其他微軟系東西可能還是要提前瞭解一下的,雖然對多數人來說過一遍語言的基礎語法不過是幾個小時的事情)
裝完VS後,無所事事到下班時間。他們其他三個人開始準備走,我當時還是一臉懵逼狀態,想在公司多待會,再稍微適應下。然後Fox,過來和我說一起走吧,我不肯,然後其他幾個人開了個加班的玩笑,他又勸我一起離開。我不好顯得太不合群,只好和他們一起離開。(提到這段是因為,第二天角色對換,我勸說Fox 一起下班,Fox 並沒有被說動。並且Fox 從第二天開始每天加班。這裡注意下,是否和其他實習生合群是不重要的,重要的是要和FTE合群。我說下 Fox 的 加班策略 吧,週末加班兩天干活,並在週一對上級謊稱兩天的活自己是用兩個小時做完的。這個策略的效果特別好,後面的同學可以試一下。)

第二天,我的 manager 開始上班。於是我在 Skype 上問了下工作內容,等待 manager 回覆。這期間 Fox 表達了他不知道要不要去問的糾結。然後我等到 manager 的回覆, 他說到他那裡去聊下,然後我就叫上了Fox 一起去。一開始我對 Fox 的印象還是很好的,而且既然是同一個manager,就很順理成章互幫互助。(這裡要學習的點,同學們如果有什麼糾結和猶豫的要不要做的事情,可以忽悠其他實習生先做,如果他們錯了他們捱罵,他們對了你可以搭車)

然後被分配一個數據處理的任務,後面的時間我就都在忙自己的事了。這期間Fox 也被分配了他的工作。

第三天,前一天 Tensorflow 的環境已經搭好,並且寫了幾個小程式測試,也沒問題。就差資料了,於是上午去問manager指定的人,他又詢問了一些人後,得到沒有資料許可權的結論。於是我又無事可做。然後我寫了個 .net 的 web server 的 hello world,執行沒有問題。我再嘗試VS的其他框架的模板(不知道為啥 .net 的專案模板有一堆),其中有個hello world 執行不起來,我試了半天還是無解,鑑於Fox 說他對C# 比較熟,我就去問了下(這是我犯的第一個大錯!),然後 Fox 先是 說他從沒見過在一個solution下放多個 project,然後我用很輕語氣的反駁說這其實是十分常見的做法,然後Fox 試了下並沒有解決我的問題,然後他突然把VS關了,重新開啟後我的hello world 就可以運行了。 於是Fox 通過重啟VS 解決了 他被問的第一個問題,然後他就開始bragging 萬能的重啟。(VS 這種神奇的需要重啟的 bug,成為 Fox 在四人中樹立威望的第一步。另,如果後來的同學遇到什麼bug,首先建議重啟。)

下午晚些時候,manager找了另一個任務給我,做一個 bot。指定使用 Dorado 做,釋出到 Cortana 上,作為一個Cortana 的 skill 。然後我開始研究manager 郵件發給我的連結。這一天是週四。週五也在看這個東西,寫了個小的bot。

玩了一個週末,週一回來,向 manager 彙報,並商議結合微軟影象識別 API 小 bot,我就是在這時嘴欠向manager提出能不能接觸一些和專案有關的事情的(這是我犯的第二個大錯)。 此時 Fox 做的事情也有很大的進展,他的任務是把一些資料遷移到一個 team 沒用過的資料庫,他從坐在他旁邊的 Hippo 以及其他 FTE 那裡得知了這個資料庫具體使用方法。下午晚些時候,我未來的mentor(Monkey)到我們的會議室,和Fox確認Fox的想法,兩人都認為這個資料遷移沒有意義。Fox 和 Monkey 很能聊到一起去。(實際上Fox 和除了我之外的任何人都能聊到一起,而這點的要比 一個人的技術水平 重要一個數量級。此處注意一點,整個三個月的實習Monkey 和我面對面交流的時間 總共不到5分鐘,還是我到他工位那裡去。但是這一次他在Fox的工位和Fox 面對面聊了半個小時以上。)

然後Monkey教Fox 向 Manager 說 他們的共同結論,並且說他不方便直接向Manager 說,於是Fox 去向 Manager 說 , Manager 回覆他(這句是從後來被轉發的郵件中找到的):

要不要做的事情讓 老大們 去決定。
我們要做的是全力以赴的搞定它 如果有問題及時讓老大們知道

此時,Fox 一臉委屈地向我們說,他被manager罵了。(這個技能一般是女生用的,比如一些女生會在考試後聲稱沒考好求安慰,你好心去安慰,結果成績出來,人家的沒考好是95分,你只有80+)

第二天上午,我和Fox 被 manager 叫到另外一個會議室,要求交換任務,然後manager大致給我講了下,我並沒有聽太懂,我沒有繼續問,因為感覺我可以後面問Fox。

然後我們開始交換任務。我的那個任務由於是後分配的一共就做了兩天(前面兩天在看 tensorflow),也沒多少可以交接的。但是他這個相當於做了4天(後來知道他會加班,所以實際上是6天的工作量),所以要交接的比較多。這個地方可以看到,工作的連續性也是很重要的。

我把前面我寫的Dorado相關的文件以及官方文件發給他,並且講了下官方文件,以及我後面計劃做的東西。

他把一堆官方文件的連結發給我(他其實寫過文件一類的東西,但是沒有發給我,是 manager 後面把這份東西轉給我的),和一些Skype 的聊天記錄。注意,這個並不是全部資訊,因為他的資訊很多是和人面對面或者語音得到的,所以我得到了總資訊量不到1/4的幹梆梆的文字,我好像問了一堆問題,但是他也並沒有給我解釋清楚,我當時唯一明確的是我需要去填一個web表單,然後點submit。第二天下午我去找 Monkey(因為 Monkey 下午才上班),這是 Monkey 和我第一次見面,他很不高興的樣子,我和他解釋 manager 讓我接手這個事情。然後我們再次確認 下一步應該就是去網頁上填那個表單點選提交,但他說 prod 的 log 不能拿來做實驗,然後我問有沒有可以拿來做實驗 dev 的 log,他說要現做一個,有點麻煩,不過他又說提交那個表單只是會把資料複製一份,並不會影響 prod 的 log 資料,所以我問他,既然不會影響 prod 的 log 這樣不就可以直接拿 prod 做,然後被他回,“你是傻逼嗎?我剛說 prod 不能直接做。”

我沒什麼好說的,只能回到工位等他建立個 dev 資料庫。

注意到這件事奇怪的地方了嗎?資料庫的操作許可權只有 Monkey 有,我只有填那個表的許可權。所以整件事的工作量完全在 Monkey 那裡,我只好等他搞好 dev 的 log。(你可能看出來了,這裡其實還有一個問題,為什麼的dev 環境是沒有 log 資料庫的?MS 的 CI 的混亂?而 Monkey 應該是運維類的職位。)還有就是,從開始接任務到這一刻,沒有任何人跟我提過資料庫中的內容只是用來做網站效能分析的log,很久後我搜郵件,只有Fox 給的一堆東西的某個角落裡提到了故障排查幾個字。所以在之後的一個半月中,我都是不知道自己操作的資料是什麼的。

他建立後,我去填那個表,引數很多不知道怎麼填,我逐一問過他,提交時一直報錯,找不到原因。( 這個時候我不知道填那個表格的平臺是做什麼的,也不知道那個網站和我要migrate的源資料庫和目標資料庫的連結關係,更沒有查詢資料庫log的許可權,從網頁上顯示的簡短的出錯資訊上又猜不出是什麼原因。)當然現在的我知道可以直接去問 目標資料庫的 或者那個網站平臺的 客服一類的人(雖然依然可能無解)。不過當時一臉懵逼,懷疑是自己的表格填錯了,於是嘗試各種組合(我只有填表格的許可權),還是錯的,儘管有不同的出錯資訊。

然後,從現在的角度,一個比較自然的想法是再建個源資料庫試一下,但是我沒有許可權,我需要向Monkey請求。(我不知道是否因為中午的嘲諷和侮辱,我沒有問,這點算我的錯吧。)我當時只是把錯誤上報,等待Monkey下一步指示,但並沒有指示。週三上午Manager幫我和Monkey向使用目標資料庫的隔壁組 schedule 了一個遠端 meeting。

下午Monkey 告訴我他直接用 prod 的 log 去嘗試依然是失敗的,並且他向隔壁組發了郵件詢問。(由於prod這個做法我是不能試的,節奏完全是由他來掌控的,我由於沒有足夠許可權什麼都做不了。)
由於時區的關係,週四早上早起,參加那個meeting。這裡補充下,當時遷移資料的源資料庫是定好的,但是我們覺得目標資料庫有兩個選擇:

  • 官方提供的測試叢集

  • 和這個組共用他們的叢集

(不知道你是否看出這裡的問題。一般來講應該是有第三個選擇的,即,直接從目標資料庫團隊那裡購買叢集服務。不知道為什麼 這種最正當 的 選擇直接被排除掉了,不過還是會為 自己所在的 team 在 這種事情上的 摳門 感到 隱約的不安。)

所以meeting有兩個目的:

  • 1)我們已經嘗試過了使用官方的測試叢集,但是行不通,搞明白是哪裡有問題

  • 2)如果確認1是行不通的,那麼可否共用叢集,如何獲得許可權

其實我自覺聽力很好,但是由於對方的口音實在很重,我聽得不是很清楚,而且我只在 meeting 的一開始說過話,後面就完全被 Monkey 主導,聽不清的地方我也沒有辦法打斷問。於是在我一臉懵逼的情況下 meeting 結束了,我像 Monkey 詢問,最後一段話我沒聽懂的話是什麼,他沒解釋那段話,只是把我前面聽懂的翻譯了一遍。然後讓我郵件要求對方的資料庫接受我們的 SG 的 Access 請求,我按要求發郵件,然後被對方在第二天週五回覆,

As discussed yesterday, please create another sg for your team. I will then add the sg to list of access groups for the clusters.

(所以沒聽懂,也要假裝聽懂,反正郵件是以實習生名義發的,錯了只能說明實習生是傻逼)

然後週五上午我按照郵件的要求,去建個 SG ,但是尼瑪,SG 要求 owner 一定是FTE,此時 Monkey 還沒有上班,我只好四處求助,有人說要我等Monkey來,不過後面Manager直接幫我建了一個,我用建好的SG 回了那份郵件。對方週六回郵件已把資料的許可權加好。週一我寫個了個不知所謂的回報進度的報告。主要包括目的資料庫的使用。但是報告中有一個嚴重錯誤的資訊,提到了某個人沒有回郵件,Monkey 在前面發過那封郵件,在我特意問過這個人是誰的情況下,他也沒有沒有告訴我那個收件人是錯的。(這裡算是個笑話吧,不過你可以想到MS的混亂。)

Monkey在收到週六的會後,大概試了一下,發現了缺少 create 資料庫的許可權,然後Monkey 獨立(沒有告訴我,後面被轉了郵件才知道)申請了許可權,該許可權在週一被 approve,此時整個的許可權應該就已經配置好,可以進行正式的遷移了。但我被 manager 要求參加 hackthon 。

然後我特意問了 hackthon 和 這個任務的優先順序。manager 說 hackthon 優先順序高(後面的同學可能需要注意一下 這個,事實上,確實很多最後轉正的人都參加了 hackthon ),然後我按照指示填了相關的報名資訊,並開始做 android 的 app 的開發,由於 hackthon 的比賽是週三,所以我只有不到兩天的時間完成 android 原生 app 開發從入門到放棄的過程。

說下我要做的,從前置攝像頭在視訊流中 獲得圖片,使用臉部識別的API,得到手機前面的人(如果有人的話)的表情,然後呼叫 manager 寫好的動畫函式,在螢幕上播放相同表情的動畫。

其實這也是一件沒有什麼難度的事情,但我自己的手機是 iphone!!!
Manager開始說他可以在週二給我找個android手機,但是晚上發現公司並沒有回上海的班車,所以我只能自己解決了,然而android studio 裝在公司電腦上(android 官網被封,只有MS內網可以在短時間吧android 開發環境搭好,所以我回住處借室友手機開發不可行),而用android的小夥伴們晚上都要回家,我就進入了一個無解的局面。於是第一天,我配好環境,模擬器運行了下,大致看了下程式碼後,就只好不甘心的回到住處,然後我在行李中翻到了一個很老的勉強能用的android 手機。這個手機電池壞掉,拔掉電源線會關機,這個是我四年前的手機,我帶著它是為了防止我的iphone 發生意外。我以為是好運,幸好我來蘇州時帶來它,結果我錯了,這個其實是悲劇的開始。週二我用這個android手機寫了一天的程式碼,由於下班時依然沒有調好程式,只好在公司熬夜(第二天的上班時間別提那個難受)。由於這個老手機是 android 4.0.x, 用的camera 和 android 5 不相容,所以我週二熬夜寫好的程式週三在往 Snake的android手機上刷時,出現了異常,當時已經來不及改程式碼。只好又刷回沒有攝像頭的原始版本去結合 manager 的其他硬體去 hackthon 上 demo,相當於我什麼都沒做。

我在等待和焦慮中度過上週時,Fox 的 bot 做好了,不過是用 wechat 小程式做的。主要是寫個小程式的後臺,上傳個圖片,用圖片地址去調個API,把返回的文字返回給客戶端,這個難度你們都懂的。不過這件事情神奇的地方在於,這個 bot 並沒有滿足我被分配任務時的要求(使用Dorado 框架做Cortana 的 skill ),不僅沒有滿足,而且是兩個要求一個都沒有滿足,我在交接時也特別的和 Fox 說過這兩個要求 。一定要做 Cortana 的 skill 的 這個要求 ,Manage 轉給我過他 boss (Tiger)的郵件,似乎是硬性的要求。但是後面點評時又恰是 Tiger 對 Fox 做的這個東西大加讚賞。(微軟的管理層的非理性?還是Fox 有我不知道的後臺?)

此時他的工作都已就緒,唯一還差個視訊。於是週一週二他都在優哉遊哉的做視訊。如果讓我說Fox的技術上最強的是什麼,那麼絕對是他的視訊加工水平。雖然那個視訊和他的參賽作品幾乎無關,不過那個視訊還是很棒的。

他做好視訊後,就開始四處嘚瑟。

先是到我工位前裝作詢問是否需要幫助的樣子,然後我說了下我有個沒有捕獲到的異常,然後他給出各種莫名奇妙的除錯建議,比如在一個我已經在外層函式catch exception的函式中再加個try catch,我正在想怎麼說才能把他打發走,結果他直接動我的鍵盤和滑鼠改我的程式碼,當然他失敗了那個異常還是沒捕捉到。然後他又說了一堆裝逼且沒用的。看到這裡,你也許已經看出問題所在。我由於對 android 開發沒有任何基礎,當時甚至不知道要把 IDE 的 log 視窗開啟,我只是在通過執行時的輸出去判段出錯的位置。然後 Fox 一樣不知道 android 開發的常識,卻自信滿滿給我各種建議。(後面的同學可以注意下,在自己不懂的事情上裝逼也是很重要的技能。)

同時這段時間,他在未經我同意的情況下,在我除錯該死的 android 程式時,偷拍我,並上傳到他的小程式作為測試,而當時他和 Snake\Hippo 的關係都比我更親近,完全沒理由拿我做實驗。當時我注意力在除錯上,沒理他,現在想起來,這個行為真的好惡心。

週三,hackthon。由於前一天熬夜,我一整天都處在昏昏沉沉的狀態。下午 hackthon 過後,繼續做資料庫的事情,此時 Monkey 已經把那個表填好,不過還剩下了一個機械的把元資料庫的所有table都在網頁上填報確認遷移的步驟,於是這種麻煩的事情自然被丟給我做。這步還算順利。所以分配給我的第一件事情就算完成了,我本來以為後面可以做其他事情了,結果我錯了。由於一直是Monkey在主導,於是我後面的工作就變成用powerBI 這個巨難用的東西 去做這些log 資料的視覺化,這件事由於在源資料庫上已經做過,所以我以為我需要做的只是翻譯程式碼,沒想我到又錯了。說PowerBi 難用,因為PowerBi 基本是拖控制元件的風格,我的技術方向是後臺開發,十分不喜GUI相關的東西。(後面的同學可能要注意下,外企全棧類職位比較多,如果你更傾向純後臺開發,入職前最好問清楚。尤其在微軟是無法積累Linux相關的經驗的)

然後是一個會議,Fox 跟我我說他在糾結要不要去,然後拉我一起去,然後我就發現杯具了,是彙報進度的team例會。我的 hackthon 專案並沒有做完,hackthon 後的專案也只是剛剛開始,沒有任何可以彙報的。而他的hackthon 雖然是個一天就能做的專案,但是卻是完整的。這個時候我還沒有對Fox有什麼看法。(教訓是,不要想法太單純,被人推到火坑裡還不自知。)

這段時間,他時常發出各種感慨,並且讓Hippo 去看他的螢幕,於是我有時也去湊熱鬧。有次是我看到他螢幕時,他快速最小化了一個skype視窗,然後短暫的一刻尷尬表情,當時我沒多想。最後一次是他當時在改 typescript 那部分的程式碼,我當時對前端除錯一竅不通,於是指著螢幕中我不是很明白的地方去問他。他沒回答我,而是指責我戳他的螢幕,然後開始擦螢幕,我就只好識趣離開。

然後是一個 週末,由於hackthon受挫,我想可能自己也應該勤奮些,然後週六也去公司加了會兒班,我是下午才到的,我發現會議室的燈是亮的。Fox 已經在了。週日Fox 同樣在加班,那天,我在看文件,看到一個不知道是什麼意思的詞(英文意思知道,但是在文件中肯定不是那個常用的解釋),我看的那個文件他是讀過的,於是我就像工作日一直都在做的那樣問那個詞是什麼意思,結果被回,看文件,我以為他沒明白我的意思,我又了一遍,Monkey 回,“你自己不會看文件嗎?” 然後週一上午Fox 提交了一個PR,並且從前來指導 Fox 的 FTE 口中,得知 Fox 向 manager 說他自己用了兩個小時寫這個PR。(嗯,nerd 如我就是從這個謊言中開始懷疑 Fox 的,加上前一天的自己查文件事件,然後再回想他之前的種種,覺得相比之下自己是個 64k 純傻逼。)

下面幾個小片段,記不清是何時發生的,不過也許可以從中窺探到一些東西吧。

聊到廣東話,Fox會說廣東話,我問Fox 能不能教我,Fox回 北方人說廣東話難聽。

晚上聊天,Hippo 說蘇州房租很貴,Fox 回 說,可以找個女朋友平分房租。

一個 online 的talk, Fox 說他想聽沒有耳機,我提議把門關上,我開機箱的公放一起聽,Fox 說好,然後我關門開聲音,公放聲音比較小,效果很差,不過想想已經答應他了,就忍了。結果後來發現 Fox 並沒有聽。

一次討論到域名,我說我的域名在公司內網無法訪問,不知道是域名被封還是 vps 被封。然後Snake 捧著我說,並說她也想把這套做一下。Fox 在一旁插嘴,這個東西很簡單,我就只好閉嘴。然後 Fox 把他做的同樣的事情吹了一通。

四個人吃飯,忘記是什麼引出的話題。Fox 模仿女性口吻評論口紅的色號,Hippo 和 Snake 給他捧場,我差點吐了。

週四小蛋糕,Fox 拿了兩個。(這種蛋糕都是預設一人一個的)

有次聊天,我們提到各公司的筆試題難度比較。Hippo 是 acm 金牌,筆試自然沒有什麼問題。Snake 沒有專門搞過競賽,不過她後來提到專門請人輔導過演算法。我由於本科學校不重視這方面的比賽,也沒有參加過,不過我靠自學+刷題的野路子也能全部 AC 很多筆試。Fox 是隻有專案經驗的。演算法能力比較應該是 Hippo >> 我 >> Snake > Fox。然後就提到我們拿到實習的那次筆試,我AC 兩道,Hippo AC 一道,Snake AC 一道(還是半道?),Fox 一道都不會所以一道都沒做。按理說,看到試題沒有AC 就應該已經沒有面試資格,但是 Fox 說他後來收到第二次的筆試的簡訊(由於第一次筆試的難度淘汰了很多人,於是第二輪筆試 MS 出了很簡單的題目放了水)。然後是我們對作弊的看法,我堅決反對作弊,Hippo 由於 他本身的 acm 經歷也是反對作弊的。但是 Fox 講了一些他見過的作弊的例子(我記得沒有表示過反對),Snake 也說她沒覺得作弊有什麼不對。