游戏编程随想
这段时间赋闲在家,对近些年的工作进行了复盘。工作么多年,一点小心得,分享一下。
1. 如何定义一个能力很强的游戏程序员
- 拥有很强的battle能力,从根本上去说服一个人,改变一个人的看法,让他配合自己的工作,这个非常难(反例:级别压制,我是你是上级,或者我的上级要求这么做),更高阶是做倒知己知彼,站在多方角度考虑,给出靠谱方案。
- 具备一定的前瞻性,在设计框架的时候充分考虑到将来的迭代计划,能预计到将来策划可能会提什么样的需求(纵使策划现在矢口否认),在现有的框架下,尽可能快的满足策划的需求。
- 独当一面的能力,在项目的某一个方面或者某个模块,做到事无巨细,是团队里最熟悉这一模块的一员,不仅能出色得完成份内工作,还能驱动需求的迭代,给其它岗位的同事提出建议和解决方案。
- 工作效率高,善用各类工具或者能自己写一些自动化工具进行编码,测试等。具体体现在,交付速度快,bug少,返工少,加班少。
- 攻坚能力,有能解决核心问题,如关键算法,修复致命bug。
- 知识面要广,不拘限于某种单一的语言或者技术。每一种语言或者技术都有它擅长的邻域,只要把它用在恰当的地方即可。
2. 如何定义一个能力很强的主程
- 首先应该是一个能力很强的程序员plus
- 具备很强的识人能力,在短短的面试阶段,能甄别出真正适合自己团队的人才,所谓的适合不是面试笔试对答如流,而是具备上面说的优秀程序员的特性,或者非常有潜力成为这样的程序。
- 合理的安排任务,不把下属当工具人:根据团队成员的特性指派合适的任务,并给予高度自主权,所谓的合适,可能是该程序在某一方面的特长,或者是某一方面的技能需要历练,在出色的完成工作同时能得到能力上的提升。
- 把控进度的能力。对于完成策划需求的用时预估要准确,在给下属留有一定缓冲的同时,尽可能早的让策划看到原型。
- 对游戏有深刻理解,知道策划最终想要什么,还有他们此时此刻最想要什么。这有助于版本的快速迭代和上面说的进度把控。
- 留得往人。给下属争取更多的利益,给下属足够的发展空间。很简单直接,要么钱给够,要么不让人受委屈。
3. 关于开源
- 代码就像是程序员的底裤,不能随便给人看的。代码开源,就是把自己的内裤扒出来给人看。秀出来的,一定是很屌的东西。
- 不能为了开源而开源。开源应该是一个造轮子的过程,这个轮子不能重复造。一定是因为某个项目,或者库,可能会对别人有帮助。不能是说,以前我做了个很牛很牛的项目,现在把它的代码开源,来炫一下技。还有一些通过歪门邪道来骗赞的就不说了。
- 开源可以让自己的综合能力得到迅速提高。开源,其实说白了就是相互白嫖的过程。社区里什么牛马蛇神都有,大家共同维护一个项目,无私奉献和拿来主意都能各取所需,大家者有各自的需求。在这里,每设计一个接口,每提供一个功能,都会不由自主的考虑,这是不是大部分人想要的?会不会让项目变能冗余?能不能做的更通用点?扩展性好不好?等等这些问题,我们的自己的闭源项目里是很少思考的。长期以往,就会本能的写出更优质的代码,我们程序员最向往的高内聚,低耦合的代码。
4. 如何提升业务开发效率(大佬给的建议,实测好评)
- 第一步,对策划对案子。在开三方会议前,先把需求文档过一遍,有疑问的记下来,或者直接找策划问清楚。等到开三方的时候,与策划逐行对需求文档,把所有的疑问都解决掉。(这一步很重要)
- 第二步,与策划一起商定配置表的字段和格式,要求策划配一些能覆盖测试的临时数据,定好之后,写好导表检查。(这一步非常重要,当配置表搞定之后,整个数据模型已经完整的呈现在你的脑海里)
- 第三步,前后端沟通定协议。后端还要定一下要落地的数据库结构。这一步,前后端的通讯和交互也定了一下来了
- 第四步,写测试用例(有条件的话,最好加上这一步,并将其提前到第四位)
- 第五步,写代码(这个时候你对整个系统的需求已经了如指撑了,闭着眼都能写)
- 第六步,交付测试,然后愉快的摸鱼
5. 如何看待加班
- 没人会喜欢加班,但是身处游戏行业,又不得不加班。加班通常是为了实现一个共同的目标,比如在某一个时间点完成某一个版本,而团队里的每一个成员都必须在场。
- 加班其实是能力不足的表现,或者说是在正常上班时间摸鱼造成的。一般来说,人如果全身心投入去工作,从早上9点到晚上9点,会非常非常累。
- 只要不是公司制度上强制加班的,我都能接受。虽然加班的时候我大多数情况都在摸鱼,但是摸鱼也可以摸的有价值。比如做一些优化,为将来的版本做准备。
- 游戏团队是需要大量的面对面沟通,所以团队成员加班的节奏应该保持一致,不要出现错峰加班的情况,比如有些人加班到很晚,第二天很晚才来,而另一些人刚好错开这个时间,有时候想突然想找人对一下案子,却一直找不到人,卡进度,就很烦。
6. 其它的一些感想与收获
- 技术专家是团队的加分项,但不是必选项。不是交付为目的的技术研究都是耍流氓。
- 代码一定要简洁易懂,最好是,非程序岗的同事,能看的懂你的代码,并能从你的代码找出bug。
- 游戏行业发展到现如今,除非是在前沿开路的大佬们,绝大部分我们在开发的过程遇到的问题都是有标准答案的,不管是策划还是程序的方案,只要是脱离了主流的解决方案的,一定要留个心眼,你能想到的,别人一定有想过,别人为什么最终没有这么做,那他一定是踩到了什么坑。
- 当你发现很久之前代码有一段匪夷所思的代码,别着急删掉,代码是不会说谎的,一定是产品/策划在作妖。
- 备注是什么,不需要的,代码本身就是最好的备注。(除了有些地方是特殊处理,临时代码,还是要写一下备注,至少//TODO,否则被喷)
- 程序员的本质是什么,程序员的本质就是与计算机沟通的桥梁,我们写的每一行代码,本质上都应该是为了将来减少更多的重复的体力劳动,为此我们可以是大费周章绞尽脑汁也在所不辞。因此,一个程序的优秀特性应该是,勤于动脑,懒于动手。