[转载]关于C++,我觉得好的设计法则

以前是一个人闷头写代码。工作久了,发现同行们的代码基本都不能看,当然不少还来自大公司。因此大公司的代码也基本不能看。在学校里就听说过许多同学的憧憬,要进什么大公司学技术,现在看来真是好笑,能学到才怪呢。
游戏行业我还蛮清楚,暴雪不知道,反正一直很崇拜,代码应该牛逼,看招聘就能看出来,不懂游戏的别来这里玩。牛逼。
其他公司,包括所有的日本公司+中国公司代码都不堪入目。

1.首先我觉得写代码之前要了解自己,所为有所为,有所不为,并不是所有优雅的东西都是每个人都能写出来的。如果人人都能写出美的东西,那也不能称之为美了,大便之所以不香是因为你随便就能得到。因此有时候一味去追求好的设计,无异于搬起石头砸自己脚。游戏行业更是这样,面对纷繁复杂的需求,需要对自己有清醒的认识。

2.技术上,一定要了解计算机,二进制编码系统。居然很多计算机系出身的人不懂汇编与现代计算机体系结构,这基本上跟文盲没什么太大区别了。(这里插一句,C++的内存模型大多数也不知道。迭代器的++iter;iter++ 90%程序不知道区别。如果你看了也不知道,你每天要多花3-5个小时补课了。)

3.C++语言各个特性对设计的影响。我见过很多C过来的牛逼程序员,当然更多的是垃圾程序员,懂了继承以后就到处继承,懂了多态不得了了,全是多态,懂了模板,程序基本就不能看了。当然C++也有很多我不满意的设计,比如很多语法正确语义不当的东西,一定程度上也造成程序的可读性不高。

4.数据结构,算法。再快的计算机也禁不起杀手们的调教,我见过内存杀手,显卡杀手,CPU杀手,你不是卡马克,你的杀戮行动不会推动计算机进步,只能使你的程序慢的象蜗牛。数据结构和算法懂太多也不为过,别以为有了stl,有了boost就万事大吉了,记住:没有银弹。

以下说一些设计上的东西。大部分人不用看了,因为看了你们也不懂。
1.项目相关人员应该在项目初期共同制定好口头词汇,项目概念,指定规范的行业概念,特别是游戏行业,我觉得规范特别缺乏,因为大家觉得反正迟早要改,所以不如无规范。这个观念是十分错误的。我认为无论项目有多紧张,规范都是首位的,没有的后果就是项目一直紧张,最后Cancel。(插一句:我认为中国游戏策划是最傻逼的职业之一,如果你不是为了混口饭吃,而是理想要做一名策划的话,我劝你赶紧回头是岸。)

2.模块的划分很重要,便于你考虑每个模块的参与人数和数量分配。并不是一切都要模块化,刚才说了,不要懂了个模块就开始天天模块了。这点我非常同意云风的话,设计所谓框架是最最最不靠谱的事情,当然一开始就设计模块也是很呆的,除非你是本杰恩,否则不推荐,为了抽象的抽象只是让你离真实更远,记住“kiss”法则。好的程序不应该比我们说话还拗口。

3.最重要的!良好的接口所有的特征审核表,把他贴在你计算机任何一个醒目的地方吧
a.功能的正交分解
b.最小化的接口
c.最明确的函数调用语义(注意是语义,不是语法,所以收回你那些狗屁不通的接口吧)
d.最适合出错检查机制(象c++爸爸说的,我写第一句代码时就想到该如何调试了)

4.不要过分痴迷于接口,多写点用户代码,多体验一下用户。别写“公务员”式的接口,很多脑残设计用都没法用。

5.不要吝惜笔墨来描写代码描述及文档,微软为什么牛逼,看看多少人在写msdn文档就知道了。

6.尽量引诱那些愿意使代码高质量的程序员参与进来。很幸运的是我手下有一个。

7.精益求精,如果你把写不仅仅把写代码当作谋生工具的话,我觉得你应该付出多一点。就算他只是你吃饭的本钱,我也觉得你应该有点职业精神。程序员这个行业很特殊,代码臭并不一定很显然,不象外科医生开的刀痕,机械工人做的零件。所以很多东西要靠自己审视。

原文地址:https://www.cnblogs.com/flying_bat/p/1541776.html