今年事情比較多,第一個是自己終于從本科畢業(yè)了,第二個是自己找到了工作,拿了一份offer。雖然當初為了去Microsoft實習錯過了一大堆其他公司的面試機會,只投了Microsoft,Google和百度。不過最后還是進了Microsoft,在這危機四伏的日子里,雖然說自己寫了10年代碼總歸有點功力,但是也有運氣的成分在。只是面試百度的時候我明明在簡歷上寫了我人在上海,他非要我飛回廣州面試,很不爽,拒了他。
去年下半年幾乎都投身Microsoft的實習,到了12月上旬回學校,于是從今年的元旦開始其實就是在學校里面混日子了。其實還好,完成了一個
閹割版的Haskell編譯器當畢業(yè)設(shè)計,還做了一個
C語言編譯到機器碼寫入內(nèi)存的編譯器,最后
重寫了Vczh Library++3.0,還把它
開源了,雖然還沒最終完成。不過開源了之后就得補文檔了,因此近期的開發(fā)進度可能會慢一點。
回想大學四年,還是寫了不少代碼的,也足夠拼成一張至少可以留住HR眼球的簡歷了。當初比較大的轉(zhuǎn)變是我剛上大一,可憐的Borland就不行了,于是很喜歡的Delphi看來也有危機了,所以轉(zhuǎn)去C++。幸好所學的知識并不是綁定在Delphi的平臺上,因此剛開始也只覺得是換了個語法。不夠C++實在是博大精深,里面可以用各種各樣的范式寫代碼,比較突出的是元編程,雖然這種東西在現(xiàn)實生活中重要性不言而喻不過所占比例還是很小的。
于是開始拿C++練手了。高中的Delphi時代寫了不少游戲,積累了一個2D的游戲引擎,其實也不復雜,不過好歹也到了3.0了,里面有圖形圖像、音效、數(shù)據(jù)管理、腳本引擎,還有一個UI。因此C++上手了之后,自然是移植它了。移植的過程中發(fā)現(xiàn)C++的寫法跟Delphi還是截然不同,因此Vczh Library++ 1.0基本上是失敗告終,雖然那個Delphi的游戲引擎大部分都實現(xiàn)了。在開發(fā)的途中我曾經(jīng)寫了一個模仿顯卡固頂管線的3D軟件渲染器,不過最后一個Demo應(yīng)該是在大二,用OpenGL實現(xiàn)了3D模型的骨骼動畫,用的好像還是Halflife 1的幾個模型,什么鳥啊,僵尸啊,警察啊。后來覺得實在是找不到美工,而且自己還有一項喜歡的,也就是寫編譯器了,所以干脆就集中力量搞編譯器吧。
第一個見得人的編譯器應(yīng)該是
Vczh Jove Script了。這個東西閹割了Java,然后實現(xiàn)了一次,主要是針對OOP,有繼承,有虛函數(shù),還有泛型。當然泛型我實現(xiàn)了跟C#一樣的參數(shù)約束,也就是可以指定說某個類型參數(shù)必須繼承與另一個類。數(shù)組使用引用計數(shù),其他的都垃圾收集。當然最后發(fā)現(xiàn)數(shù)組用引用計數(shù)是不對的,會導致垃圾收集。
之后我就對計算機的理論燃起了熱情了,首當其沖當然是編譯原理。當時受到了CSDN上那個袁泳的一點指導,其實主要不是技術(shù)上的,是方向上的,后來給我看了一本很厲害的書叫《Parsing Techniques》。很多知識都從這里面吸收了,然后就要開刀,當然是從最簡單的正則表達式引擎下手。第一次寫還是有點別扭,到現(xiàn)在一共寫了三次,其中第二次是在第一次寫完了之后覺得很不爽立刻重寫的。寫完了就輪到Syngram,是一個將文法寫進C++然后自動變成語法分析器的小庫。當然后來也重寫了。
上面的事情完成了之后就著手
Vczh Free Script的開發(fā)了。這是一個“純”動態(tài)語言。為什么說純呢,因為我堅持所有東西匿名(包括類定義,其實結(jié)果就是返回一個類型,像C#的System.Type,然后可以到處傳),所以為了給一個東西命名就寫一個賦值語句。當然不僅如此,我還實現(xiàn)了函數(shù)閉包,然后將之后的所有特性譬如說動態(tài)的Multiple Dispatch(虛函數(shù)是Single Dispatch)啊,namespace啊,類和繼承什么的統(tǒng)統(tǒng)編譯到函數(shù)閉包上,整個語言是匿名的。當然我還是把它是實現(xiàn)成一個C++的類庫,如果你愿意在我的接口下面寫插件的話,就可以跟Python一樣直接應(yīng)用到你自己的工程里面去了。
在這個過程中我學習了很多關(guān)于編程語言方面的基礎(chǔ)理論,還學了一點數(shù)學雖然我還是覺得數(shù)學有點難度。完了之后就開發(fā)一個小型的IDE,其亮點是就算代碼是動態(tài)生成的,我也能捕捉到然后給你單步調(diào)試。不過這個由于穩(wěn)定性并不是非常好,第一次將C++跟C#混起來用還是有點力不從心,因此就沒拿出來貢獻給大家了。
之后就開始Microsoft的實習之旅了,在實習的過程中我首先封裝了一次win32api的GUI部分,盡量達到跟Delphi一樣好用,于是有了這個
Demo,然后做了閹割版Haskell——也就是Kernel FP了。當初叫這個名稱我只是想看看實現(xiàn)一個最小的純函數(shù)式語言的內(nèi)核要怎么辦,要包含多少功能(當然是越少越好,其他的都是語法糖或者庫,不過不能讓能力下降)。后來又看了一本書好像叫做《The Implementation of Functional Programmang Languages》,也很好看,學到了很多東西。
于是2008年就結(jié)束了,進入2009年,做了一個CMinus,可以把C語言編譯到內(nèi)存里面,搞成x86的機器碼,然后就能將一個寫了代碼的txt文件變成一個函數(shù)指針了。然后就畢業(yè)了。
7月13日開始入職Microsoft,雖然說是在開發(fā)界面,不過我還是覺得需要自己仍然保持熱情,于是工作結(jié)束之后自己要繼續(xù)寫自己的代碼,也就是Vczh Library++ 3.0了。上面做了很多4個編譯器,剛好針對語言的4中特性,這次看看能不能把它們綜合起來,變成一個真正有用的腳本引擎。當然這不是重復勞動了,畢竟自己實現(xiàn)給自己帶來的質(zhì)的提高會比你純粹用別人的要高很多。但至于最后怎么辦,其實我還是覺得.NET的潛力比較大,總之挑戰(zhàn)它是不明智的,但我還是想自己試一試。
從第一個QBasic的Hello World到現(xiàn)在也差不多要10年了,初中因為不小心拿到了本QBasic的書然后戲劇性地開始了我程序員的人生,所幸中間沒有間斷過,而且也將對一貫來編程的激情很好的保存了下來,有增無減。至于說30歲(其實日本說的是35歲)就要轉(zhuǎn)管理什么的,我還是不太相信,或者說我愿意就做一線的開發(fā)人員,或者架構(gòu)師(當然這個跟通常意義上的架構(gòu)師還是不一樣的,有朝一日真的給我做了,我還是想跟一線的程序員一起寫代碼)。管理還是不適合我,畢竟我對錢(或者是權(quán)力?)沒那么渴望,夠花就好了,雖然我自己沒多少錢。
總之,要有激情,無論是對什么事情。剩下的就是要追求快樂,不同的人對快樂的定義還是不一樣的,不過我目前只要能寫有挑戰(zhàn)性的代碼,我就會覺得很快樂了。工作了之后因為在上海,瞬間感到了房價的壓力。只是如果要我犧牲寫代碼的時間和樂趣去換取那些所謂的財產(chǎn),我還是不太愿意的。
posted on 2009-12-23 05:22
陳梓瀚(vczh) 閱讀(14820)
評論(40) 編輯 收藏 引用 所屬分類:
啟示