代码整洁之道高清电子书 程序员修炼手册pdf
- 数据库
- 2023-08-29
- 90
很多朋友对于代码整洁之道高清电子书和程序员修炼手册pdf不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!代码写的美是怎样一种体验工作第二年时候的...
很多朋友对于代码整洁之道高清电子书和程序员修炼手册pdf不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
代码写的美是怎样一种体验
工作第二年时候的一个经验,第一次实实在在感觉到简洁代码的威力,整洁代码实乃保命保平安神器。
当时开发的是这个游戏:
实际游戏画面:
这个巅峰时期团队过百,一共前后做了4,5年,代码量那是大大的,我这里参与的是ps3版,使用的是unreal3引擎。
xbox360/ps3这一代,unreal在微软平台上做的很是不错,在ps3上面各种原因吧,做的很不到位,对应出的unrealtournament3在ps3上面各种缩水。
一定程度上也和ps3的机能不足以及奇怪的架构有关。
ps3的在cpu端基本架构是这样:
其中可以重点关注大家不太常见的叫做SPE的这个东西,这个可以说是ps3的一大特色,就是一个很强的协处理器,非常善于做vector类的“傻算”,单个能力超过现在的普通I7的单核cpu的计算能力,而且这样的东东有8个。。。
甚至sony开始希望这个spe搞定一切,连GPU都省了,但是后来发现不行,急急忙忙上的nvidia的缩水GTX7800级别的GPU。
但是SPE毕竟设计时候牛逼,后面大家拿这个东西来做计算蛋白质序列啊,在ps3的中后期,大家开始研究怎么用SPU做一些渲染的工作,一度能承担40%的GPU的工作,其战斗力可见一斑。
当时sony底层系统方面的能力比微软差不少,所以底层一大特色就是“裸”,你有两个选择,一个是opengl的api,这样使用默认的驱动,但是效率就是一个普通效率。
还有一个版本的就是叫gcm的一个api,就比较的底层,你自己来管理一切,从显存的管理到commandbuffer的flush都是自己来做。
近乎等于开发者自己来实现一个类似driver的东西了,为了效率这个是大家普遍的选择。
然后sony文档上有介绍说,SPE可以支持去执行这些gcm的命令的构建,也就是说可以把整个驱动实现出来,然后放到SPE上去跑,这样就进一步解放核心CPU的工作,达到更好的性能。
当时花了一些时间把ps3版的底层写好了,driver也都跑顺了,然后就开始做把driver往SPE上移植的工作。
这个过程就是一个把unreal底层进行拆解分离,把driver部分独立出来,然后实现到SPE上面,由SPE把命令构建好,送往GPU;为了进一步优化性能,自己实现的这个部分还可以提供更高层的一些api,把一些游戏常用的api直接打包成一个包,定制出一个比opengl更简单样子,但是效率非常的高。
刚刚写了第一版,直接就一团乱,跟了代码一瞅。。。代码段被冲了,这个之前都没见到过,正常系统上对代码段会有保护,冲过去会有warning什么的,SPE上面就是完全裸的,没有任何保护。
然后说回SPE,上面一个很小的localstorage,需要把命令送过去,然后管理本地的内存,进而执行代码等等,然后代码的执行是通过gpu来看的,所以如果出错了,你只能知道错了,不知道哪里错了。
而且ps3的早期,各种debug工具也不完整,debug能力就各种抓瞎。
当时工作也不久,经验也不足,就这样,扛着一个这种大游戏的底层,没日没夜的在SPE里面一直泡着,一个坑出来再进到另外一个坑。
中间一个问题憋了一个多星期,没有一点进展,甚至开始怀疑是不是这个SPE做driver是不可能的,毕竟只是文档上提一嘴。
在sony论坛上求教,还真有一个哥们,欧洲一个公司的,做网球游戏的,给我发来邮件说他也这么干的,能行;这真给我相当大的希望,继续又怼了1个星期,代码都快全背下来了,终于能够继续前进,刚刚长舒一口气
leader把我叫到办公室里问我还有多长时间能弄完,有点担心这个能不能行,在考虑要不要把任务cancel。。。当时的表情是这样的:
和leader晓之以理动之以情,软磨硬泡,最后leader再给2星期时间,必须能够跑得比较稳定,否则还是要卡擦掉。
然后继续猛怼,后面进展还算可以,但是由于项目已经比较靠后了,比较担心上了之后会出各种难查的问题(这个的情况比多线程要更棘手了)。
中间开发的过程已经明显感觉到,对于这种难以debug的情况,把设计做清晰,把代码写整洁有多么重要。
所以到最后就是不停的去重构代码,一直到代码已经整洁到自己想吐了,就是那种中考前复习的实在烦了,去tmd的考就考吧的感觉。
开始合入了主干,提测QA,然后买好红牛,等着bug彻夜奋战。
然后过了一天。。。没事,QA只是反映,帧数是更好了一些。
2天。。。没事
最后一周下来,就是零星2个小问题。
这对于这种规模应该说是比较少见了,最后实际profile下来,能节省6-8ms(面向30帧的游戏,一共33ms,所以对于性能来说是非常关键的一波)。
这波下来,有这样的感觉
整洁代码绝非装逼用的,简直就是保命保平安神器变得特别喜欢欣赏整洁代码的美妙之处,后来看insomniac的spu实现的计算水的fft(刚刚查了下已经没有了),真是如同欣赏水墨风景的怡然的感觉总的说来,谈不上美哭了,但是也有美的一面,整个过程连滚再爬也快哭了。。。
程序员是怎么保持代码框架清晰整洁的
作为接触程序5年的程序员来分享一下个人的经验
多读写代码就像学说话一样,需要多看别人是怎么写的,比如github上面很多开源的优秀代码,有意识地学习代码风格、代码结构和注释,会让你逐渐潜移默化的提高自己的代码能力。
多想很多情况下,初学者容易犯一个错误——着急写代码却没有把代码思路想好。最好的方法是建议在写代码之前把框架、步骤和逻辑想清楚,可以把它写成注释放在文件的开头,这样时刻提醒自己的思路清晰,而且不会因为中间隔一段时间没写就忘记之前的思路。
多练多看多想之后就是多练,很多习惯比如代码注释、代码风格都需要在不断地练习和实践当中得到锻炼和进步,所以多写代码,也可以让大家一起来进行codereview,讨论过程中也是对自己各方面能力的提升!
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
本文链接:http://www.xinin56.com/su/12092.html