默認
打賞 發表評論 1
想開發IM:買成品怕坑?租第3方怕貴?找開源自已擼?盡量別走彎路了... 找站長給點建議
自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!
閱讀(4105) | 評論(1 收藏3 淘帖1 2

本文由知乎輪子哥(本名陳梓瀚)原創分享,全文以第一人稱寫就,一起感受一下計算機編程大神的高度。


1、“輪子哥”是誰?


vczh,本名陳梓瀚,因知乎的個人信息介紹上寫有“專業造輪子”,所以江湖人稱“輪子哥”(見《vczh 是誰?)。“輪子哥”大學時代就在微軟實習,畢業后即加入微軟。開始時是在微軟上海,后來進入北京的微軟亞洲研究院。現已移居美國西雅圖,在Office組做工程師。

妻子陳萌萌,原來在百度工作,已隨“輪子哥”共赴美國,入職 Google。

“輪子哥”是廣東人,1987 年左右出生,畢業于華南皇家理工學院,即華南理工大學。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_a.jpg
▲ 左四就是“輪子哥”(嗯,上帝確實是公平的...)

“輪子哥”的相關鏈接:


2、引子


以前經常有人問我,要怎么樣才可以去微軟。其實我從來沒有想過這個問題,所以那個時候的答案自然就是微軟的廣告(編程好,數學好,態度好)了。09 年大四那會兒,剛好碰上了美帝的次貸危機,令我們這些想去美帝的公司被剝削的這幫人倍感艱辛。所幸后來還是過五關斬六將,最后在實習結束之后成功留了下來。這其中的因果,顯然不是面試的那幾天所能夠決定的,因此還得從 hello world 講起。

3、我的中學時代


我有幸從初二開始就學習編程。那個時候世界已經處于一個現代化的程度了,操作系統都有虛擬內存,有圖形界面,有因特網,開發軟件還有集成開發環境可用,跟一些老前輩所描述的編譯一個程序還要換幾次磁盤的日子已經完全不一樣了。

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

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_0.jpg

那個時候還是 21 世紀的第一年,正處于上網費用巨貴無比、Google 還剛起來沒多久基本沒人知道的時候,學習編程要比現在困難很多。當時想尋找什么知識,因特網基本上是沒什么指望的,所以我就有了一個沒事去書店的愛好。

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

中間因為試圖使用編程繪制很多復雜的圖形和對圖像進行各種復雜的變換,于是每當寫程序之前都要在紙上推導長長的公式。如果程序的運行結果不對了,根本無從調試,只好重新推導,借以希望可以發現公式的幾個 bug 以解釋為什么會出現錯誤。

從此以后我對符號運算就十分拿手。而且做數學物理作業也好,為了編程推導公式也好,需要計算的東西太多懶得到處尋找廢紙,從而便獲得了心算復雜過程的本領(可惜現在已經喪失了)。這順帶還給我帶來了一個好處,就是高考數學選擇題在發卷后不許動筆的 10 分鐘內就被我全部心算出答案,而且全對了。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_1.jpg

圖形編程做久了,就想起了當初的理想,于是就搞游戲去了。那會兒看到了成都金點工作組開發的《圣劍英雄傳》,點燃了我開發 RPG 的熱情。在經歷了幾次失敗之后,我終于在高二的正月初一那一天完成了《天地傳》的所有編碼工作,沒過多久就上傳到了 GameRes 的網站上。

這是我第一個行數過萬的程序。為了順利完成它,我悟到了很多道理,包括為什么要面向對象,為什么要劃分模塊減少互相依賴。這也成為我后來開發自繪圖形界面和腳本引擎的契機。后來我試圖用 OpenGL 做 3D 游戲,但是由于很難找到有共同愛好的美工跟我一起做,便作罷了。但是這卻讓我獲得了很多時間,可以投入到圖形界面和腳本引擎之中去。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_2.jpg

后來我就萌發了解釋高級語言的想法。這是我整個編程歷史上的第一個轉折點。那個時候我數據結構只會用鏈表,而且編譯原理也好,設計模式也好,都還沒聽過。那個時候去解釋高級語言自然是比較困難的。因此我經過很多天的苦思冥想自己想出了一個如今稱之為一遍編譯(也就是很爛)的方法來把一個簡單的高級語言重新處理成一個簡單的指令集語言,就跟匯編長得差不多。

那個時候已經高三了,所以其實也沒多少時間可以投入在編程上面,因此做出來的第一個原型是一個簡化后的 Pascal 的解釋器,用 Delphi 開發的。現在想起來,里面肯定有巨多內存泄露和性能問題,不過當時根本不知道這些東西是什么。在高中畢業之后的三個月無所事事的日子里,我就重新把這個東西設計了一遍,得到了一個幾十頁的計劃。由于后來沒來得及做完,就打印出來帶去了華南理工大學。

4、我的大學時代


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

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

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_3.jpg

提交了畢業設計之后,我又在畢業前的幾個月時間里面完成了 CMinus。這不是編譯原理課程設計上的那個簡單到沒法再簡單的 CMinus,而是一個完整的 C 語言編譯器(其中函數指針的語法被我改掉了,但是仍然支持)。其編譯結果是保存到內存中的一段 X86 二進制代碼,可以將函數的起始地址強制轉換成函數指針直接在 C++ 程序中使用,這是因為我在生成指令的時候遵守了 Visual C++ 中的一些在 MSDN 里描述得很清楚的約定。

畢業后我又雄心勃勃地做了 NativeX,是一個帶泛型以及 concept mapping 的 C 語言。前幾個月我又試圖山寨 C#,但是無奈 C# 實在是太復雜,所以轉而去做 GacUI。圖形界面(GUI)類庫我也寫了不少。繼高中的時候為 RPG 而開發的兩個控件類庫之后,在上大學的過程中使用 OpenGL 開發的兩次 GUI 類庫均告失敗。后來還封裝了一次 Windows 的 API(Vczh GUI),試圖讓其易用性接近 VCL 或 WinForm。

畢業后我又嘗試發了若干次基于渲染的 GUI,換了幾次架構,一直到現在正在開發的 GacUI 才感覺走上了正軌。我在這個過程中得到的一個結論就是:Windows Presentation Foundation 的設計實在是太完美了……在做這些東西之余,我還開發了三次三維物體的軟件渲染程序,前兩個是在畢業前做的,最后一個是一年前因為一下子不知道要如何利用業余時間來充實生活而開發出來的,目的是用于打發時間。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_4.jpg

在這里我想可以回答一個月前不能很好地回答師弟師妹們的一個問題了。如何能夠在微軟找到工作?因為我把我上面做的這些東西都寫進了簡歷。同時如果你們到了大四才來問這個,就已經太遲了……

值得一提的是,我從大三開始指導一名基礎幾乎是零的、比我低兩個年級的軟件學院的一位學生學習編程。為了讓對方在接受我為期 3 年的訓練之后有扎實的 C++ 基礎、熟練的單元測試編寫水平以及能夠靠直覺給出一些不算太差的設計,我回顧了許多關于 C++ 的內容,特別是給指針的幾節課備課了好幾天,并且每一天都要出一個作業。在這個過程中我深刻的感覺到,如果要快速提高自己的編程水平的話,你必須總是去做一些你做得出來,但是難度大到只要再難一點點你就做不出來的事情。再這么堅持好些年之后,肯定會進入高手的行列。

因此我在安排作業的過程中,有意推遲了關于指針的內容。首先讓對方接受變量和分支循環,然后要養成一個好的風格(譬如說不能老是用一個字母給變量命名之類),然后學會操作數組,接下來才是關于沒有強制類型轉換的指針的一些操作,并且在一個月之內做出一個帶單元測試的字符串類。指針的重點是要對方深刻的理解,“指針本身就是一個指向位置的數字”這么一個概念。為此我特別設計(但沒有實現)了一門只帶有一個全局無限長數組的匯編語言來講述指針背后一些復雜的概念。之后就是一些關于面向對象的知識、設計模式的知識、還有跟腳本引擎有關的一些東西。

該學生的畢業設計是一個簡單的動態語言的腳本引擎,并且該腳本引擎的實現正確地運行了我在上面模仿 Linq 的一個列表處理函數庫。這個實現閉包一層套一層,到處都在給一個物體添加刪除函數,創建各種延遲執行的迭代器,很是能夠考驗一個腳本引擎的實現。對方畢業后被網易招去了,并且在待遇上給予了一些人文關懷。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_5.jpg

自己的編程歷程不僅包括自己在業余時間內做的這些程序,而且也包括在微軟實習和工作的過程。高中的時候就聽說了華南理工大學有微軟俱樂部的事情,再加上自己對微軟也持有一定的向往,因此在入學之后,除了學院的學生會以外,我就一直在密切關注著微軟俱樂部的招新,并且忽略其它所有社團。不過說實話在學生會和微軟俱樂部的工作也純屬打醬油,沒干過什么正事兒。

大二的時候微軟搜索技術中心(STC)來微軟俱樂部收簡歷的時候,我在路上碰到了陳健老師,也就是之前提到的班主任,就跟她說了這個事情。后來由于對方說我年齡太小而作罷,因為其它人全部都是研究生。到了大三的時候,陳健老師就跟我提到她可以找老同學幫我投微軟的實習簡歷,因此我于 2008 年 3 月份接到了微軟上海的電話面試。電話面試有兩次,第一次對方是一位 HR,第二次則是一位軟件工程師。在第二次電話面試的過程中,我們聊了上面提到的 Free,還針對一些數據結構和框架設計的問題進行了熱情洋溢的討論。沒過幾天,我就收到了面試通知,前往上海閔行區的紫竹數碼信息港面試。那是我人生中的第一次面試。

5、在微軟實習


微軟的面試安排精確到秒,這跟某些公司比起來要人性化許多,不會動輒浪費別人數個小時的時間。實習的面試一共有三輪,對話全部使用英語,盡管里面只有一個是外國人。我還依稀記得被那個年輕的老外面試的時候由于過于緊張,而導致一道簡單的問題沒有給出最優解的事情。不過他們最終還是讓我進入微軟位于上海的一個 WCF Tools 小組實習。

這個小組有一位讓我十分尊敬的軟件開發主管葛子昂先生。葛先生是一位熱愛敏捷并且經常投身于實踐中的人。他在我長達 4.5 個月的實習過程中,教給了我很多軟件工程上的東西,而其中最重要的、讓我受益匪淺的則是關于單元測試的內容。

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

6、工作轉正


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

實習生轉全職員工的面試一共有五輪。其中令我印象非常深刻的是有一輪的面試官問了我很多非常復雜的問題,最后還考了我一道關于線索二叉樹在線更新的問題,不過我已經記不清楚具體是什么內容了。我只記得我花了很長時間終于想到了一個正確的算法之后,時間就結束了,根本來不及在白板上寫代碼。后來我終于通過了面試,少數的幾個名額里面終于被我拿走了一個。不過聽說幾個月后限制開始放寬,沒有我面試的時候那么困難了。

在實習和面試的過程中,我覺得華南理工大學軟件學院開設的很多課程其實都是十分有用的,特別是關于數據結構、設計模式和軟件測試的內容。這些都是在工作中十分有用的知識,并且也需要在今后的工作中繼續積累這些東西的經驗。只不過因為學院學生人數眾多,而一個新的學院總是免不了缺乏一些師資力量,所以我有很多同學都表示很難體會到課本中所提到內容的作用。想必如今應該比我們那幾年要改善許多了。

6、參與Microsoft SQL Server的開發


面試結束到獲得 offer 中間隔了幾十天,最后HR的通知在除夕的那一天終于到來了。之后的半年時間我就在學校里面繼續做自己的事情,偶爾參加幾個活動介紹經驗等等,還有就是跟一些人出去游玩。畢業后動身前往上海微軟。中間發生了一些事情,因為名額變動的問題,我雖然拿的是WCF Tools的offer,但是最后卻被安排到SQL Server組,在此之前我并沒有收到通知。由于我比較不喜歡數據庫,對SQL Server了解很淺,所以我做了一年半的SQL Server Management Studio(也就是傳說中的“界面”)的開發。在這期間我跟同事們傳播了一些關于單元測試、界面開發、設計模式、Linq和語法分析器的知識。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_x.jpg
▲ 居說Sql Server里的這個界面就是“輪子哥”開發的(嗯,看起來一般般...)

這一年半的經歷讓我成長了許多,主要是比起實習,正式工作的時候總是免不了經常要跟別的團隊、公司、民族、國家和物種進行熱情洋溢的廣泛交流,而且還占用了不少的時間。有些時候還要坐飛機前往美帝,感受一下社會主義的優越性。正式軟件的界面部分十分復雜,不僅要在操作系統的 DPI 變動以及本地化(大部分內容是把界面上的文字翻譯成別的語言)的過程中界面的布局需要自動調整,以便不讓一些文字或者按鈕只顯示一半,還要照顧各式各樣的殘疾人(特別是失去視力的人群),并且對于某些自繪的復雜內容還要提供一些運行時的接口,使得自動測試團隊可以完成他們的工作。

這個經歷讓我感受到了開發一個嚴謹的界面是多么地不容易。另一個感受是關于需求變更的。設計模式的存在就是為了抵御需求變更,這個真理我直到工作之后才能明白。你必須把一個軟件的架構設計得如此之好,才能在需求大規模變更之后,還能在整體上讓你的代碼是漂亮的、易于修改的、高性能的、并且是安全的。每一次改動都不能是打補丁,你總是需要重構來使得你的代碼在任何一刻都在整體上是好的。為了達到這個目標,就需要熟練掌握并使用設計模式來開發項目。

微軟的跟別的公司比起來罕有一個好處就是他會給你很多時間,讓你慢慢把軟件做好。而這個好的定義,當然是以功能和可維護性為重點。倘若一段代碼以非常精妙的方法來高速完成一個任務,但是卻復雜到哪怕寫遍了注釋也不能讓后續維護的人看懂的話,那這段代碼是沒有實用價值的。一段好的代碼,不在于它的設計有多么巧妙,不在于它的算法有多么高深,而在于它可以被幾千個人同時開發 10 年,并且在持續添加功能的過程中,不會因為過于混亂而導致出現了重寫的需要。

7、我跳槽了


后來我因為一些原因申請了到微軟亞洲研究院(MSRA)的人事調動。2011年1月份我在獲得了經理的批準之后,從上海前往北京參加研究院的面試。這一次面試仍然有五輪。這次面試很難,其中一個面試官因為在我的簡歷上發現了很多跟編譯器有關的東西之后,決定讓我實現一個 strncpy 函數,要求是 CPU 對內存的訪問次數要最少。這包含了很多諸如帶寬、對齊和二進制字節位移操作等各種問題。方法本身就已經很繁瑣,再加上紙上寫代碼總是免不了要犯錯誤,所以我依然沒有時間把整個程序寫完。另一個面試官老外在年輕的時候也做過一些編譯器的事情,讓我出乎意料的是他在面試的過程中沒有跟我出題目,反而就編譯器的各種算法和問題聊了整整一個小時,基本上我會的知識全部都因為要回答問題而說了出來。之后我跟這個人產生了深厚的友誼。

不久之后我就獲得了調動的批準。在做了一些包括給上海的SQL Server團隊建立單元測試標準之類的收尾工作之后,我于2011年的4月份前往北京,正式成為微軟亞洲研究院的一員,做一些跟分布式系統相關的研究。

8、Microsoft Research Asia


研究院的工作比較特殊,主要是由于我沒有加入什么長期的項目,都是跟著幾個 Researcher 干活。第一個項目做的主要是一個動態分析的項目,判斷一個C/S架構的程序會不會死鎖,以及給出一些報告,幫助程序員弄明白問題的根源,進一步修改調試自己的程序。后來就跟著他們做了一下圖像搜索引擎、分布式圖數據庫,臨走前幫他們做了幾個爬蟲來充實微軟自己的 knowledge graph 項目的數據等等。

在研究院的這幾年,其實除了增長了一些技術上的見識,和學會了如何成為一個老油條以外,技術上主要的成長仍然來源于自己開發的 項目。研究院的結構是非常適合我這種喜歡把玩復雜(但不一定是新)技術程序員的。而且我在研究院的直屬老板還是鄒欣,讓我深刻的明白了一位好的領導是多么的重要。

已經寫了四年半了。寫 GacUI 的初衷是,想給自己的語言做 IDE,但是只有 C++ 寫parser才寫的爽,之前又試驗過 C# 寫 UI,C++ 寫智能提示算法的項目。

自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_7.jpg

后來我干脆就想,要是整個都能用 C++ 來寫多好啊。但是 C++ 的 GUI 庫對 MVVM 的支持都是垃圾,于是就有了 GacUI。但是做一個 GUI 庫工作量實在是有點大,我又追求要有良好的開發體驗,因此就做了這么久。今年應該可以出 1.0 了……

通過開發 GacUI,不僅理順了之前那么多年做的 7 個天國的 GUI 庫的經驗教訓,還學會了如何最小代價開發跨平臺的客戶端程序。其實寫一個跨平臺的程序一點都不難,不知道為什么網上有那么多人搞的雞飛狗跳。GacUI 給我帶來的另一個好處是,基本全部復習了一遍設計模式的內容,而且由于體積龐大,我還弄了一個專門在不同 git repo 之間實現偏序依賴的小工具——用來把一整個 repo 下的 C++ 代碼打包成兩個文件,以便于其它repo直接使用。本來想試試 submodule 的,無奈 submodule 只能實現樹形依賴,實在太爛。

GacUI 最后還復習了之前學過的編譯原理的內容。因為 GacUI 在編譯 XML 的過程中,實際上是把所有的東西都翻譯成了一個腳本引擎的字節碼,最后要么直接運行這個腳本,要么把腳本翻譯成 C++(正在開發)。因此為了實現這一點,寫一個編譯器在所難免,而且編譯出來的東西還要能跟 C++ 那邊的類相互溝通,從而又復習了一遍 COM 的內容(盡管我并沒有使用它,我只是嘗試做了一個一樣的東西)。

等 C++ 生成搞定之后,我就要繼續寫去年就開始的 GacJS了,把 GacUI 搬上瀏覽器,全方位運行我的 IDE。適合使用 C++ 的那些領域真是博大精深啊。

9、我出國了


自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!_8.jpg

不得不說,當初由于不喜歡數據庫所以跳槽到了研究院,結果研究院看我是從 SQL Server來的,弄了很多數據庫的東西給我做。后來我找了老板說能不能弄點別的啊?老板問我那你想做什么,我說弄點編譯器的東西試試?于是老板后來安排我給另一幫研究院,替他們做一個分布式圖數據庫的 query language。不過這種東西本來就是超級簡單的,很快弄完之后,我又變成做數據庫的了。于是這讓我明白了一個道理,多半研究院是沒有我喜歡的東西的了。

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

其實跟普通的面試是一樣的:

  • 1)找到你想要去的組;
  • 2)聯系他的老板,把簡歷給他;
  • 3)看他是否因為經濟危機或者收購案件什么的,正在裁員或者無法招人;
  • 4)然后面試;
  • 5)拿 offer(這是肯定的);
  • 6)辦簽證。

這個過程讓我不由得感嘆,美帝的面試官就是沒有見過世面啊。競爭壓力太小了,搞出來的題目都超級容易,得讓他們來中國呆一呆,面一面,不然美帝遲早藥丸。不過我覺得另一個方面是,我給 Office 做跨平臺 GUI 的那個組看了一下我做的 GacUI,估計他們覺得還不錯吧,就隨便面了一下我,這也是有可能的。

在這里不得不提到微軟照顧員工真是無微不至,不僅幫我提供優質的搬家服務,在我到了美帝之后還給我安排了一位大媽,負責幫我融入現代社會。還說如果我覺得自己牛逼不需要這些東西,就給我兩萬刀。這些就算在谷歌,也只有被公司強行安排到美帝(而不是員工自己想出國)的那些人才有。最重要的是,微軟員工買 BMW 還能打折,真開心。

雖然牛逼的人在中國和美帝拿的工資并沒有太大差距,但是撇去美帝的IT地區跟北上廣相似的房價以外,美帝除了汽車和電器的其他東西貴得一逼啊,總體來講幸福感還是下降了。不過幸好中國IT發達地區空氣污染太嚴重,不僅抵消了這個缺點,反而讓我覺得窮一點過得更爽了。于是自從翻了墻,每天就過著再也沒空把玩電子產品的日子,有空就開車,沒空就上班,爽的不行。

果然站在風口豬都會飛啊。明明其它行業的工資中國比美帝低那么多,但是程序員居然只有1-3 倍的差距。果然中國還是需要大量的、專門訓練來添補社會主義發展過程中的缺口的、專業的程序員的。

10、Microsoft Office


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

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

11、寫在最后


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

到了工作,基本就是:

  • 1)本來沖著去弄 Visual Studio 的,而且學生時期還不喜歡 SQL,結果工作的時候由于經濟危機的關系給我弄到 SQL 去了,工作的內容包含了學習專業的數據庫知識和拖控件。
  • 2)但是我做了幾年還是覺得不喜歡 SQL,就跳槽到了 MSRA,結果 MSRA 拼命讓我搞數據庫的東西。也不想想本來我就是不喜歡弄這個才走的……
  • 3)后來我想好吧,反正編譯器沒得搞了,那我還是拖控件吧。于是我就告訴Office的人說,你看我做 GacUI 多屌不屌!Office 的人說,屌!于是把我招了進來,專門負責組里面不是 GUI 的那部分。
  • 4)過了半年老板開始安排工作了,我想了個辦法表達了一下我還是喜歡弄別的東西。于是終于干起了老本行——給Office的程序員開發內部的編譯器了。

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

附錄:更多相關文章


一個微信實習生自述:我眼中的微信開發團隊
微信程序員創業總結:如何提高Android開發效率
如何做一個合格的 iOS Team Leader
程序員中年危機:拿什么拯救你,我的三十五歲
一個魔都程序員的3年:從程序員到CTO的歷練
為什么說即時通訊社交APP創業就是一個坑?
致我們再也回不去的 Github ...
一名90后二流大學程序員的自述:我是如何從“菜鳥”到“辣雞”的
一個魔都程序員的3年:從程序員到CTO的歷練
選擇比努力更重要:我是如何從流水線工人到程序員的?
程序員的抉擇:必須離開帝都——因為除了工作機會,還有什么值得留戀?
干了這碗雞湯:從理發店小弟到阿里P10技術大牛
程序員神級跳槽攻略:什么時候該跳?做什么準備?到哪里找工作?
感悟分享:在騰訊的八年,我的成長之路和職業思考
調皮的程序員:Linux之父雕刻在Linux內核中的故事
迷茫中前行:一個專科渣渣菜鳥的編程入門感悟
機會不給無準備的人:一個Android程序員屢戰屢敗的悲慘校招經歷
笑中帶淚的碼農往事:入職三天被開,公司給100塊叫我走人,有我慘?
阿里技術分享:阿里自研金融級數據庫OceanBase的艱辛成長之路
干貨分享:十年大廠資深程序員的開發經驗總結
鵝廠7年終有離開之日,記離職鵝廠最后30天的真實心路歷程
4年前端、2年CTO:一個非科班程序員的真實奮斗史
揭秘阿里、騰訊、華為、百度的職級和薪酬體系
即時通訊云融云CTO的創業經驗分享:技術創業,你真的準備好了?
自認為編程能力很強?看完知乎“輪子哥”的編程之路,估計得跪!
>> 更多同類文章 ……

即時通訊網 - 即時通訊開發者社區! 來源: - 即時通訊開發者社區!

上一篇:一文讀懂微信之父張小龍:失敗天才、顛覆者、獨裁者、人性操控師下一篇:微信團隊分享:極致優化,iOS版微信編譯速度3倍提升的實踐總結

本帖已收錄至以下技術專輯

推薦方案
評論 1
雖然比我有才, 但沒有長的帥, 這我就放心了~~~~
簽名: 周末很無聊,太熱又出不去
打賞樓主 ×
使用微信打賞! 使用支付寶打賞!

返回頂部
股票配资平台都找股牛网