第9篇:用脑袋执行程序,清楚数据走向

每天写完代码后,要花很长时间调试。一个功能还好说,等到后期代码功能越来越多,bug也越来越多, 慢慢程序就会失控。

很多人问我,如何写出稳定的代码,如何让后期的代码稳定,平稳的把项目做上线? 我的答案是: "用脑袋执行程序,掌握每行代码后数据的走向"。越早明白这个道理,越早写出稳定的程序。

 

开始写程序时,学会抛开调试器。

很多同学写代码时过度依赖调试器,离开了调试器就无法写出正确的程序。

调试器在开始调试程序的时候确实是个好东西,但是调试器调试的时候,一个一个变量看数据会耗费很多大量的时间。

计算机不会像人一样,是非常准确的,基本计算是不会错的。一般错都是我们的逻辑错误,或数据错误。只要数据对,逻辑正确,都能得到正确的结果。

所以真正写程序的时候,没有必要一个一个变量数据的核对,这样会浪费时间,同时很多开发环境无法下断点,比如服务器程序,比如android 真机环境,要下个断点,非常的麻烦。

我鼓励抛开调试器,用自己的脑袋来分析与运行程序的结果,核对代码流程,核对数据。

我们刚开始写程序的时候,要练习用自己的脑袋看代码,然后问自己这行代码执行完后得到什么样的结果。配合调试器的时候,加强这种脑袋执行程序数据的能力。

练习一段时间以后,你就会清楚地知道自己每写一行代码都会得到什么样的结果,这样你写代码会变得更稳定,同时每行代码如何跑,在你的脑子里面非常的清晰。

 

了解编程语言核心机制,了解计算机运行程序机制

要能用脑袋清楚地跑出代码的结果,就需要你了解编程语言的核心机制,需要了解清楚计算机运行程序的原理。

脑袋运行代码,就是要搞清楚每行代码的意思和数据有哪些,存放在哪些地方,什么时候分配,如何释放这些?

你必须要了解计算机运行程序的原理。内存开在哪里,什么时候回收,为什么能够使用?

比如程序的内存分为4个段:代码段数据端

代码段用来存放代码指令,所有的代码都会加载到代码段;

数据端存放全局变量,内存长期存在;

用来存放动态分配的对象,释放后对象的内存回收;

是局部变量,函数参数,函数返回机制实现的地方,局部变量的数据内存。

函数返回后就被回收了,如何回收的,为什么函数的return语句,能回到调用地方的下一条指令,如何做到的?这些在脑袋里面必须要有深刻的认识和理解,这样,每行代码下来,数据分配在哪里,数据存储在哪里,如何回收你都清清楚楚。

把这些东西都搞懂了,那么每行代码执行的时候,产生哪些数据,导致哪些结果在脑袋里面就清清楚楚,这样你就思考了你写的代码。经过了这样的思考,自然写出来后代码是正确的,这样你就可以抛开调试器。

大部分的代码写完以后就能得到一个正确的结果, 自然你写代码就会越来越高效,bug自然也就越来越少。同时每行代码你都用脑袋思考跑程序,反过来也会让你的代码写的越来越好。

很多同学问我说,在上项目课的时候,那么多代码,感觉你都能一遍写出来为什么?

我告诉大家,秘密就在这里:我写程序的时候,一边写,一遍用脑子执行代码。写完后,自己的想法也就基本实现了,很少需要反复用调试器来调试数据的。同时写代码也会越来越自信,问题都会绕着你走。

 

每段逻辑尽量分开,分成段落或函数

编写代码时,由于要用人脑来执行维护,方便人阅读,所以尽量要将每段逻辑板书的比较清楚。

我一般是:每个逻辑几行代码为一个段,段与段之前空一行,同时尽量每个函数不超过100行,尽量值完成特定的功能。

功能函数逻辑清晰,流程函数流程清晰,绝对不把功能和流程混合在一起。

如图,功能代码分段编写。

 流程代码,注重流程,每个流程尽量用功能函数封装,如图:

帧同步的流程,如上图,第一段保存这帧的操作,第二段遍历所有玩家给每个玩家发送没有同步的帧,第三段进入下一帧。这样流程就比较清晰。执行起来就比较方便。

久而久之,你的代码越写越工整,越写越稳定。

同时一边写代码,一边用脑袋执行,也不容易出语法错误,我现在写代码已经很少有语法错误了。

 

  1. CTO 每天review团队代码,用脑袋执行程序,关键时刻能力挽狂澜。

曾经有一个网络游戏项目遇到一个bug:运行10多天以后,偶尔会出现有些机器画面错乱、卡主。

这个bug就比较难追,你无法下断点,因为服务器多线程,高并发,根本就无法用断点来调试。

这个bug怎么找呢?团队客户端和服务端程序头痛不已,都感觉自己没有问题,不知道如何追。自然问题就到我这里来了。 我怎么查呢?

坦白讲也很为难,代码那么多,而且不容易重现。也不知道如何入手。项目压力也很大,每天都来催,怎么办呢?也没有头绪。

首先我命人做了一个录像系统,来采集数据,让测试重现,希望能采集到重现错误的录像数据。

测试了2天以后,没有重现。因为服务器本身环境比较复杂,只能根据测试的描述来把当时出问题的操作情况了解清楚,让测试尽量回忆,问一些关键的数据结果,怎么样就出现了画面错乱。

带着这些问题,就是通过review代码,用大脑看数据可能的点,看出来了代码出错的地方,一个不容易发现的点,函数的局部数组内存越界。不是所有的代码调试都适合用调试器。

CTO薪资高,高就高在他要确保项目稳定上线。

以前我写代码也和大家一样,也用调试器一个一个调试。刚学的时候很感兴趣,所以写代码比较多,时间比较长。一开始也是用调试器,后来慢慢发现其实程序每行代码指令写下去,你自己都知道为什么要这么写,知道这么写下去是一个什么样的结果。我开始对自己的代码有了掌控力,不容易写出自己失控的代码,后来每个项目都稳定的上线,机会很少有研发失败的。

以上就是我今天要分享给大家的技术心得,希望这个经验能帮助大家。

如果认为文章还不错,请分享给更多的朋友。

评论

 

关注公众号

可用手机学习

获取最新课程