发布者:上海IT外包来源:http://www.lanmon.net点击数:1182
蓝盟IT小贴士,来喽!
为了保障安全,我们引入规范和流程,仔细设计代码,例如踩着薄冰测试发表,软件的结构和实现有着非常大的比重为稳定性服务,但我们无论做什么,都要尽量减少故障
企业为了保障交货和运营的质量,常常设定安全标准,制定事故处罚规则,加剧交货效率和系统安全的冲突。 软件工程师成为了外科医生一样的高危行业从业者,我们被灌输了很多安全生产相关的知识,我们的认知被教育成了某种形式,我们对在线障碍的观念很深,我相信。
笔者在网游和网络大厂工作过。 他们对线上故障持有完全不同的态度。 这些差异给了我很大的冲击。 可以说我刚被教育成一种形式,换了工作,被教育成另一种形式。 所以,我的认知在不断变化。 这些经历和变化会带来比我更多的思考和认识。
说到这个话题,我和刚参加工作的时候有什么不同,就是我意识到事情不是绝对的,我的认知不一定是正确的,也许这就是正确的道路。
所以,我努力记录所见所闻,客观如实地表达,而不是主张什么,也不是批评什么。 因为,事实比观点更重要,我想倾听大家的观点。
网络游戏
我学习的时候,在一只狐狸那里实习。 当时,一只狐狸在大厂,后来火狐工作室独立上市。 是的。 是在纳市发售的CY。
我在《TLBB》玩了一年半的游戏开发。 这个游戏当时很成功,PCU超过了80万,为公司贡献了90%以上的收入。
TLBB在过程管理软件中管理着需求和缺陷。 这在当时是非常先进的。
出需求写文档,开发程序开发功能,测试,将过程付诸测试。
的评估是针对每个bug进行的,测量后的bug数量也会影响进程的性能。 这样的制度设计可以充分进行程序的预测试,减少缺陷数量。 程序是功能的开发者,白盒测试的最佳实施者,他预感到那里可能会发生问题,并且为了方便自检,开发一些辅助测试功能,提高测试效率。
测试为了性能,我们会尽最大努力找出缺陷。 但是,该制度的副作用之一是程序和测试关系总是很紧张,程序感觉地位不高,经常被测试。
CTO为TLBB服务器制定了一些制度。
1 .简单至上,设计上直接进行,不过度设计。 不使用模板进行编码,不使用STL,不使用c的高级特性(异常、放置新等)。2 .注重防御,安全优先于效率,任何函数都嵌入ENTER_FUNCTION和LEAVE_FUNCTION宏,尽量不崩溃地判断多项检查。
这个设计取得的一个显着优点就是项目代码简单,门槛不高,毕业两周就可以愉快地拿到。 糟糕的是,程序性能不高,开发者每天都要和排列和指针打交道,技术不高,工作一年多后读不了开源项目,觉得自己是智障。
由于游戏要求快速迭代,每周都会发行版本,因此从特征分支开始,主干merge代码有时间窗口,在窗口关闭期间只能进行传真bug。 新人上半场提交代码,有人做review。 相当于给孩子的自行车后轮装上两个支承圈。 之后,可以主动提出。 没有听说过静态扫描、代码、门禁。 得益于良好的制度设计和测试环节,TLBB服务器整体平稳,小问题偶发。
虽然公司对线上故障有一定的水平,但是公司不怎么说,所以大家感觉不太强。 如果某个过程不开眼就捅了笼子,考核会受到一些影响,次数多了就会被贴上不靠谱的标签,只能专业打杂。
后面去了WMSJ。 这家公司是清华的几个学生做的。
07年,《WMSJ》因在3D上的出色表现而惊讶。 之后连续发售了几款好游戏,成立三年后在纳市上市。
那时,CHI老板意气风发,千金买马骨,给应届毕业生发1万5-1万8的工资,哪一年在学校招我撞见,但他们要求很高,我一方面战死,我的另一个研究生同学走向霸面。
这家公司的第一代程序员水平很高,至今我仍然接触到我工作中最才华横溢的程序员,从客户端引擎到UI到数据库,游戏前后的整个引擎,我想都是自己学习的。 因为我在制作服务器,所以不能评价引擎、客户机技术。
关于服务器,那些技术水平很高,但我在CY的时候,大家在y、WM的大世界(无缝地图)到底是怎么回事? TLBB是瓷砖地图,看到WMSJ服务器的代码时,我感到震惊。 那是一个非常精密的设计,之后热卖的BigWorld引擎在服务器设计上与WM通用。
与TLBB相比,WMSJ完全不规则,没有明确规定什么都禁止。 我该怎么办? 编译成功,运行无误,我们会做到的。 编码规格? 十字review? 不,代码门? 封版? 不存在,在线残疾处罚? 不。
但是进公司一个半月后,我除了看代码以外,什么工作都不做,我一度怀疑领导对我有意见,借妻子生孩子的机会请了一个月的假表示不满,领导问我为什么请了这么长的假冷静点,组织马上给我安排了任务。通过这个项目,我学习了epoll模型,学习了多线程,学习了通过消息机制求解耦合,学习了COW,学习了lazy evaluation,学习了真正的OOP和GP (抽象、泛化、扩展性,
其中最大的思维冲突来自容错,以前的TLBB编码有大量的容错处理。 例如,简单的get函数也有enter_function/leave_function宏,清空指针,检查参数的合理性,检查返回值,log error等大量的错误
但是,WMSJ的做法完全相反,是广泛使用的断言,函数集中在功能逻辑上,期待调用方。 不满足要求的话,就不会烦躁。 直接崩溃,风格生硬,代码紧凑。
我工作以来接受的教育不是这样,我很困惑。 找到了GameServer的主要开发者c总(技术VP,清华毕业的,他一个人写了60%以上的代码)。 公认的WMSJ最强建筑师(不是我的封)。
“TL服务器的风格是面向失败的编程,不崩溃不崩溃,可以使程序具有充分的韧性。 WM服务器错了吧! ”
c总回答:“不是那样的。 容错率越多的检查越多,日志就越好。 检查只能在边界进行。 函数的实现者和调用者遵循某个合同。 许多防御没有体现出面向失败的编程思想,也不利于构建稳健的程序。 崩溃会尽早暴露问题。 只要不崩溃,只需要深刻填补错误,就很难定位缺陷,最终的过程会变成掩盖污渍的混乱场,变得更脆弱。 ”。
文/上海蓝盟 IT外包专家
“依赖假设,代码修改后,容易出现问题,应该尽量避免在线故障。”我当时的认知不能接受他的解释,试图说服他。
c总是说:“资产在编译调试版本时起作用,但在发布时会编译发布版本。 实际上,这在开发阶段很快就会暴露问题,一旦上线就更稳定了。 此外,如果您按照这些规则编写程序,您还会看到一些更清晰、更强健、开源的项目。 ”。
分享到: