毕业超过十年了,感慨岁月无情。做了若干年后台开发(之前做电信领域),大致说一下常见的开发心得和调试手段。使用互联网这么多年,收获的很多,总结的很少。本着互联网的精神,希望可以帮到互联网另一端的你。由于本人是做 C 语言的开发,陈述的经验也是 C 常用的调试手段。
调试这个蛋疼的事情,困扰着无数程序猿。很难有人保证自己写的代码一行错误都没有,有问题你就要查。怎么查?高手者,反汇编,看二进制;low 一点的就 gdb、看统计;再low就加打印。还可以再low 吗?可以,自己写bug,别人查。方法林林总总,长期掌握总可以找到适合自己的。
而调试的目的是什么?找到 BUG。想当年一个高手比喻的好:你找 BUG 其实你就是福尔摩斯,那为啥是福尔莫斯呢?想想你看到 BUG 案发现场,合格的程序都有日志、dump 内存、计数等基本案发现场吧。嗯,什么都没有,找写代码的人自己查。找问题就是在众多信息中,抽丝剥茧,找到疑点、反复推演程序运行的代码,最终找到作案的那一行或者几行代码。
这个过程是折磨人的地方,没有任何眉目时,令人茶不思饭不想。找到问题问题后,如打鸡血般兴奋,自己也会陶醉般飘飘然。真正受过折磨的人,才能体会到修改问题的滋味。
开发的程序大致要经过两个阶段,最终才可以上线发布。
功能开发阶段
本阶段的主要目标是根据业务要求,开发程序。仅仅是 coder,仅仅是写 if else 吗?写程序真的是这样吗?如果是这样,那么 coder 会更加工厂化、枯燥化。
做事情要未雨绸缪,做程序更应该这样。大学 C 语言经典教材中定义程序为:程序 = 数据结构 + 算法。而实际生产的过程中,将商业程序做如下的补充定义,我觉得更合适:程序 = 数据结构 + 算法 + 业务逻辑(计算逻辑)+ 框架;
先说说为什么补充业务逻辑,有意义的程序本身就是某种业务逻辑(计算逻辑)的抽象。完成这个业务逻辑才是最终的目的,请不要拿一些算法研究的 code 和我抬杠。
其实作为开发人员,测试驱动开发(TDD)很好思考问题的思路。也许有人听过,也许有同学用过,如果感觉使用不好的兄弟,我可以告诉大家:应该是测试场景 + 场景驱动开发。对,仅仅是里面融入“场景”这个宾语,大家在做开发的时候,就有目的性和针对性。
任何一个业务逻辑,都可以拆分为多个业务场景。场景逐一解决,场景逐一测试,我们开发其实很简单。说的很简单,但是整个过程,需要 50%的时间思考解决问题场景, 20%的编码,30%的测试。其实思考问题的 50%的时间,可以放在任何时间去做(休息时,地铁上,班车上...),只要让自己足够的静,你就会将整个业务逻辑思考的很清楚,分解为多少个业务场景也很明确。对于复杂的业务场景,建议适当的做笔记,多从全局的业务逻辑考虑:自己细化的得到结论是否符合所有的业务场景。反复地修正,直到正确。 |