为了树莓派上的加密,折腾了差不多两个月—从清明节到端午节,终于到了快解决的时候了
错误
记录自己走过的弯路
其实前面也有几次似乎看到了解决的曝光,比如可能是动态库引起,动态库的循环调用引起,烧无驱模式有问题,80文件有问题,LDK版本太低…,但却以失败告终,现在才发现,这些都只是可能,以为之类的猜想,包括由此而进行的漫无目的的测试,那时走过的弯路有哪些呢?
- 在工控机上可以,树莓派上不行—就坚持认为加密狗有问题,最适合解决这问题的就是他们
- 加密狗厂商的各种不配合,也为自己找到了理由,而没做到:好的提问能解决问题的一半;
- 自己程序有点规模了,茫茫代码中自认为没时间,没把握找到问题所有,却不知道从最小化测试环境开始;
- 当采用最小化测试环境时,也只是在原有代码中通过注释部分代码查找,每次得出的结论都没法定位问题,甚至与上一次的自相矛盾;
- 整个测试流程没有自动化,很烦琐且费时间。
简单的说就种解决问题的方法就是碰运气
摸索
记录自己做的好的地方
为什么这次有真解决问题的感觉呢,那是因为建立在方法论的基础上:
- 从最小验证开始:在树莓派上写一个hello, world;
- 再写一个ROS的listener,再在此基础上迭代;
- 测试流程自动化:如果这个测试过程会超过2次,就应该自动化(重构),它大大加快了我的测试进度
- 在等待自动化测试的时候,让我有时间思考下一步应该做什么;
改进
自己应该改进的地方
- 一定要腾出时间来思考:代码面前了无秘密,代码中都是细节,细节是魔鬼
- 没有主动去找原因:不为失败找理由,要为成功找方法
- 自己思考不能乱,不能停
- 思考为什么工控机上行,而树莓派上不行就可以大致排除
- 动态库引起
- 动态库的循环调用引起
- 不要想着一步就所有问题都解决,先啃最难的:核心代码能加密就可以了,其它不能解决就算了—缩小目标;
- 不要过度设计:自动化脚本能用就行,有过度设计的部分先记下来,完成手头工作后再总结;
- 缩小范围验证有两种,但目标都是逼近对方以解决问题:有条件的话可以双向进行,看哪种方法可以更快逼近
- 现有代码部分注释做减法
- 从hello world开始做加法
正解
目前有效的方法,应该是最小规模上的小步迭代
- 验证树莓派上hello world加密
- 验证静态库、动态库和循环调用
- 验证树莓派上ROS版的hello world加密
- 验证ROS的订阅模式
- ……
可能现在说来这些步骤有点“事后诸葛亮”,但如果每次迭代都建立在好的提问上呢—我这一步能验证什么?我下一步要怎么做?
看来方法论有多重要啊
以后还真要多反思,有没有更好的方法,能不能做的更好