审查我的代码,通篇如下:
printf(“##############-------sss---:%s %d”, something_a, something_b);
其恶心程度,真的令人作呕。我面临了N多次的批评,然而仍然不知悔改,真是屡教不改,僵化透顶。然而我这么做有自己的理由,最终我的做法是,提交到svn的代码里面保证没有上述的打印,在我自己的实验代码里面,我仍然保留了这个style。
第一,调试的时候,我的打印可以通过一堆#号和系统的输出区别开来,这样我就可以一眼看出哪里是我自己的输出了,即使再乱,毕竟只是我自己的调试,我看懂即可;
第二,正式提交时,我可以在源码目录下执行:
grep –r –n “####” |grep printf
然后简单删除这些很乱的语句。
第三,在调试的时候用标准的日志输出我觉得很浪费时间,还要迎合日志接口的api规范,另外我相信打日志是造成段错误的元凶之一,因此我不喜欢使用标准的日志方式来调试,事实上,我根本就不喜欢日志,特别是没完没了的日志。
然而,我不止一次的将这些#号带进了正式的代码,这是很不应该的。其实这个习惯由来已久,由于不是科班出身,系统学习编程已经是毕业后的事情了,那时作为交换,我每天教一个同时毕业的计科系的同事一点网络知识以及配置,他教我一些编程,他也就是一般人,并不是教科书,也没有把老谭的书介绍给我,倒是把打#的习惯给我了,那时除了知道数组,基本类型之外就知道打#号了,打#号伴随了我5年,期间想改掉,但是没有用,随手就打出来了,后来想想,干嘛非要改呢,为我所用岂不更妙,因此我敢保证,我打#号已经出神入化了~~。
不知道那家伙,那教我打#号的家伙现在可好,已经几乎没有联系了。那个时候,我教给他很多的网络知识,比如OSPF协议,好像连做双绞线的方法都教会他了,为了这还花钱买了一把钳子,好几十大洋…据说那家伙后来还真的到了一家做路由的网路公司,老子功不可没,而他呢,也教会了老子一个妙招,那就是打#号,我可为此挨了不少批评,这个交换太不公平了啊!为了公平,老子也不能找他理论去,最好的办法就是把#号打的出神入化,此招可以流传千古而不坏。
我那时只会一点java,因此之后的日子里,活学活用的我同样写出了:
System.out.println(“################”+str);
这样的句子,要知道遇到他之前,我的打印不要太标准啊。时隔五年了,第一家公司的同事都没什么联系了,很想他们,特别是那教会我打#号的家伙,想让他请我喝酒…顺便算一下旧账…仔细点点,后来到过几家公司,影响我编程风格的人还真的不少,而且全是坏习惯,比如为了快而简单的命名变量,比如习惯用栈分配内存,比如不喜欢使用库等等,第二家公司写了一年寄存器,因此就习惯了硬编码,顶多用一个宏…
悲惨啊,今天生病请假,在家想了一天,为什么我的一个简单的VPN管理接口竟然返工那么多次,都是多年积累的坏习惯的恶果啊,一个简单的东西竟然屡次不合格,并不是做不好,也不是不上心,而是习惯的力量屡次让自己潜意识的写出令人作呕的代码,作呕之处在于以下几点:
1.打#号,正式代码没有移除;
2.逻辑不严谨,正常流能跑,异常流不可控,崩溃不可查;
3.函数,变量命名令人费解,拼写错误;
4.硬编码,魔术字到处都是,没有注释,不易维护;
5.缺少错误判断,编码风格不统一。
正是这些导致了我的屡次返工。而这些是大问题吗?理论上都是一些小问题,逻辑不严谨这个多增加些异常流处理即可,变量命令认真些即可,魔术字用宏定义或者动态计算或者给出注释即可,(打#号我认为还比较好,只是正式代码一定要移除)然而这些小问题的背后却是习惯的强大力量。
我自己是总结了,在此给出一些忠告给初学编程的人:
1.在你形成好习惯之前,千万别去触动更深层次的东西,要一步一步走,否则就会成为夹生饭,和我一样;
2.先把基础打好,再学别的。如果你连一个int型多少字节都不知道,就不要去自己去写更复杂的算法;
3.理解算法,拥有更多的知识并不能使你成为一个好的程序员。你必须能自己完美无瑕的实现你的想法,哪怕是最简单的想法;
4.代码的可读性更重要,如果你仅仅想做一名孤独的黑客,那么可以忽略这一点,否则为公司效力,你的代码必须能让同事看懂;
5.不要认为代码能跑就可以了,要考虑所有可能发生的情况,异常流也要处理,好的代码80%都在处理异常流而不是正常流;
6.写出的程序代码并行的要保存文字记录,比如文档,比如代码的注释。