九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

小小游戏程序员工作一年加九个月后的工作总结

本文从快过年时开始写,直到写到过完年,算是拖着过了年…….因为过年回了家,所以过了一个繁忙的新年,过完年后才总算清闲一点了,也很久没有写博客了,借此文总结一下最近的学习及工作,不荒废了我一直以来保持的好习惯.上次总结是在 2009年11月06日了,那是在新工作确定在目前的公司后,入职前一天的时候写的,呵呵,现在看来,那时候很多担心最后都没有成为现实,而现实发展的却比自己能想象的都要好,上天对我的眷顾从来没有停止过,使我从来坚信”天道酬勤”.与以前所有的工作总结不同的是,本文不是以编程学习经验的增长为主线,而是想记流水账一样记录了一些事情,主要原因倒不是因为别的,实在是因为这段时间的确发生了太多事情,而事实上学习上只有OpenGL学习较为系统,值得一提.

目标

目标是啥?目标是那个将你从混沌中迷茫失措,然后陷入更大的混沌+迷茫中拯救出来的东西.大学真是这样过的,于是乎几乎没有毕业.
我在最后一个学期开始的时候还有36.5个学分,13门课程没有通过,我从来记得那么清楚,无论过了多么久,那是我人生中最最迷茫及痛苦的时刻.于是,最后一个学期我少了很多关于毕业的乐趣,只有怎么通过考试的思考,有上午照毕业照,同学都去校园拍照留念,我独自中午开始复习以应付下午考试的时候,也有下午同学们吃最后的晚餐,我需要在酒未足,饭未饱时先行离开去参加晚上考试的时候,那些日子不堪回首,任何一门考试要是再次’挂’掉,意味着我无法正常毕业,上天是眷顾我的,我还是这样觉得,总之,努力+运气,我最后全部通过了,实现了副院长所谓的奇迹.那段日子虽然以痛苦开始,但是以很好的结果结束了,所以最后回忆起来是甜的。
但是,考试全部通过后,因为最后一个学期完全在应付考试,没有做毕业设计,所以,事实上,毕业证还是晚拿了半年.
接下来的半年也绝对是以痛苦开始的,可以想象,一个大学应该毕业但是没有毕业的20多岁的大男人呆在家里会被家里人怎么看待.那段时间是我人生的转折,我开始思考自己的人生.大学除了3年半的游戏+半年的考试外,没有给我其他什么,那么我接下来又能干什么?最后我选择了遵循自己内心的选择,编程,几乎抛弃了大学所学的电子,接着义无反顾的投入到编程的学习当中,半年时间其实也没有看啥书,就了解了C++,看完了,并且通过了解了一下MFC.然后拿到了毕业证就出来找工作了.但是,我对编程这个目标是非常明确的,记得当时给女朋友描述这样描述:无论我现在能找到什么样的工作,哪怕是在广东做一个搬东西的苦力,每天工作10个小时,我也会利用业余时间学习编程,最后成为一名合格的程序员.当然,事实上,结果总是比我预期的要好得多.

从想成为程序员,到成为程序员

但是,刚开始找工作的时候,在长沙的找工作经历是痛苦的,因为是湖南大学毕业,在长沙找工作本来是有优势的,本地的企业还算比较认可湖南大学,但是多次笔试/面试的结果都不理想,一方面实在是没有经验,另外一方面长沙的软件公司都是做企业软件或者网站的,需要的都是诸如JAVA,C#,PHP,Ruby等当时我根本没有任何接触的语言,当时的郁闷心情可想而知.但是,对于C++的信心还是让我走到了有更多C++市场的地方–北京,正好当时堂姐在北京,就来北京投靠她了.比想象的要顺利的是,在真正考试C++的笔试/面试面前,我异常的顺利,当时接到3份北京的面试通知,仅仅第一天去面试第一家的当天就被录取了,那是2007年5月8日,劳动节休假后的第一天.然后也没有继续接着找工作了,直接在第一家公司工作,面试通过后才知道公司做的是网络游戏.从此,我开始可以称自己为游戏程序员.
作为玩了十多年的游戏玩家,最后能做游戏,按道理难免有点喜出望外,可是因为在<小评《DOOM启示录》>中描述过的原因:”虽然曾经认为游戏就是自己的人生,甚至考虑走上职业玩家的道路,但是大学毕业后,痛定思痛,加上生活的压力,彻底的与游戏诀别,即便自己处于游戏开发的 岗位上,却几乎不玩游戏,认为那是浪费自己的时间,因为我以前浪费了太多时间,所以此时如何还能再浪费?因为这个原因,开发游戏的时候我也选择了一个尽量 远离真实游戏开发的岗位,服务器端的程序开发,这样,怎么说离游戏远一点,将游戏视为害人之物的我心里面的内疚也许会少一点吧。”中途与副总商量了一下,副总也与我讨论了一些关于游戏制作重要性方面的东西,告诉我作为网络游戏,客户端,工具,服务器都很重要,不要仅仅认为服务器重要,或者只有服务器开发技术含量高.当然,这些我都知道,可惜,这些都不是我选择做服务端的原因,所以,在初期做过一些客户端方面的工作后,副总也尊重了我的意见,中后期我主要做的是游戏的服务器端工作.那时,我常称自己为”网络游戏服务器端程序员”.

从痛恨游戏的服务器端程序员到热爱游戏的手机游戏程序员

那段日子的学习及进步是很大的,我在以前的多篇工作总结中都有提到,但是最后我还是选择了另外一条路.
那得从看说起,看的时候大概是2009年的8月2日(因为那篇读后感博文发表的日子如此的确定,所以我可以这样清楚的写到),用了一个通宵,看完后对游戏的看法变了很多,当然,也与长期的服务器端工作经历有关,总之,那时起,我改变了对游戏开发的看法,我在那篇小读后感中这样写到:”我愿意做卡马克,每天坐在电脑面 前一动不动,专心的沉溺在程序的世界,每日只要有可乐解渴,披萨充饥即可。”(其实我在中国提出这样的要求比卡马克高太多了,因为披萨在中国可不便宜啊^^)几个月后,看到新同事的博客上,记录着卡马克那曾经让我充满激情一段话,甚为感慨,现也摘录于此。

“在信息时代,客观障碍已不复存在,所谓障碍都是主观上的。如果你想研发什么新的技术,你不需要几百万美元的资金,你只需要在冰箱里放满比萨和可乐,再有一 台便宜的计算机,和与之献身的决心,你即可拥有任何你想拥有的编程境界!- John Carmack”

被同样的语言所激励,说明我们有同样的梦想,所以在同一个地方工作.此是后话.
然后,我开始接触客户端方面的知识,看完了著名的一书,这本书如同传说中的一样好,更加觉得编写游戏客户端才是编写游戏的王道,那样才叫做游戏.一方面由于原公司开发的网络游戏市场表现有限,公司的士气低迷,老总自然也是着急,但是此着急没有去鼓励大家的士气以求共度难关,反而变本加厉的加班,另一方面,感觉自己以前主动申请及强烈要求做服务器端程序,此时突然改口要做回客户端也不太好,再另一方面,随着GPhone的正式面世,对移动市场产生了一些兴趣,(表现在博客上好几篇Android平台开发的学习上,虽然其实只学习了几天),希望能去进行移动平台上的开发,这些理由加起来,我在9月初正式提出了离职.离我读过只有1个月时间,事实上,一本书改变一个人人生不是假话,绝对就可以算是改变了我的人生.在9月中旬,正式离职,然后休息到10月初放完国庆的假期,才开始找新的工作,我是这样打算的,也是这样做的.
在这工作后难得的假期中,为新工作做了一些准备,因为目标明确,我学习了OpenGL,这才是移动平台开发中图形接口的通用标准,并且,在那时,以平均2天一篇的速度,一边学习,一边写了一系列关于OpenGL学习的博文.见<Win32 OpenGL系列专题>.当然,后来才知道,其实大部分移动平台使用的是OpenGL的移动版本,称为OpenGL ES.
找工作的时候,前一周除了”完美时空”,”畅游”这两个北京的大游戏公司,(那时候没有看到网易在北京招人)投的都是移动平台或者相关领域开发的公司,只投了几份简历,没有人叫我面试………..默哀中,后一周放宽了标准,再投了几份简历给一些认为还不错的网络游戏开发公司,第三周后开始陆陆续续的收到面试通知,最后面试了4家公司,(还有两个外地公司的电话交谈,不知道算不算interview),全部录取,然后,在一家国内老牌网络游戏公司及现在这家专门开发手机游戏的外企中仔细比较,最后选择了现在所在的公司.
最具有讽刺意味的是,现在我工作的公司虽然是第一批投的简历,但是确是几家公司中最后通知面试的,从投递简历到通知面试差不多隔了一个月……….
当时面试的时候,现在公司程序员的总leader告诉我可能会搞JAVA,所以我当时还有些担心,还写了篇博文<我都不知 道我为什么要在JAVA过了巅峰的时候学习JAVA-_-!>,事实上,这也是一部分我差点没有进目前公司的原因.当然,最后结果比预期的又要好,培训的时候我就知道,我还是会继续搞C++,到了培训结束,进的项目就更加让人喜出望外了,我进的是IPhone项目,在这里,纠正了很多我对IPhone开发常识性的错误,并对IPhone开发有了一些全面的认识,为了更加好的了解这个平台,我还特意买了第3代的IPod Touch 32G,并且,在长达1月的安装黑苹果的奋斗后,(中途甚至特意按一些推荐标准升级了主板及显卡)彻底地放弃了,买一个MAC Book,真正全面学习Objective C及IPhone的开发,在公司,由于公司原有框架的封装较好,事实上我是根本不会用到任何IPhone SDK及Objective C的东西的,用的语言也是C++,按我的性格,进行一个平台的开发,此平台的原生语言(或者主要语言)是必须要了解的,不然,甚至都不能了解此平台.
现在,别人问起,我会说自己是一个做手机游戏开发的程序员.
新公司很好,远远超出预期,因为新公司在网上的声誉不是很好(也许可以说是很不好),当然,有加班较多的原因,但是因为原来的公司加班更多,所以我倒也没有太大的感觉了,反而是一些人性的制度,初期的培训及一些培训讲座给我的印象较为深刻,并且,因为新公司在IPhone开发上数一数二的水平,事实上也接触了一些国际上很新鲜的技术资讯,这些个人感觉较为难得,远非一般国内小公司可比.当然,最最重要的是,在什么样的公司,你将会有什么样的同事,在优秀的公司才能同优秀的同事共处,才能使自己变得更加优秀,这才是我感觉现在的公司最大的优点.想起这次回家,原来的老同学们在一起纷纷感叹社会的黑暗及不公,就越发能这样觉得.当然,当年的道路选择,决定了一个人未来行走的方向,我看到的都是光明,因为我选择追寻太阳.

学习经验总结

如同我一开始就提到的,这段时间发生了太多事情,而事实上学习上只有OpenGL学习较为系统,值得一提.但是,其实有些很零碎的东西也是不得不学习的.这里就学习的主线还是大概总结一下.首先,在第一家公司的末期,看完了,对游戏客户端(在以后,我提到的游戏开发仅指客户端,当然,其实此提法也仅仅是针对网络游戏罢了)这边的开发有了一个大概性的了解,印象最深刻的是游戏运行框架上的,游戏的程序与普通应用程序架构上差异很大.这里在<游戏中的动画>一文中有一些描述. 当然,其实说起来,游戏本质上就是一个实时交互的动画而已. 对游戏有了一些粗浅的了解以后,其实能让自己进步最大的应该是实际的开发几个自己的游戏,但是我没有这样做,因为目的及计划上的原因,我希望等到将来我学会了Object C后在IPhone上实践,所以一切都拖了下来. 然后,我较为系统的学习了OpenGL,看的是红宝书,事实上,现在想起来,此书其实不是入门的好书,因为太偏重于API的讲解,像我这样其实对图形方面都不是太了解的人来说,很多东西都没有理解,当时一边学习一边写的<[Win32 OpenGL系列专题](/)>其实有很多弱智的错误,这些我想留待我现在将全部看完后再回头修改一次. 在公司的培训时,学习了SVN的使用(以前我都是用VSS和Mercurial/TortoiseHG),学习了动画的基础知识,学习了3D编程的基础,学习了Irrlicht这个开源的3D引擎的使用.其实光是把那一个月的知识消化完都会需要一段较长的时间,起码,到目前为止,Irrlicht引擎的使用我都没有完全的掌握,更别说其源码的阅读了. 学习完OpenGL后,我发现其实OpenGL仅仅是图形的应用接口,本质上的东西是图形学上的,因为没有基础,我看些较为基础的数学知识,然后写了3篇3D编程方面数学基础的文章,<[向量及其运算](/)>,<[矩阵及其运算](/)>,<[矩阵基本变换](/)>再后来,觉得有必要深入的学习一些,看了<3D数学基础:图形与游戏开发>一书,才发现,我那三篇其实也就相当于<3D数学基础:图形与游戏开发>一书的前面一点点知识,但是,我其实是在看到此书前写的那3篇文章,那3篇文章浏览量可观,现在我按标题[3D编程数学基础](http://www.google.com/search?hl=en&newwindow=1&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=3D%E7%BC%96%E7%A8%8B%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80&aq=f&aqi=&oq= "3D编程数学基础")搜索此书时,发现我的文章排在Google的第一.....不禁感叹一下....... 其实,从博客文章中发布文章的内容也可以看到,我关注的知识慢慢的从通用的语言,(比如初期的C++,STL,Boost,Python,Lua,Bash等),到游戏有点相关或者根本不相关的技术,(比如Win32 API,Linux,数据结构,算法,异常处理,文件系统,反外挂,反汇编,字符编码等,应该还包括一些GUI库,比如Win32 SDK, MFC,Qt),到真正与游戏相关的领域,(比如OpenGL,图形显示,3D,动画等),事实上,也真是一个从非游戏程序员到游戏程序员的转变.(虽然其实从工作以来就一直在做游戏)事实上,博文与我关注的东西一直是很相关的,未来估计是以对一些通用编程技术,OpenGL,IPhone开发,Object C等为主.其实,我常感叹,我的博客的文章实在太杂,对太多技术都是蜻蜓点水般的一掠而过,(比如Android,JAVA,pyQT等),很难想象订阅我博客的读者有着怎么样的心情,因为我感觉很少有可能有人像我一样对这样广泛的领域有过了解或者想要了解,记得上次在"[酷壳 – CoolShell.cn](http://coolshell.cn/)"上看到一个词,"广谱技术爱好者",呵呵,形容我,实在是恰当.在学习OpenGL时,我都没有能限制自己的兴趣,还额外看了一本D3D龙书................ 当然,其实偶尔也能感受到学习面较广带来的好处,但是,最常感叹的还是自己在太多不相关领域消耗了太多时间,但是,为啥我选择了编程了,主要还是因为兴趣,既然如此,为啥要去压抑自己的兴趣呢?还不如趁着有兴趣,好好的看看一些有意思的技术,以防哪天没有兴趣了,连看这些技术的想法都不再有了.现在其实有些生活压力了,所以才会感叹自己在不相关领域消耗的时间,因为那些时间的消耗并不能为了带来实际的利益,但是也许生活压力还不足够大吧,所以我还是能够想着由着兴趣走,当然,假如生活还是这样下去,估计,某年某月,我的想法就会真的改变了. 最后,其实学的东西多了,对语言的学习就越发没有那么排斥了,近两年前刚开始找工作的时候,因为学的是C++,所以碰到某个公司说要我学C#的时候,我还挺反感,干啥啊?我学C++叫我做C#,那我不是白学了?而现在,公司要做JAVA,就学呗,公司是做IPhone,那就学Objective C呗,哪怕事实在在公司其实不学Objective C也完全可以,但是我还是想学,并且觉得应该学............回忆起当年对apple的反感,什么?为你开发软件还得买一套你的电脑,还得每年给你交钱?有没有搞错?直接拒绝了IPhone及Objective C.而是宁愿去学JAVA及Android,但是现在却真的买了Mac Book去学习,工作也是IPhone项目的开发,世事变迁,怎一个唉字了得.反过来,也感叹,Apple及jobs的确太牛了,牛到我就是明摆的告诉你我就是牛,你还是得老老实实乖乖听话,跟着我混. 想起来,我还真是越来越混乱了,一直说学的太杂太多,但是到了现在,从Windows游戏,到Linux服务器程序到Mac OS程序。。。。。。唉。。。工作中开始开发IPhone游戏了,有什么办法呢?

分类:  随笔 
标签:  工作总结 

By 九天雁翎

2010年02月27日 | 九天雁翎的博客

前一篇: 游戏中的动画简介 后一篇: MacOS中的剪贴板操作 With Objective C