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