又黄又粗又爽免费观看,色吧电影网,军人武警gay男同gvus69,精品久久久久久久久中文字幕

這位知乎大佬,初中就開(kāi)始學(xué)編程,大學(xué)畢業(yè)后直接進(jìn)微軟...

[導(dǎo)讀]以前經(jīng)常有人問(wèn)我,位知微軟要怎么樣才可以去微軟。乎大后直其實(shí)我從來(lái)沒(méi)有想過(guò)這個(gè)問(wèn)題,佬初所以那個(gè)時(shí)候的中開(kāi)答案自然就是微軟的廣告(編程好,數(shù)學(xué)好,始學(xué)態(tài)度好)了。編程畢業(yè)09 年大四那會(huì)兒,大學(xué)剛好碰上了美帝的接進(jìn)次貸危機(jī),令我們這些想去美帝的位知微軟公司被剝削的這幫人倍感艱辛。


點(diǎn)擊上方“大魚(yú)機(jī)器人”,乎大后直選擇“置頂/星標(biāo)公眾號(hào)”

這位知乎大佬,初中就開(kāi)始學(xué)編程,大學(xué)畢業(yè)后直接進(jìn)微軟...

福利干貨,佬初第一時(shí)間送達(dá)!中開(kāi)

來(lái)源:vczh dwz.cn/sWwZoQEl


  • 中學(xué)
  • 大學(xué)
  • 實(shí)習(xí)
  • 轉(zhuǎn)正
  • Microsoft SQL Server
  • 跳槽
  • Microsoft Research Asia
  • 出國(guó)
  • Microsoft Office
  • 尾聲

vczh,始學(xué)本名陳梓瀚,編程畢業(yè)因知乎的大學(xué)個(gè)人信息介紹上寫(xiě)有“專業(yè)造輪子”,所以江湖人稱“輪子哥”。vczh大學(xué)時(shí)代就在微軟實(shí)習(xí),畢業(yè)后即加入微軟。開(kāi)始時(shí)是在微軟上海,后來(lái)進(jìn)入北京的微軟亞洲研究院。現(xiàn)已移居美國(guó)西雅圖,在Office組做工程師。

以下是輪子哥帶來(lái)的技術(shù)貼:

以前經(jīng)常有人問(wèn)我,要怎么樣才可以去微軟。其實(shí)我從來(lái)沒(méi)有想過(guò)這個(gè)問(wèn)題,所以那個(gè)時(shí)候的答案自然就是微軟的廣告(編程好,數(shù)學(xué)好,態(tài)度好)了。09 年大四那會(huì)兒,剛好碰上了美帝的次貸危機(jī),令我們這些想去美帝的公司被剝削的這幫人倍感艱辛。

所幸后來(lái)還是過(guò)五關(guān)斬六將,最后在實(shí)習(xí)結(jié)束之后成功留了下來(lái)。這其中的因果,顯然不是面試的那幾天所能夠決定的,因此還得從 hello world 講起。

中學(xué)

我有幸從初二開(kāi)始就學(xué)習(xí)編程。那個(gè)時(shí)候世界已經(jīng)處于一個(gè)現(xiàn)代化的程度了,操作系統(tǒng)都有虛擬內(nèi)存,有圖形界面,有因特網(wǎng),開(kāi)發(fā)軟件還有集成開(kāi)發(fā)環(huán)境可用,跟一些老前輩所描述的編譯一個(gè)程序還要換幾次磁盤的日子已經(jīng)完全不一樣了。

那個(gè)時(shí)候正值購(gòu)買電腦半年,處于看見(jiàn)什么東西都感到十分好奇的時(shí)候,再加上父親那個(gè)時(shí)候不太同意我玩游戲,所以我就在想什么時(shí)候也自己做幾個(gè)游戲,就可以光明正大地玩了。所以在聽(tīng)到汕頭華僑中學(xué)開(kāi) Visual Basic 5.0 的課的時(shí)候,感到比較興奮。但是其興奮程度比起初一為了上第一節(jié)電腦課興奮過(guò)度,騎自行車超速以至于流了一大堆血沒(méi)了幾顆牙的那一天,已經(jīng)可以忽略了。

那個(gè)時(shí)候還是 21 世紀(jì)的第一年,正處于上網(wǎng)費(fèi)用巨貴無(wú)比、Google 還剛起來(lái)沒(méi)多久基本沒(méi)人知道的時(shí)候,學(xué)習(xí)編程要比現(xiàn)在困難很多。當(dāng)時(shí)想尋找什么知識(shí),因特網(wǎng)基本上是沒(méi)什么指望的,所以我就有了一個(gè)沒(méi)事去書(shū)店的愛(ài)好。

沒(méi)過(guò)多久我就找到了一本《Visual Studio高級(jí)圖形程序設(shè)計(jì)教程》。這本書(shū)我很喜歡,插圖十分漂亮,而且還是使用 Visual Basic 編程繪制的,更是愛(ài)不釋手。可惜內(nèi)容過(guò)于高深,所以后來(lái)就有了初三的時(shí)候自學(xué)學(xué)會(huì)初步的立體解析幾何,以及高三上課不聽(tīng)講僅憑自己看數(shù)學(xué)分析后來(lái)還被我看明白了的故事。

中間因?yàn)樵噲D使用編程繪制很多復(fù)雜的圖形和對(duì)圖像進(jìn)行各種復(fù)雜的變換,于是每當(dāng)寫(xiě)程序之前都要在紙上推導(dǎo)長(zhǎng)長(zhǎng)的公式。如果程序的運(yùn)行結(jié)果不對(duì)了,根本無(wú)從調(diào)試,只好重新推導(dǎo),借以希望可以發(fā)現(xiàn)公式的幾個(gè) bug 以解釋為什么會(huì)出現(xiàn)錯(cuò)誤。

從此以后我對(duì)符號(hào)運(yùn)算就十分拿手。而且做數(shù)學(xué)物理作業(yè)也好,為了編程推導(dǎo)公式也好,需要計(jì)算的東西太多懶得到處尋找廢紙,從而便獲得了心算復(fù)雜過(guò)程的本領(lǐng)(可惜現(xiàn)在已經(jīng)喪失了)。這順帶還給我?guī)?lái)了一個(gè)好處,就是高考數(shù)學(xué)選擇題在發(fā)卷后不許動(dòng)筆的 10 分鐘內(nèi)就被我全部心算出答案,而且全對(duì)了。

圖形編程做久了,就想起了當(dāng)初的理想,于是就搞游戲去了。那會(huì)兒看到了成都金點(diǎn)工作組開(kāi)發(fā)的《圣劍英雄傳》,點(diǎn)燃了我開(kāi)發(fā) RPG 的熱情。在經(jīng)歷了幾次失敗之后,我終于在高二的正月初一那一天完成了《天地傳》的所有編碼工作,沒(méi)過(guò)多久就上傳到了 GameRes 的網(wǎng)站上。

這是我第一個(gè)行數(shù)過(guò)萬(wàn)的程序。為了順利完成它,我悟到了很多道理,包括為什么要面向?qū)ο螅瑸槭裁匆獎(jiǎng)澐帜K減少互相依賴。這也成為我后來(lái)開(kāi)發(fā)自繪圖形界面和腳本引擎的契機(jī)。后來(lái)我試圖用 OpenGL 做 3D 游戲,但是由于很難找到有共同愛(ài)好的美工跟我一起做,便作罷了。但是這卻讓我獲得了很多時(shí)間,可以投入到圖形界面和腳本引擎之中去。

后來(lái)我就萌發(fā)了解釋高級(jí)語(yǔ)言的想法。這是我整個(gè)編程歷史上的第一個(gè)轉(zhuǎn)折點(diǎn)。那個(gè)時(shí)候我數(shù)據(jù)結(jié)構(gòu)只會(huì)用鏈表,而且編譯原理也好,設(shè)計(jì)模式也好,都還沒(méi)聽(tīng)過(guò)。那個(gè)時(shí)候去解釋高級(jí)語(yǔ)言自然是比較困難的。因此我經(jīng)過(guò)很多天的苦思冥想自己想出了一個(gè)如今稱之為一遍編譯(也就是很爛)的方法來(lái)把一個(gè)簡(jiǎn)單的高級(jí)語(yǔ)言重新處理成一個(gè)簡(jiǎn)單的指令集語(yǔ)言,就跟匯編長(zhǎng)得差不多。

那個(gè)時(shí)候已經(jīng)高三了,所以其實(shí)也沒(méi)多少時(shí)間可以投入在編程上面,因此做出來(lái)的第一個(gè)原型是一個(gè)簡(jiǎn)化后的 Pascal 的解釋器,用 Delphi 開(kāi)發(fā)的。現(xiàn)在想起來(lái),里面肯定有巨多內(nèi)存泄露和性能問(wèn)題,不過(guò)當(dāng)時(shí)根本不知道這些東西是什么。在高中畢業(yè)之后的三個(gè)月無(wú)所事事的日子里,我就重新把這個(gè)東西設(shè)計(jì)了一遍,得到了一個(gè)幾十頁(yè)的計(jì)劃。由于后來(lái)沒(méi)來(lái)得及做完,就打印出來(lái)帶去了華南理工大學(xué)。

大學(xué)

剛進(jìn)了大學(xué)沒(méi)幾天,就聽(tīng)一個(gè)大四的師姐說(shuō)我們的班主任陳健老師是教編譯原理的,于是我就把這一疊紙拿給了她看。她什么也沒(méi)說(shuō)(現(xiàn)在回想起來(lái),只能是那一份設(shè)計(jì)實(shí)在是不堪入目……),就給了我一本編譯原理的課本。我很快就看完了,然后用了里面的知識(shí)做了第一個(gè)真正意義上的腳本引擎,語(yǔ)法山寨了 Java 語(yǔ)言的一些簡(jiǎn)單的部分,還添加了一個(gè)編譯的時(shí)候自動(dòng)把模板參數(shù)都改成 Object 類型的語(yǔ)法,起了個(gè)名字叫 Jove。后來(lái)上了 Java 的課,發(fā)現(xiàn) Java 竟然真的這么干了,讓我覺(jué)得好生奇怪。

后來(lái)我陸陸續(xù)續(xù)寫(xiě)了很多腳本引擎。大一的時(shí)候做的 Jove 是第一個(gè)我覺(jué)得還能見(jiàn)人的腳本引擎。第二個(gè)就是大二失敗了一整年吸取了很多教訓(xùn)之后,于大三開(kāi)發(fā)出的動(dòng)態(tài)語(yǔ)言,名字叫 Free(可以在我的博客 http://www.cppblog.com/vczh 上找到)。最近正在打算將其更新到 3.0 來(lái)配合一個(gè)正在開(kāi)發(fā)中的顯卡加速的 GUI 類庫(kù) GacUI。接下來(lái)就是在去微軟上海的 WCFTools 組實(shí)習(xí)的那一段時(shí)間里面,利用每天晚上的時(shí)間完成的一門純函數(shù)式語(yǔ)言叫 KernelFP,這后來(lái)成為了我的畢業(yè)設(shè)計(jì)。

提交了畢業(yè)設(shè)計(jì)之后,我又在畢業(yè)前的幾個(gè)月時(shí)間里面完成了 CMinus。這不是編譯原理課程設(shè)計(jì)上的那個(gè)簡(jiǎn)單到?jīng)]法再簡(jiǎn)單的 CMinus,而是一個(gè)完整的 C 語(yǔ)言編譯器(其中函數(shù)指針的語(yǔ)法被我改掉了,但是仍然支持)。其編譯結(jié)果是保存到內(nèi)存中的一段 X86 二進(jìn)制代碼,可以將函數(shù)的起始地址強(qiáng)制轉(zhuǎn)換成函數(shù)指針直接在 C++ 程序中使用,這是因?yàn)槲以谏芍噶畹臅r(shí)候遵守了 Visual C++ 中的一些在 MSDN 里描述得很清楚的約定。

畢業(yè)后我又雄心勃勃地做了 NativeX,是一個(gè)帶泛型以及 concept mapping 的 C 語(yǔ)言。前幾個(gè)月我又試圖山寨 C#,但是無(wú)奈 C# 實(shí)在是太復(fù)雜,所以轉(zhuǎn)而去做 GacUI。圖形界面(GUI)類庫(kù)我也寫(xiě)了不少。繼高中的時(shí)候?yàn)?RPG 而開(kāi)發(fā)的兩個(gè)控件類庫(kù)之后,在上大學(xué)的過(guò)程中使用 OpenGL 開(kāi)發(fā)的兩次 GUI 類庫(kù)均告失敗。后來(lái)還封裝了一次 Windows 的 API(Vczh GUI),試圖讓其易用性接近 VCL 或 WinForm。

畢業(yè)后我又嘗試發(fā)了若干次基于渲染的 GUI,換了幾次架構(gòu),一直到現(xiàn)在正在開(kāi)發(fā)的 GacUI 才感覺(jué)走上了正軌。我在這個(gè)過(guò)程中得到的一個(gè)結(jié)論就是:Windows Presentation Foundation 的設(shè)計(jì)實(shí)在是太完美了……在做這些東西之余,我還開(kāi)發(fā)了三次三維物體的軟件渲染程序,前兩個(gè)是在畢業(yè)前做的,最后一個(gè)是一年前因?yàn)橐幌伦硬恢酪绾卫脴I(yè)余時(shí)間來(lái)充實(shí)生活而開(kāi)發(fā)出來(lái)的,目的是用于打發(fā)時(shí)間。


在這里我想可以回答一個(gè)月前不能很好地回答師弟師妹們的一個(gè)問(wèn)題了。如何能夠在微軟找到工作?因?yàn)槲野盐疑厦孀龅倪@些東西都寫(xiě)進(jìn)了簡(jiǎn)歷。同時(shí)如果你們到了大四才來(lái)問(wèn)這個(gè),就已經(jīng)太遲了……

值得一提的是,我從大三開(kāi)始指導(dǎo)一名基礎(chǔ)幾乎是零的、比我低兩個(gè)年級(jí)的軟件學(xué)院的一位學(xué)生學(xué)習(xí)編程。為了讓對(duì)方在接受我為期 3 年的訓(xùn)練之后有扎實(shí)的 C++ 基礎(chǔ)、熟練的單元測(cè)試編寫(xiě)水平以及能夠靠直覺(jué)給出一些不算太差的設(shè)計(jì),我回顧了許多關(guān)于 C++ 的內(nèi)容,特別是給指針的幾節(jié)課備課了好幾天,并且每一天都要出一個(gè)作業(yè)。

在這個(gè)過(guò)程中我深刻的感覺(jué)到,如果要快速提高自己的編程水平的話,你必須總是去做一些你做得出來(lái),但是難度大到只要再難一點(diǎn)點(diǎn)你就做不出來(lái)的事情。再這么堅(jiān)持好些年之后,肯定會(huì)進(jìn)入高手的行列。

因此我在安排作業(yè)的過(guò)程中,有意推遲了關(guān)于指針的內(nèi)容。首先讓對(duì)方接受變量和分支循環(huán),然后要養(yǎng)成一個(gè)好的風(fēng)格(譬如說(shuō)不能老是用一個(gè)字母給變量命名之類),然后學(xué)會(huì)操作數(shù)組,接下來(lái)才是關(guān)于沒(méi)有強(qiáng)制類型轉(zhuǎn)換的指針的一些操作,并且在一個(gè)月之內(nèi)做出一個(gè)帶單元測(cè)試的字符串類。指針的重點(diǎn)是要對(duì)方深刻的理解,“指針本身就是一個(gè)指向位置的數(shù)字”這么一個(gè)概念。

為此我特別設(shè)計(jì)(但沒(méi)有實(shí)現(xiàn))了一門只帶有一個(gè)全局無(wú)限長(zhǎng)數(shù)組的匯編語(yǔ)言來(lái)講述指針背后一些復(fù)雜的概念。之后就是一些關(guān)于面向?qū)ο蟮闹R(shí)、設(shè)計(jì)模式的知識(shí)、還有跟腳本引擎有關(guān)的一些東西。

該學(xué)生的畢業(yè)設(shè)計(jì)是一個(gè)簡(jiǎn)單的動(dòng)態(tài)語(yǔ)言的腳本引擎,并且該腳本引擎的實(shí)現(xiàn)正確地運(yùn)行了我在上面模仿 Linq 的一個(gè)列表處理函數(shù)庫(kù)。這個(gè)實(shí)現(xiàn)閉包一層套一層,到處都在給一個(gè)物體添加刪除函數(shù),創(chuàng)建各種延遲執(zhí)行的迭代器,很是能夠考驗(yàn)一個(gè)腳本引擎的實(shí)現(xiàn)。對(duì)方畢業(yè)后被網(wǎng)易招去了,并且在待遇上給予了一些人文關(guān)懷。

自己的編程歷程不僅包括自己在業(yè)余時(shí)間內(nèi)做的這些程序,而且也包括在微軟實(shí)習(xí)和工作的過(guò)程。高中的時(shí)候就聽(tīng)說(shuō)了華南理工大學(xué)有微軟俱樂(lè)部的事情,再加上自己對(duì)微軟也持有一定的向往,因此在入學(xué)之后,除了學(xué)院的學(xué)生會(huì)以外,我就一直在密切關(guān)注著微軟俱樂(lè)部的招新,并且忽略其它所有社團(tuán)。不過(guò)說(shuō)實(shí)話在學(xué)生會(huì)和微軟俱樂(lè)部的工作也純屬打醬油,沒(méi)干過(guò)什么正事兒。

大二的時(shí)候微軟搜索技術(shù)中心(STC)來(lái)微軟俱樂(lè)部收簡(jiǎn)歷的時(shí)候,我在路上碰到了陳健老師,也就是之前提到的班主任,就跟她說(shuō)了這個(gè)事情。后來(lái)由于對(duì)方說(shuō)我年齡太小而作罷,因?yàn)槠渌巳慷际茄芯可5搅舜笕臅r(shí)候,陳健老師就跟我提到她可以找老同學(xué)幫我投微軟的實(shí)習(xí)簡(jiǎn)歷,因此我于 2008 年 3 月份接到了微軟上海的電話面試。

電話面試有兩次,第一次對(duì)方是一位 HR,第二次則是一位軟件工程師。在第二次電話面試的過(guò)程中,我們聊了上面提到的 Free,還針對(duì)一些數(shù)據(jù)結(jié)構(gòu)和框架設(shè)計(jì)的問(wèn)題進(jìn)行了熱情洋溢的討論。沒(méi)過(guò)幾天,我就收到了面試通知,前往上海閔行區(qū)的紫竹數(shù)碼信息港面試。那是我人生中的第一次面試。

實(shí) 習(xí)

微軟的面試安排精確到秒,這跟某些公司比起來(lái)要人性化許多,不會(huì)動(dòng)輒浪費(fèi)別人數(shù)個(gè)小時(shí)的時(shí)間。實(shí)習(xí)的面試一共有三輪,對(duì)話全部使用英語(yǔ),盡管里面只有一個(gè)是外國(guó)人。我還依稀記得被那個(gè)年輕的老外面試的時(shí)候由于過(guò)于緊張,而導(dǎo)致一道簡(jiǎn)單的問(wèn)題沒(méi)有給出最優(yōu)解的事情。不過(guò)他們最終還是讓我進(jìn)入微軟位于上海的一個(gè) WCF Tools 小組實(shí)習(xí)。

這個(gè)小組有一位讓我十分尊敬的軟件開(kāi)發(fā)主管葛子昂先生。葛先生是一位熱愛(ài)敏捷并且經(jīng)常投身于實(shí)踐中的人。他在我長(zhǎng)達(dá) 4.5 個(gè)月的實(shí)習(xí)過(guò)程中,教給了我很多軟件工程上的東西,而其中最重要的、讓我受益匪淺的則是關(guān)于單元測(cè)試的內(nèi)容。

除此之外,我也體驗(yàn)了快速迭代、Scrum 會(huì)議、結(jié)對(duì)編程以及基于源代碼版本管理系統(tǒng)(我們使用的是 TFS)進(jìn)行多人協(xié)作開(kāi)發(fā)的流程。在經(jīng)歷了為 TechEd 大會(huì)修改 PetShop 制作 WCF的Demo、為 Visual Studio 2010 的 WCF 開(kāi)發(fā)工具修 bug 和開(kāi)發(fā)一個(gè)具有高度可擴(kuò)展性的配置文件編輯器之后,我于 2008 年 12 月份結(jié)束了在微軟的實(shí)習(xí)。經(jīng)過(guò)了這次實(shí)習(xí),我對(duì)源代碼的掌控能力也得到了提高,并且直接體現(xiàn)在我利用業(yè)余時(shí)間開(kāi)發(fā)的項(xiàng)目的代碼質(zhì)量上。

轉(zhuǎn) 正

在實(shí)習(xí)結(jié)束之前,我獲得了一次面試全職員工(FTE)的機(jī)會(huì)。當(dāng)時(shí)形勢(shì)十分嚴(yán)峻。2008 年美國(guó)的次貸危機(jī)于 10 月份正式影響微軟上海,公司在那一段時(shí)間決定減少全職員工的招聘數(shù)量。而我是 11 月份進(jìn)行轉(zhuǎn)正的面試,結(jié)果這件事情令我十分緊張。后來(lái)葛先生表示他的個(gè)人建議是希望我畢業(yè)后留下來(lái)繼續(xù)工作,讓我吃了一顆定心丸。

實(shí)習(xí)生轉(zhuǎn)全職員工的面試一共有五輪。其中令我印象非常深刻的是有一輪的面試官問(wèn)了我很多非常復(fù)雜的問(wèn)題,最后還考了我一道關(guān)于線索二叉樹(shù)在線更新的問(wèn)題,不過(guò)我已經(jīng)記不清楚具體是什么內(nèi)容了。我只記得我花了很長(zhǎng)時(shí)間終于想到了一個(gè)正確的算法之后,時(shí)間就結(jié)束了,根本來(lái)不及在白板上寫(xiě)代碼。后來(lái)我終于通過(guò)了面試,少數(shù)的幾個(gè)名額里面終于被我拿走了一個(gè)。不過(guò)聽(tīng)說(shuō)幾個(gè)月后限制開(kāi)始放寬,沒(méi)有我面試的時(shí)候那么困難了。

在實(shí)習(xí)和面試的過(guò)程中,我覺(jué)得華南理工大學(xué)軟件學(xué)院開(kāi)設(shè)的很多課程其實(shí)都是十分有用的,特別是關(guān)于數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)模式和軟件測(cè)試的內(nèi)容。這些都是在工作中十分有用的知識(shí),并且也需要在今后的工作中繼續(xù)積累這些東西的經(jīng)驗(yàn)。只不過(guò)因?yàn)閷W(xué)院學(xué)生人數(shù)眾多,而一個(gè)新的學(xué)院總是免不了缺乏一些師資力量,所以我有很多同學(xué)都表示很難體會(huì)到課本中所提到內(nèi)容的作用。想必如今應(yīng)該比我們那幾年要改善許多了。

Microsoft SQL Server

面試結(jié)束到獲得 offer 中間隔了幾十天,最后HR的通知在除夕的那一天終于到來(lái)了。之后的半年時(shí)間我就在學(xué)校里面繼續(xù)做自己的事情,偶爾參加幾個(gè)活動(dòng)介紹經(jīng)驗(yàn)等等,還有就是跟一些人出去游玩。畢業(yè)后動(dòng)身前往上海微軟。中間發(fā)生了一些事情,因?yàn)槊~變動(dòng)的問(wèn)題,我雖然拿的是WCF Tools的offer,但是最后卻被安排到SQL Server組,在此之前我并沒(méi)有收到通知。由于我比較不喜歡數(shù)據(jù)庫(kù),對(duì)SQL Server了解很淺,所以我做了一年半的SQL Server Management Studio(也就是傳說(shuō)中的“界面”)的開(kāi)發(fā)。

在這期間我跟同事們傳播了一些關(guān)于單元測(cè)試、界面開(kāi)發(fā)、設(shè)計(jì)模式、Linq和語(yǔ)法分析器的知識(shí)。

這一年半的經(jīng)歷讓我成長(zhǎng)了許多,主要是比起實(shí)習(xí),正式工作的時(shí)候總是免不了經(jīng)常要跟別的團(tuán)隊(duì)、公司、民族、國(guó)家和物種進(jìn)行熱情洋溢的廣泛交流,而且還占用了不少的時(shí)間。

有些時(shí)候還要坐飛機(jī)前往美帝,感受一下社會(huì)主義的優(yōu)越性。正式軟件的界面部分十分復(fù)雜,不僅要在操作系統(tǒng)的 DPI 變動(dòng)以及本地化(大部分內(nèi)容是把界面上的文字翻譯成別的語(yǔ)言)的過(guò)程中界面的布局需要自動(dòng)調(diào)整,以便不讓一些文字或者按鈕只顯示一半,還要照顧各式各樣的殘疾人(特別是失去視力的人群),并且對(duì)于某些自繪的復(fù)雜內(nèi)容還要提供一些運(yùn)行時(shí)的接口,使得自動(dòng)測(cè)試團(tuán)隊(duì)可以完成他們的工作。

這個(gè)經(jīng)歷讓我感受到了開(kāi)發(fā)一個(gè)嚴(yán)謹(jǐn)?shù)慕缑媸嵌嗝吹夭蝗菀住A硪粋€(gè)感受是關(guān)于需求變更的。

設(shè)計(jì)模式的存在就是為了抵御需求變更,這個(gè)真理我直到工作之后才能明白。你必須把一個(gè)軟件的架構(gòu)設(shè)計(jì)得如此之好,才能在需求大規(guī)模變更之后,還能在整體上讓你的代碼是漂亮的、易于修改的、高性能的、并且是安全的。

每一次改動(dòng)都不能是打補(bǔ)丁,你總是需要重構(gòu)來(lái)使得你的代碼在任何一刻都在整體上是好的。為了達(dá)到這個(gè)目標(biāo),就需要熟練掌握并使用設(shè)計(jì)模式來(lái)開(kāi)發(fā)項(xiàng)目。

微軟的跟別的公司比起來(lái)罕有一個(gè)好處就是他會(huì)給你很多時(shí)間,讓你慢慢把軟件做好。而這個(gè)好的定義,當(dāng)然是以功能和可維護(hù)性為重點(diǎn)。倘若一段代碼以非常精妙的方法來(lái)高速完成一個(gè)任務(wù),但是卻復(fù)雜到哪怕寫(xiě)遍了注釋也不能讓后續(xù)維護(hù)的人看懂的話,那這段代碼是沒(méi)有實(shí)用價(jià)值的。一段好的代碼,不在于它的設(shè)計(jì)有多么巧妙,不在于它的算法有多么高深,而在于它可以被幾千個(gè)人同時(shí)開(kāi)發(fā) 10 年,并且在持續(xù)添加功能的過(guò)程中,不會(huì)因?yàn)檫^(guò)于混亂而導(dǎo)致出現(xiàn)了重寫(xiě)的需要。

跳槽

后來(lái)我因?yàn)橐恍┰蛏暾?qǐng)了到微軟亞洲研究院(MSRA)的人事調(diào)動(dòng)。2011年1月份我在獲得了經(jīng)理的批準(zhǔn)之后,從上海前往北京參加研究院的面試。這一次面試仍然有五輪。這次面試很難,其中一個(gè)面試官因?yàn)樵谖业暮?jiǎn)歷上發(fā)現(xiàn)了很多跟編譯器有關(guān)的東西之后,決定讓我實(shí)現(xiàn)一個(gè) strncpy 函數(shù),要求是 CPU 對(duì)內(nèi)存的訪問(wèn)次數(shù)要最少。這包含了很多諸如帶寬、對(duì)齊和二進(jìn)制字節(jié)位移操作等各種問(wèn)題。方法本身就已經(jīng)很繁瑣,再加上紙上寫(xiě)代碼總是免不了要犯錯(cuò)誤,所以我依然沒(méi)有時(shí)間把整個(gè)程序?qū)懲辍A硪粋€(gè)面試官老外在年輕的時(shí)候也做過(guò)一些編譯器的事情,讓我出乎意料的是他在面試的過(guò)程中沒(méi)有跟我出題目,反而就編譯器的各種算法和問(wèn)題聊了整整一個(gè)小時(shí),基本上我會(huì)的知識(shí)全部都因?yàn)橐卮饐?wèn)題而說(shuō)了出來(lái)。之后我跟這個(gè)人產(chǎn)生了深厚的友誼。

不久之后我就獲得了調(diào)動(dòng)的批準(zhǔn)。在做了一些包括給上海的SQL Server團(tuán)隊(duì)建立單元測(cè)試標(biāo)準(zhǔn)之類的收尾工作之后,我于2011年的4月份前往北京,正式成為微軟亞洲研究院的一員,做一些跟分布式系統(tǒng)相關(guān)的研究。

Microsoft Research Asia

研究院的工作比較特殊,主要是由于我沒(méi)有加入什么長(zhǎng)期的項(xiàng)目,都是跟著幾個(gè) Researcher 干活。第一個(gè)項(xiàng)目做的主要是一個(gè)動(dòng)態(tài)分析的項(xiàng)目,判斷一個(gè)C/S架構(gòu)的程序會(huì)不會(huì)死鎖,以及給出一些報(bào)告,幫助程序員弄明白問(wèn)題的根源,進(jìn)一步修改調(diào)試自己的程序。后來(lái)就跟著他們做了一下圖像搜索引擎、分布式圖數(shù)據(jù)庫(kù),臨走前幫他們做了幾個(gè)爬蟲(chóng)來(lái)充實(shí)微軟自己的 knowledge graph 項(xiàng)目的數(shù)據(jù)等等。

在研究院的這幾年,其實(shí)除了增長(zhǎng)了一些技術(shù)上的見(jiàn)識(shí),和學(xué)會(huì)了如何成為一個(gè)老油條以外,技術(shù)上主要的成長(zhǎng)仍然來(lái)源于自己開(kāi)發(fā)的 項(xiàng)目。研究院的結(jié)構(gòu)是非常適合我這種喜歡把玩復(fù)雜(但不一定是新)技術(shù)程序員的。而且我在研究院的直屬老板還是鄒欣,讓我深刻的明白了一位好的領(lǐng)導(dǎo)是多么的重要。

已經(jīng)寫(xiě)了四年半了。寫(xiě) GacUI 的初衷是,想給自己的語(yǔ)言做 IDE,但是只有 C++ 寫(xiě)parser才寫(xiě)的爽,之前又試驗(yàn)過(guò) C# 寫(xiě) UI,C++ 寫(xiě)智能提示算法的項(xiàng)目。

后來(lái)我干脆就想,要是整個(gè)都能用 C++ 來(lái)寫(xiě)多好啊。但是 C++ 的 GUI 庫(kù)對(duì) MVVM 的支持都是垃圾,于是就有了 GacUI。但是做一個(gè) GUI 庫(kù)工作量實(shí)在是有點(diǎn)大,我又追求要有良好的開(kāi)發(fā)體驗(yàn),因此就做了這么久。今年應(yīng)該可以出 1.0 了……

通過(guò)開(kāi)發(fā) GacUI,不僅理順了之前那么多年做的 7 個(gè)天國(guó)的 GUI 庫(kù)的經(jīng)驗(yàn)教訓(xùn),還學(xué)會(huì)了如何最小代價(jià)開(kāi)發(fā)跨平臺(tái)的客戶端程序。其實(shí)寫(xiě)一個(gè)跨平臺(tái)的程序一點(diǎn)都不難,不知道為什么網(wǎng)上有那么多人搞的雞飛狗跳。GacUI 給我?guī)?lái)的另一個(gè)好處是,基本全部復(fù)習(xí)了一遍設(shè)計(jì)模式的內(nèi)容,而且由于體積龐大,我還弄了一個(gè)專門在不同 git repo 之間實(shí)現(xiàn)偏序依賴的小工具——用來(lái)把一整個(gè) repo 下的 C++ 代碼打包成兩個(gè)文件,以便于其它repo直接使用。本來(lái)想試試 submodule 的,無(wú)奈 submodule 只能實(shí)現(xiàn)樹(shù)形依賴,實(shí)在太爛。

GacUI 最后還復(fù)習(xí)了之前學(xué)過(guò)的編譯原理的內(nèi)容。因?yàn)?GacUI 在編譯 XML 的過(guò)程中,實(shí)際上是把所有的東西都翻譯成了一個(gè)腳本引擎的字節(jié)碼,最后要么直接運(yùn)行這個(gè)腳本,要么把腳本翻譯成 C++(正在開(kāi)發(fā))。因此為了實(shí)現(xiàn)這一點(diǎn),寫(xiě)一個(gè)編譯器在所難免,而且編譯出來(lái)的東西還要能跟 C++ 那邊的類相互溝通,從而又復(fù)習(xí)了一遍 COM 的內(nèi)容(盡管我并沒(méi)有使用它,我只是嘗試做了一個(gè)一樣的東西)。

等 C++ 生成搞定之后,我就要繼續(xù)寫(xiě)去年就開(kāi)始的 GacJS了,把 GacUI 搬上瀏覽器,全方位運(yùn)行我的 IDE。適合使用 C++ 的那些領(lǐng)域真是博大精深啊。

出國(guó)

不得不說(shuō),當(dāng)初由于不喜歡數(shù)據(jù)庫(kù)所以跳槽到了研究院,結(jié)果研究院看我是從 SQL Server來(lái)的,弄了很多數(shù)據(jù)庫(kù)的東西給我做。后來(lái)我找了老板說(shuō)能不能弄點(diǎn)別的啊?老板問(wèn)我那你想做什么,我說(shuō)弄點(diǎn)編譯器的東西試試?于是老板后來(lái)安排我給另一幫研究院,替他們做一個(gè)分布式圖數(shù)據(jù)庫(kù)的 query language。不過(guò)這種東西本來(lái)就是超級(jí)簡(jiǎn)單的,很快弄完之后,我又變成做數(shù)據(jù)庫(kù)的了。于是這讓我明白了一個(gè)道理,多半研究院是沒(méi)有我喜歡的東西的了。

于是又過(guò)了一些年,由于我對(duì)北京(主要)和研究院(次要)的不慢逐漸增加,于是我趕緊弄了個(gè)老婆之后,就觸過(guò)了。

其實(shí)跟普通的面試是一樣的:

  • 找到你想要去的組
  • 聯(lián)系他的老板,把簡(jiǎn)歷給他
  • 看他是否因?yàn)榻?jīng)濟(jì)危機(jī)或者收購(gòu)案件什么的,正在裁員或者無(wú)法招人
  • 然后面試
  • 拿 offer(這是肯定的)
  • 辦簽證

這個(gè)過(guò)程讓我不由得感嘆,美帝的面試官就是沒(méi)有見(jiàn)過(guò)世面啊。競(jìng)爭(zhēng)壓力太小了,搞出來(lái)的題目都超級(jí)容易,得讓他們來(lái)中國(guó)呆一呆,面一面,不然美帝遲早藥丸。不過(guò)我覺(jué)得另一個(gè)方面是,我給 Office 做跨平臺(tái) GUI 的那個(gè)組看了一下我做的 GacUI,估計(jì)他們覺(jué)得還不錯(cuò)吧,就隨便面了一下我,這也是有可能的。

在這里不得不提到微軟照顧員工真是無(wú)微不至,不僅幫我提供優(yōu)質(zhì)的搬家服務(wù),在我到了美帝之后還給我安排了一位大媽,負(fù)責(zé)幫我融入現(xiàn)代社會(huì)。還說(shuō)如果我覺(jué)得自己牛逼不需要這些東西,就給我兩萬(wàn)刀。這些就算在谷歌,也只有被公司強(qiáng)行安排到美帝(而不是員工自己想出國(guó))的那些人才有。最重要的是,微軟員工買 BMW 還能打折,真開(kāi)心。

雖然牛逼的人在中國(guó)和美帝拿的工資并沒(méi)有太大差距,但是撇去美帝的IT地區(qū)跟北上廣相似的房?jī)r(jià)以外,美帝除了汽車和電器的其他東西貴得一逼啊,總體來(lái)講幸福感還是下降了。不過(guò)幸好中國(guó)IT發(fā)達(dá)地區(qū)空氣污染太嚴(yán)重,不僅抵消了這個(gè)缺點(diǎn),反而讓我覺(jué)得窮一點(diǎn)過(guò)得更爽了。于是自從翻了墻,每天就過(guò)著再也沒(méi)空把玩電子產(chǎn)品的日子,有空就開(kāi)車,沒(méi)空就上班,爽的不行。

果然站在風(fēng)口豬都會(huì)飛啊。明明其它行業(yè)的工資中國(guó)比美帝低那么多,但是程序員居然只有1-3 倍的差距。果然中國(guó)還是需要大量的、專門訓(xùn)練來(lái)添補(bǔ)社會(huì)主義發(fā)展過(guò)程中的缺口的、專業(yè)的程序員的。

Microsoft Office

這次跳槽剛好遇到了微軟要開(kāi)除諾基亞的人,搞到大部分的組都凍結(jié)名額了,只有財(cái)大氣粗的Office能招人,因此我也就只能來(lái)Office了。本來(lái)我的目標(biāo)是想給Edge弄JS引擎,或者去VS組搞搞編譯器什么的,無(wú)奈他們都太窮了,只好作罷。

在Office的工作讓我大開(kāi)眼界,算是體驗(yàn)了一把一萬(wàn)個(gè)人寫(xiě)了三十年的、一個(gè)repo的snapshot就有幾百G代碼的軟件是怎么弄出來(lái)的。由于機(jī)器實(shí)在太貴,所以平時(shí)修改代碼的時(shí)候,只能在本機(jī)編譯,因此我們基于msbuild弄出來(lái)的這套CI,還包含了如果需要鏈接的lib/dll的代碼在硬盤里面沒(méi)有的話,就去服務(wù)器找當(dāng)前checkpoint的編譯好的緩存,下載下來(lái)編譯的功能。因此偶爾build farm掛掉的那幾天,由于網(wǎng)絡(luò)連接斷了,本機(jī)編譯也沒(méi)辦法弄。

尾聲

回顧一下自己的編程之路,學(xué)生時(shí)期大概就是從一開(kāi)始寫(xiě)游戲,到寫(xiě)游戲引擎,到專門搞游戲引擎需要的圖形、GUI 庫(kù)和腳本引擎,最終由于精力的關(guān)系生下了 GUI 庫(kù)和編譯器。我從一開(kāi)始設(shè)計(jì)腳本引擎的時(shí)候就很注意腳本如何暫停的問(wèn)題——其實(shí)基本就是源自于游戲的需要——于是人肉做了 coroutine 的各種奇怪的實(shí)現(xiàn)方式。到了最后終于學(xué)習(xí)到了正統(tǒng)的方法,于是本來(lái)可以很簡(jiǎn)單的完成的問(wèn)題,由于后來(lái)需求就是復(fù)雜了那么一丁點(diǎn)(說(shuō)白了就是要讓腳本也可以 customize(或者說(shuō) hack)coroutine 相關(guān)的類型系統(tǒng)的一部分內(nèi)容),導(dǎo)致了需要用無(wú)限復(fù)雜的方法來(lái)實(shí)現(xiàn) coroutine。人類為什么要互相傷害?

到了工作,基本就是

  • 本來(lái)沖著去弄 Visual Studio 的,而且學(xué)生時(shí)期還不喜歡 SQL,結(jié)果工作的時(shí)候由于經(jīng)濟(jì)危機(jī)的關(guān)系給我弄到 SQL 去了,工作的內(nèi)容包含了學(xué)習(xí)專業(yè)的數(shù)據(jù)庫(kù)知識(shí)和拖控件。
  • 但是我做了幾年還是覺(jué)得不喜歡 SQL,就跳槽到了 MSRA,結(jié)果 MSRA 拼命讓我搞數(shù)據(jù)庫(kù)的東西。也不想想本來(lái)我就是不喜歡弄這個(gè)才走的……
  • 后來(lái)我想好吧,反正編譯器沒(méi)得搞了,那我還是拖控件吧。于是我就告訴Office的人說(shuō),你看我做 GacUI 多屌不屌!Office 的人說(shuō),屌!于是把我招了進(jìn)來(lái),專門負(fù)責(zé)組里面不是 GUI 的那部分。
  • 過(guò)了半年老板開(kāi)始安排工作了,我想了個(gè)辦法表達(dá)了一下我還是喜歡弄?jiǎng)e的東西。于是終于干起了老本行——給Office的程序員開(kāi)發(fā)內(nèi)部的編譯器了。

總算最后還是做了喜歡的工作。

-END-

猜你喜歡

嵌入式牛人 | 這些單片機(jī)編程思想超硬核

為什么中國(guó)開(kāi)發(fā)不出流行的操作系統(tǒng)和編程語(yǔ)言?

30條代碼,拿去“表白”

?最 后??
?


若覺(jué)得文章對(duì)你有幫助,隨手轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。
送100G編程資源,涵蓋C/C++、Python、Linux、JAVA、數(shù)據(jù)結(jié)構(gòu)、算法等入門基礎(chǔ)資料
長(zhǎng)按二維碼識(shí)別, 安安同學(xué)微軟雅黑;letter-spacing: 0.544px;color: rgb(0, 0, 0);font-size: 14px;line-height: 19.2px;box-sizing: border-box !important;overflow-wrap: break-word !important;">和大家一起開(kāi)始學(xué)編程!

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

Popular articles

主站蜘蛛池模板: 玖玖玖影院| 伊人久久中文大香线蕉综合| 农夫山泉有点甜高清2在线观看| 波多野结衣教室| 娇妻之欲海泛舟1一42| 夫妇野外交换hd中文小说| 日本哺乳期xxxx丨| 国产精品亚洲片在线花蝴蝶| 台湾swag视频在线观看| 亚洲国产高清在线精品一区| 欧美乱大交xxxxx另类| 国产三级在线免费观看| 欧美日韩福利| 4444www免费看| 国产精品久久久久久一区二区三区| 嫩草影院在线免费观看| 风流艳妇在线观看| 最近中文字幕高清免费大全8| 男生与女生差差| 中文japanese在线播放| 欧美性猛交xxxx乱大交| 精彩视频一区二区三区| 欧美激情一区二区三区在线| 2021国产麻豆剧果冻传媒电影| 紧扣的星星完整版免费观看| 性放荡日记高h| 欧美性xxxxx极品娇小| 一级一毛片a级毛片| 日本人六九视频jⅰzzz| 高清视频一区二区三区| 欧美精品亚洲精品日韩专区va| 国产剧情片视频资源在线播放| 日本久久久久亚洲中字幕| 日本高清在线播放| 久久久精品免费| ipx-412天海翼在线播放| 榴莲榴莲榴莲榴莲官网| 中文字幕ヘンリー冢本全集| 麻豆福利在线| yy6080欧美三级理论| 一区国严二区亚洲三区|