IT茶馆消息:
游戏开发公司ArenaNet(NCsoft旗下子公司,是3D大型多人在线RPG游戏《激战》的开发公司。由前暴雪公司精英人员组建)内部有一个惊人的潜规则:当我们开展一次实习类的编程项目,实际上是为游戏行业准备人才。而这个过程,我们主要看中三个原则。
1.你做的一切都有价值。没有无谓的忙碌工作,每次项目计划都应该直接给工作室或者游戏带来价值。
2.你做的一切都将被评估。在编写代码之前我们需要详尽的代码评估、扩展设计和分析讨论。因此每个实习生都至少有一个高级程序员辅导,以确保其成果不可挑剔。
3.无论最终是否雇佣你,我们承诺你在离开实习项目时已是一个优秀的员工。
现在我被分配指导一个实习生,我发现这不仅仅是指导一个初级开发者的问题,而是一次机会来强迫自己明确完善自己的想法,这样我就可以清晰地把我在这份工作中多年经验传递给新人们。
也许你并没有致力于开发下一个伟大的MMO游戏,但是我认为以下的建议对于任何人的早期的编程生涯中,都有重大意义。
三思而后行
老木匠有条准则:“砍一次,量两次。”大型项目的巨大挑战之一是:牢记一项决策或一个事情的所有附加的结果。有时,这些可能的结果很容易预见,而有时却无法提前知道。但是无论哪种方式,我们可以选择在编写代码时,仔细认真的思考。
我个人喜好做的一件事是让重要的待改清单搁置一天左右,然后再带着崭新的想法来重新读取代码。我会试图怀着从未见过这些代码的心情来重新处理它,并进行代码评论。有两个需要考虑的方向:细节和宏观全局影响。
一针见血地看破设计想法中所有后果是需要多年的经验和实践。这项技能有两个方向需要注意。首先,当你做出一个具有重大影响意义的决定时,并不意味着结果立即显而易见。其次,需要努力并有意识地让自己认识这种情况。最好的建议则是经常停下来进行尝试以及展望未来,这也是我接下来需要处理的问题。
善待未来的你
我也会说:“善待那些看你写的代码的人们。”但是我更想强调,善待未来的你。通常情况,代码一旦被编辑,就会存在相当长一段时间。同样有两个方向我们需要考虑:细节和大规模影响。然而细节很容易在一开始被察觉,而附加影响和结果却总是难以预计。
一些具体的例子可能更容易说明问题。对于细节而言,屡试不爽的方式则是简单格式。抱怨空格和括号的位置似乎显得过于偏执,但是这的确会产生影响。在读了20年的代码后,你能够轻而易举的识别常见的代码模式。特别是在一贯遵守严格格式标准的ArenaNet这里,做这项工作是非常省时的。想象一下,如果每个人都编写相似的代码,那么问题就会显而易见。如果当我在读一串格式化代码,被周围的事物影响的情况下,很难专注于代码本身的含义和意图。
在一些大规模的代码中,总会伴随着源代码注释。源代码注释的方式在全世界一直都是一场没有硝烟的战争。即使是游戏开发公司ArenaNet内部对于源代码注释也存在风格多样化的观点。然而对于源代码注释,我们有一些非常有用的一致性观点。
有时注释需要淡化处理,而有时却需要添加补充。注释只要具备以下三种情况中的任一一种情况则需要淡化处理。
*重复代码已有信息
*过时或者即将过时
*彻头彻尾的错误(由于复制/粘贴导致的问题)
给事物最恰当的名称
这是更加细节的问题。任何团队通有的惯例对于代码的可读性和意图都有着举足轻重的作用。
ArenaNet的代码标准文档中有许多具体的例子,但也有其他的惯例更常见,几乎可能适用于任何环境。例如,多元化是非常重要的。迭代变量应该是单数( item/currency/character) ) 。容器(Containers)应该是复数(items/currencies/characters) 这同样适用于函数名,如果一个函数指代一件事情,将其命名为奇。如果指代多样,复数则更适当。
通用名称是很难挑选,并需要花费大量心思来选择。如果函数的目的变化,那么请同时更改函数名称。请务必确保名称对应的意图(不要画蛇添足)。
浪费终将让你付出代价
函数外不使用的参数,应该被删除。 (应该有专门的编译器警告, 你应该搭建你可以管理的错误最高警告级别)。同样,确保实际使用的所有变量,有各自的意义。确保函数调用有价值。例如,初始化一个变量,然后立即改变其值只会让读者感到迷惑。传递只不过一个字符串常量sprintf ( ) ,然后printf()结果除了混乱不堪,还很浪费。 (责任编辑:cy)