文档章节

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

rise-worlds
 rise-worlds
发布于 2016/06/20 13:35
字数 1342
阅读 1
收藏 0

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

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

本文转载自:http://www.cnblogs.com/flying_bat/archive/2009/08/08/1541776.html

共有 人打赏支持
rise-worlds

rise-worlds

粉丝 2
博文 1755
码字总数 0
作品 0
深圳
程序员
私信 提问
C#转C++的一点分享

从C#转C++有段时间了,一直想分享点什么,但又不太好意思分享,毕竟自己做C++的时间不太长,最近感觉自己已能胜任现有工作,想分享的想法又强了点,前几天看到这样一篇博客《那些年·我们读过的专业...

爱情经纬线
2014/01/17
3.7K
10
C语言/C++程序员编程学习自信心曲线图

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/05/10
0
0
提升 C++ 技能的 7 种方法

本文由伯乐在线 -精算狗 翻译,艾凌风 校稿。未经许可,禁止转载! 英文出处: Jonathan Boccara。欢迎加入 翻译组。 夏天时常会谈到大海、太阳、沙滩、大山或者你的家庭住宅。更充裕的时间也...

伯乐在线
2017/08/24
0
0
C语言/C++编程学习未来之路

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/30
0
0
C语言/C++编程学习:环境设置

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
37分钟前
0
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部