2013年终总结

2013-12-31

2013年终总结

从今年的4月1号开始,我彻底的结束了自己的学生生涯,正式踏入职场。

大半的的时光,回想起来有些虚度,学到的有用的东西不多。

公司的项目

从入职到现在,一直做的是一个类似pet rescue的消除类游戏。从项目的角度来讲,将2013的东西做到了2014年,这已经是我非常不能容忍的了。 从技术角度,项目本身没有从我任何我觉得有意思的地方。但毕竟大部分的时间都在这个项目上面,总会学到一些东西,虽然不好玩。

libgdx

这个引擎上手很快,引擎本身封装的还是挺到位的。一个月之内差不多大部分的东西都可以上手了,到三个月基本上掌握到我现在掌握的80%以上的内容。公司对libgdx有很长期的积累,基本上大部分的游戏都是用它做的。我相信即使在世界范围内,应该也不会有其它公司对它的使用程度超过我们。

由于是libgdx是开源的,我的项目直接是基于某个版本的源代码,常常是直接去改库的代码,不好的习惯,呵呵。不过我们的工程师好像都有这种癖好,正是这样,才对它的内部实现会吃得透一些。学到最多的方面,差不多都来自于对libgdx引擎的熟习,现在基本上已经收放自如了。不过貌似没什么价值,如果以你积累的经验会值多少钱的角度,或者这种方式衡量价值的话:立刻跳糟,会有多少公司愿意收留。

关卡生成器

游戏做这么久,副产物一大堆。这个相当于我项目的一个子项目了。关卡是用tiled铺的,不过只是铺一些固定的部分,而我写了个关卡生成的小工具,根据一系列规则生成完整的关卡。开始还走过一些弯路,觉得生成的关卡应该是有解的,然后还会做一个模拟器,然后深度优先去求解状态树,蛋疼的要死。

flash4libgdx

这个算是相对有用一点的副产物了。我写的一个用于libgdx的flash动画解析的库。libgdx最不爽的地方就是配套工具不够完善,动画什么的就不好调了。老大觉得用帧动画会导致资源过大,就强烈建议我去做个flash解析,设计师那边用flash做动画也方便,于是就搞了这个东西。

可惜完成度不算太高,我自己项目中倒凑合着基本能用着,同事也有个用到了这个库,不过还是有一些问题。想去完善它,但是项目紧了就没办法搞。公司以前也有人做过类似的工作,但很弊病的一个地方就是基本上都只做到自己项目可用的地步。前面一个同事做的就是跟andorid绑死了,而且不支持补间帧,我只好卷起袖子自己动手了。本想做成个比较完善的库的,后面项目时间一紧才发现跟他们一样太监了。

ui的代码生成工具

经过老板几次的ui大改,终于受不了了去写了套gleed2d界面解析的代码生成工具。这个东西基本上就是在gleed2d中铺好界面,导出xml文件,然后我拿这个xml直接去生成ui相关的java代码。也是跟项目依赖比较紧,所以都没开源出来。再次想吐糟libgdx的配套工具做得太弱了,弱暴了!动画编辑器,ui编辑器等等这些都是做游戏必须的。

游戏开发通用的东西

搞的是android游戏开发,但android方面东西却基本上没怎么接触到。引擎封装得太狠了,自己能接触的都是图像方面的东西。这些经验倒还有用一点,毕竟拿到各个引擎中都是相通的。从资源管理,到shader之类的东西,OpenGL渲染流程之类的。

自己游戏中也玩一些高大上的东西,像尝试去用framebuffer做遮照层的挖洞效果,同一份资源用不同的shader画灰色未解锁状态,弄mesh的uv的计算乱七八糟的,同事称之曰:瞎搞!从最初的连rgba8888和lumerance格式,nearest和linear区别什么都不懂,到现在总算是游戏开发入门了。

总的来说,做公司项目过程中,技术提升比我想像的慢,我不满意,没有体现出那种小公司里什么都要接触到的感觉。


Go语言研究

相对于公司项目,感觉潜在回报最大的可能是Go语言方面了。我从1.0版就开始关注这门语言,对它的内部实现研究得比较多。本想写一本关于Go语言的内部实现的书籍,放在github上,坚持了好一阵子,现在的star大概有70多个,这个应该是今年最有意义的成果了。后面项目时间紧,加上覆盖的内部越来越多,更新就少了。挖了好些坑还没填,但我保证这件事件我一定坚持做下去,立此为证!

尽管书的更新有些跟不上,但总体来说,对Go语言的关注一直没放弃过,这是2013年做得相对比较好的一件。这里可以学到很多东西,从垃圾回收,到M:N调度模型还有goroutine以及channel编程理念等等。我尤其对它的runtime感兴趣,研究底层实现最好的地方就在于,对它了解越多自己使用起来就越有底。

从实践上,工作中用得到Go的地方不多。这是我现在最喜欢的语言,所以我能用上Go的地方都是用它了。比如说自己项目中关卡生成的部分就是用Go写的(xml的解析很好用),项目中的ui代码生成也是用Go写的(准备好数据结构之后,很方便配合template做代码生成)。还有平时练手玩之类的,比如这里,还有这里,包括这个博客本身也是用Go语言写的。说来惭溃,博客平时不怎么打理,做的还是很不到位的,像评论和rss等至今都没弄...

兴趣是最好的老师,我觉得自己应该是适合做后台的,我相信将来这门语言也一定有能用得上的一天。


工具

工作后换了台mac,弄了个机械键盘,总算硬件方面已经是满意了。这些东西带给我的总的体验提升是相当滴不错的。我对工作环境,键盘键位,编程语言,编辑器这类东西非常挑剔。黑轴打击感非常完美,拿着就有想敲代码的感觉。osx系统蛮不错的,谁用谁知道。键位方面,我交换了caps键跟control,然后把右command改成了option:只使用左command键够了,右command用于文本编辑的快捷键。编程语言自从我遇到Go之后就很少再纠结了。

失败的地方就是在编辑器上浪费的时间。我不知道自己使用过多少款编辑器了,每隔一些时间就会不爽,要找一个称手的编辑器,从vi切到emacs,再从emacs切回vi,已经不知是第多少次了。

今年做的切换就包括从emacs的evil模式,到sublime text,到emacs,再回vi。其实vi的默认键位已经是极致的了,emacs也很优秀。本来evil模式应该是完美的,但是在emacs中使用vi却会发现编辑跟其它快捷键不是一套的,很不和谐。sublime的界面很优秀。中间还不断尝试过一些小众的东西,甚至godit,lime这些Go语言写的编辑器。我想一门我自己熟悉的语言写的编辑器可以自己改。textadept也用了一阵子,本来都几乎决定就是它了,却发现这货居然不支持中文。切换很需要成本,却始终不能找到完美的编辑器,白白浪费大量时间。有时候想自己写一个,却发现这其实是个极不简单的工程,不展开说了,总之这个念头总是每隔一些时间就跳出来想毁掉我。

现在我使用textmate。虽然不是我真心满意了,但是我发誓不再为寻找最好的编辑器浪费时间了,再这么干就剁手,立此为证!


读书

读书的习惯一直是保持的,每天晚上睡前差不多稳定的2小时,或者读书或者写作。

SICP又不完整地过了一遍,关于函数式语言仍然是不能释怀。把The Little Schemer看了一遍,还有The Seasoned Schemer,总算懂了Y Combinator。

刚入职时前几个月EOPL和PLAI也看了一点,但现在总算不至于纠结到想去写编译器了,所以也没认真研究。

Programming Clojure也看了一点,甚至还有傻逼到读racket手册,简直是傻得不轻,花了几小时看一本叫Realm of Racket的书,烂极了。看开了,函数式语言确实于我还没到实用的地步,虽然我接受了其中的一些概念,让自己视野更开阔了,但都于真正编程用不上。

Programming in lua也是回顾了一遍,还有Ruby入门教程什么的,其它语言总是去了解点皮毛,但是不去使用总是学不会。

好吧,算下来技术上有用的好书还真没怎么读。然后就是禅与摩托车维修艺术以及浪潮之巅这种非技术类的。


折腾

大多折腾是围绕网游服务器,游戏引擎之类的。间或弄弄编程语言和编辑器。应该说,我总觉得自己应该合适做后台方面的东西,或者系统架构,或者游戏服务器,自从进入这个不知道是什么的行业以来,总是一直在调整自己。

skynet & hive 研究过一阵子 。很崇拜云风大牛,他的博客一直是常年关注的,很多时候会去一遍遍读他的文章。应该算是我见过的质量最高的博客,没有之一。每当有什么新的开源项目放出来,总会在第一时间clone下来看一下。

darkeden 在我刚读研的时候研究过一把,今年又浪费了一些时间折腾它。本以为从一个泄露的网游源代码中学习是一条路径,但是获取代码困难,相关研究资料匮乏。

daimonin 另一个方式就是从开源网游中去学习。这个却非常失望,服务端代码很得很糙,客户端sdl的很差,而ogre3d版跟本编译不了。

planeshift 折腾这个就是把源代码编译过了,crystal引擎没去看。

ogre,本来想找网上流传的天龙八部源代码研究的,所以也是折腾了一下ogre这个引擎,在osx下编译通过,跟着hello world走了一遍。

love2d 一个lua的2d游戏引擎,也是想看看的。

unity3d,用一个周未研究了一把,相比libgdx,真心觉得这货才是做游戏的。

编程语言 clojure racket lua ruby 什么的,可惜总是没有拿来实用,又不像Go语言那种深入到底层地学习,总是把语法书箱什么的翻一下,过了又忘了。所谓折腾,就是都没用多长时间,一天到一个星期,最后什么都没得到。

-------------- 2013是比较迷茫的一年,有一条线是比较明的,就是感觉从项目中学不到什么技术,对自身发展不利。

试图调整自己方向,想做后台,先是Go语言。

后面觉得可能更现实一点,既然已经进入了游戏行业,就网游服务器后台吧。于是去找开源网游或者源码泄露的网游研究。想做一个demo,结果发现服务端又必须依赖客户端。

没办法又回到游戏引擎上,各种乱尝试,最后发现还是受到美术资源的制约。

折腾的东西都没法产生价值,三天打渔两天晒网。

或许是,2013年我整年都没找到答案,我内心到底想做的是什么。又或许答案已经很明了,环境总有些东西阻碍着自己成长。不管怎么样,我将带着问题进入2014了,等我游戏发布,相信我会有答案的,必须有。

于2013年最后一天的子夜。

年终总结