15
2013
01

正规军的呐喊(一)

        招技术人员的时候,经常是我来面试。很多次下来,发现无论是新手还是老鸟,多多少少会受手游这个行业前辈们的影响——游击队式的开发理念。 虽然我也不是什么大神,但做了好多年独立游戏,进入手机游戏这个行业也有四五年,前后呆过三家手游公司,看过很多前辈们的代码,也接触了很多很多业内的朋友,对国内这个行业,也算是一知半解。现在斗胆对手游行业开发人员的一些问题进行剖析。

        国内这个行业大部分是从05年左右开始,当时以J2ME、Symbian为主,后来有了MTK、Android。其中J2ME至今兴盛了五六年的时间,直到现在的Android、IOS两大主要阵营,很多前辈们的理念仍然被保留了下来。我说的游击队式的开发理念,并不是我贬低前辈们,也并不是所有的人都这样,很多技术结晶还是值得我们去发扬光大,这里我仅指出少量不好的地方进行剖析。

1)编码不规范:

        这个应该算是整个IT行业的问题,不过手游很多人是培训学校速成,而且以小项目为主,没有正规的质量监管,所以问题尤为凸显。从最简单的包命名、类命名、变量命名到代码组织、注释,甚至空格、换行都应该有严格的规范制度。但我见过很多奇葩的代码,比如命名aa、bb或者拼音缩写,不知其含义;变量定义跟方法定义穿插在一起,代码上下混乱,可读性极差;类成员全部public甚至不写访问级;注释也是描述不清,爱写不写,爱怎么写怎么写。

        之前呆过一家单位,一款上线一年多的手机网游的代码需要维护,结果我发现所有报文的收发写在了一个类里,一个长达2000多行的switch case,其间穿插了对各种名为AA、CH等类的依赖,这对维护人来来说简直是噩梦。一款网游产品,它的后期可能是需要不断更新,不断扩充功能的,如果代码组织不合理,缺乏正规注释,缺乏文档,难以想象这个项目最终怎么做下去。浪费时间在解读和维护这些代码上,直接导致开发成本大大提升。

        另一个例子,我看过某几个业内知名公司的J2ME代码,单机游戏。整包仅有寥寥三四个类,一个Canvas(J2ME负责屏幕绘制与更新的主要父类)里集合了上万行代码,囊括了整个游戏的所有逻辑。试想,假如这个源码放在硬盘里n年后要拿出来移植,作者面对上万行的AAA、BBB以及几十个1、2、3、4、5状态的swich case,会不会泪流满面?以后每修改一个功能,都从这上万行里捞出相关模块修改,太可怕了。

        我认为,开发人员在编码的时候,应该以“这些代码别人不需要太多文档就能看懂”为原则,严格规范代码,添加注释。一个开发团队工作时,无论一个技术人员负责哪个模块,整个项目的代码他都能手到擒来,任意接手维护;不同编码者之间的接口调用,无需太多面对面沟通,仅通过先期文档和当前注释就应该知道如何使用,这就是规范的威力。

        对于编码规范,如果使用java,建议了解一下CheckStyle、PMD、FindBugs这几个静态检查工具,它们可以有效地规范代码,改正不良习惯。之前的代码建议经常重构,以保持健壮的代码以后随时可以复用。重构我推荐一本书:《重构:改善现有代码的设计》。

2)死啃技术,不注重软件设计:

        很多人为自己实现了一个多么华丽的粒子效果沾沾自喜,或是多么高效地利用了字库,又或是自己写了一个多么复杂的场景编辑器……我曾经面试了一个Android技术人员,前后他一直在描述自己封装了一套基于OPENGL的图象绘制框架,它能带来显著的效率提升。但当我问到他ArrayList与Vector有什么区别时,他甚至表示都没用过,我简单介绍以后他表示还是用数组比较习惯。钻研各种算法、实现技术固然是好,但是这些最多算是解决问题的一些方法、技巧,它不能成为开发人员发展的重点,最多当是点缀来了解学习。比如J2ME一大把的图象拉伸算法到Android上自带的Matrix就能完美解决,这些技巧总是有不适用和过时的时候,百度能轻松找到代码解决的东西不算什么牛逼的技术,只有软件设计能力才是核心技能。

        那软件设计能力具体指什么?UML、设计模式、编译原理、计算机网络编程等等。

        UML的作用,软件设计之初,不妨简单地进行UML建模,不求各个视图都具备,起码有大概的类图,对整个框架有个把握,对构建整个项目和后期修改拓展都提供清晰的思路。

        设计模式,那有太多的东西要说了。就面向对象的语言而言,开发人员对设计模式的理解,完全可以代表他的开发能力。只知道如何实现方法,如何写逻辑那不叫面向对象,面向对象语言执行效率相对较低,如果再不发挥它们开发效率高、设计优雅的优势,简直就是浪费。很多从业人员忽视设计模式,代码设计完全不考虑关联、依赖,做不到低耦合、高内聚,导致项目各个功能无法模块化,一处修改,处处有问题。

        关于设计模式,如果是新手,这里我推荐几本书:《HeadFirst设计模式》、《JAVA与模式》、《大话设计模式》、《敏捷软件开发:原则、模式与实践》。

 

本篇到此,下一篇继续内容:

3)一个人战斗:

4)开发流程混乱:

5)测试流程:

« 上一篇下一篇 »

评论列表:

1.爱撸小杰  2013-1-15 20:50:34 回复该留言
对于Arraylist,Vector这些,我认为面试就应该问他们如何实现,而不是如何使用。但实际开发的时候就需要他们熟练使用了。
.LeeStorm  2013-1-15 22:38:23 回复该留言
不错的建议,下次做面试我就出这个题,哈哈!
2.洪芷  2013-2-3 19:00:07 回复该留言
聪哥v5,受教了!
3.epcdiy  2013-4-5 23:25:37 回复该留言
在中国,项目效率和进度永远是第一位的,老板不需要你领悟某些复杂底层实现,有那么多来源库呢!
.epcdiy  2013-4-5 23:26:32 回复该留言
开源库

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。