《C++项目开发实战入门》攻坚战
2019.3.24:
过程
- 辞职专心学习编程已经1月足,由几十行代码转向几千行的路很长。刚开始最好的方法是模仿,其实原来我是不信邪的,因为浮躁。
- 但是信了这个邪,不一定不撞邪。直到看到知乎的回答(什么样的人学习很难学好?),惊觉自己虽然很较真的在看,但是缺乏系统性的、框架式思考,只是跟着代码走,对于刚起步的菜鸟来说很幸运。紧接着就是一个bug,解决了当然觉得搞笑,却切切实实地卡了4天多。
- 症状:坦克小游戏,子弹碰撞总是向上跑。
- 原因1:对源码里面的坐标系转换产生幻想,想当然的认为是由设备坐标系转换为笛卡尔坐标系。当初还拉着学数学专业的老铁研究了半天,尴尬。调了2天之后才发现,0角度怎么朝上?卧槽,原来源码里面的逻辑坐标就是x轴朝上的。恨当初先去瞎猜测了,调bug和写不一样,它不是架构过程,应该先跟着调试步骤收集信息,理解代码。
- 原因2:对程序运行流程完全懵,无法进行数据的追踪。理解了角度的问题之后,依然反复查看碰撞检测函数,无果。终于,不知道何处放断点的情况下,翻开了《深入浅出MFC》,才算开始窥探MFC的调用流程。终于在前一天晚上追踪到了数据流转的方法。今日一早,继续追踪数据,发现原来是源码中的验证条件,把指向角度的指针是否为空,误加了*号,变成用角度本身来判定,而角度初始化为0,所以始终没有对角度赋值过,因而传回前进函数的时候,总是初始值0。很可爱的bug。
总结
- 1.像写代码一样看代码,自上而下地理解、猜测、判断它的作用。
- 2.多调试代码,验证自己对代码的理解,最好是追踪数据,还能辅助自己理解调用过程。
- 3.遇到完全陌生的领域,翻翻书很有用,还顺带把书看了。
题外话
- 最近在反思自己是不是真的对编程感兴趣,说没兴趣吧,坚持自学6年没有抛弃。说有兴趣吧,可我又很少体会到编程对我的吸引,是不是当时夸下的海口,加上内在的好胜心走到了今天。不管什么答案,就像谈对象一样,发现对方的优美之处,让大家都活的舒心,至少大家都努力了。
- 这段时间,爱玩的LOL,被编程取代了。