none
2005-2009年个人总结 RRS feed

  • 常规讨论

  •     今年事情比较多,第一个是自己终于从本科毕业了,第二个是自己找到了工作,拿了一份offer。虽然当初为了去Microsoft实习错过了一大堆其他公司的面试机会,只投了Microsoft,Google和百度。不过最后还是进了Microsoft,在这危机四伏的日子里,虽然说自己写了10年代码总归有点功力,但是也有运气的成分在。只是面试百度的时候我明明在简历上写了我人在上海,他非要我飞回广州面试,很不爽,拒了他。

        去年下半年几乎都投身Microsoft的实习,到了12月上旬回学校,于是从今年的元旦开始其实就是在学校里面混日子了。其实还好,完成了一个阉割版的Haskell编译器当毕业设计,还做了一个C语言编译到机器码写入内存的编译器,最后重写了Vczh Library++3.0,还把它开源了,虽然还没最终完成。不过开源了之后就得补文档了,因此近期的开发进度可能会慢一点。

        回想大学四年,还是写了不少代码的,也足够拼成一张至少可以留住HR眼球的简历了。当初比较大的转变是我刚上大一,可怜的Borland就不行了,于是很喜欢的Delphi看来也有危机了,所以转去C++。幸好所学的知识并不是绑定在Delphi的平台上,因此刚开始也只觉得是换了个语法。不够C++实在是博大精深,里面可以用各种各样的范式写代码,比较突出的是元编程,虽然这种东西在现实生活中重要性不言而喻不过所占比例还是很小的。

        于是开始拿C++练手了。高中的Delphi时代写了不少游戏,积累了一个2D的游戏引擎,其实也不复杂,不过好歹也到了3.0了,里面有图形图像、音效、数据管理、脚本引擎,还有一个UI。因此C++上手了之后,自然是移植它了。移植的过程中发现C++的写法跟Delphi还是截然不同,因此Vczh Library++ 1.0基本上是失败告终,虽然那个Delphi的游戏引擎大部分都实现了。在开发的途中我曾经写了一个模仿显卡固顶管线的3D软件渲染器,不过最后一个Demo应该是在大二,用OpenGL实现了3D模型的骨骼动画,用的好像还是Halflife 1的几个模型,什么鸟啊,僵尸啊,警察啊。后来觉得实在是找不到美工,而且自己还有一项喜欢的,也就是写编译器了,所以干脆就集中力量搞编译器吧。

        第一个见得人的编译器应该是Vczh Jove Script了。这个东西阉割了Java,然后实现了一次,主要是针对OOP,有继承,有虚函数,还有泛型。当然泛型我实现了跟C#一样的参数约束,也就是可以指定说某个类型参数必须继承与另一个类。数组使用引用计数,其他的都垃圾收集。当然最后发现数组用引用计数是不对的,会导致垃圾收集。

        之后我就对计算机的理论燃起了热情了,首当其冲当然是编译原理。当时受到了CSDN上那个袁泳的一点指导,其实主要不是技术上的,是方向上的,后来给我看了一本很厉害的书叫《Parsing Techniques》。很多知识都从这里面吸收了,然后就要开刀,当然是从最简单的正则表达式引擎下手。第一次写还是有点别扭,到现在一共写了三次,其中第二次是在第一次写完了之后觉得很不爽立刻重写的。写完了就轮到Syngram,是一个将文法写进C++然后自动变成语法分析器的小库。当然后来也重写了。

        上面的事情完成了之后就着手Vczh Free Script的开发了。这是一个“纯”动态语言。为什么说纯呢,因为我坚持所有东西匿名(包括类定义,其实结果就是返回一个类型,像C#的System.Type,然后可以到处传),所以为了给一个东西命名就写一个赋值语句。当然不仅如此,我还实现了函数闭包,然后将之后的所有特性譬如说动态的Multiple Dispatch(虚函数是Single Dispatch)啊,namespace啊,类和继承什么的统统编译到函数闭包上,整个语言是匿名的。当然我还是把它是实现成一个C++的类库,如果你愿意在我的接口下面写插件的话,就可以跟Python一样直接应用到你自己的工程里面去了。

        在这个过程中我学习了很多关于编程语言方面的基础理论,还学了一点数学虽然我还是觉得数学有点难度。完了之后就开发一个小型的IDE,其亮点是就算代码是动态生成的,我也能捕捉到然后给你单步调试。不过这个由于稳定性并不是非常好,第一次将C++跟C#混起来用还是有点力不从心,因此就没拿出来贡献给大家了。

        之后就开始Microsoft的实习之旅了,在实习的过程中我首先封装了一次win32api的GUI部分,尽量达到跟Delphi一样好用,于是有了这个Demo,然后做了阉割版Haskell——也就是Kernel FP了。当初叫这个名称我只是想看看实现一个最小的纯函数式语言的内核要怎么办,要包含多少功能(当然是越少越好,其他的都是语法糖或者库,不过不能让能力下降)。后来又看了一本书好像叫做《The Implementation of Functional Programmang Languages》,也很好看,学到了很多东西。

        于是2008年就结束了,进入2009年,做了一个CMinus,可以把C语言编译到内存里面,搞成x86的机器码,然后就能将一个写了代码的txt文件变成一个函数指针了。然后就毕业了。

        7月13日开始入职Microsoft,虽然说是在开发界面,不过我还是觉得需要自己仍然保持热情,于是工作结束之后自己要继续写自己的代码,也就是Vczh Library++ 3.0了。上面做了很多4个编译器,刚好针对语言的4中特性,这次看看能不能把它们综合起来,变成一个真正有用的脚本引擎。当然这不是重复劳动了,毕竟自己实现给自己带来的质的提高会比你纯粹用别人的要高很多。但至于最后怎么办,其实我还是觉得.NET的潜力比较大,总之挑战它是不明智的,但我还是想自己试一试。

        从第一个QBasic的Hello World到现在也差不多要10年了,初中因为不小心拿到了本QBasic的书然后戏剧性地开始了我程序员的人生,所幸中间没有间断过,而且也将对一贯来编程的激情很好的保存了下来,有增无减。至于说30岁(其实日本说的是35岁)就要转管理什么的,我还是不太相信,或者说我愿意就做一线的开发人员,或者架构师(当然这个跟通常意义上的架构师还是不一样的,有朝一日真的给我做了,我还是想跟一线的程序员一起写代码)。管理还是不适合我,毕竟我对钱(或者是权力?)没那么渴望,够花就好了,虽然我自己没多少钱。

        总之,要有激情,无论是对什么事情。剩下的就是要追求快乐,不同的人对快乐的定义还是不一样的,不过我目前只要能写有挑战性的代码,我就会觉得很快乐了。工作了之后因为在上海,瞬间感到了房价的压力。只是如果要我牺牲写代码的时间和乐趣去换取那些所谓的财产,我还是不太愿意的。
    2009年12月25日 4:36

全部回复

  • 陈兄的经历十分的丰富啊!
    对我很有启发意义啊,我也编程好久了,但是编写的东西明显没有你那么底层化,应该向你多学习啊!
    重要的是做自己喜欢的事情啊,这样才能做好!
    周雪峰
    2009年12月25日 5:48
    版主