Posted on 2006-09-08 23:13
itwalker 阅读(2017)
评论(19) 编辑 收藏 网摘 所属分类:
信马由缰
四、保持正确的程序思维和良好的开发习惯
据说电影《黑客帝国》是拍给程序员看的,因为很多人看不懂里面的情节,而要看明白也很简单:不要把自己当人,你需要把自己看做一段程序。这是最娱乐的程序思维。
对于正确的程序思维,我个人观点是,从微观角度,不要想当然的认为你的代码理应是怎么样的结果,而要从你期望的结果来推算程序该是什么样的,这样的程序执行的时候不同的对象会开辟什么样的内存空间、它们的生命周期会经历哪些阶段,寄存器在某行代码运行时分配情况大致是什么样子,操作系统这时会做怎样的进程调度,垃圾回收什么时候将如何进行等等。
宏观的说,实现一个功能,如果只能找到一个方法和途径,一定会遇到重重障碍并且实现得苦不堪言,最后可能还需要别人来当消防队员救你出火海。如果能找到2个以上的方法和途径,即使遇到重重障碍仍然会游刃有余,不过,如果每次你都在2个以上的方法中优先选中最笨重的方法、最曲折的途径或是最后才找到正确的方案,程序思维可能仍然不够正确。
简单自测一下,对于一个布尔变量bFlag:
bool bFlag=true;
如果觉得:
if (bFlag==true)
...
和:
if (bFlag)
...
没有什么区别的话,说明程序思维还可以进一步提高。
再说开发习惯,这不是一朝一夕或是看一下编码规范就可以做到的,特别是在IDE越来越傻瓜化的情况下,如果没有正确的程序思维,要做到正确的习惯就已经有难度了,良好的开发习惯,不仅仅是如何给变量、函数、类命名,如何缩进,如何做好代码注释,如何捕捉和处理好每一个异常。记得以前看过一本书,《高质量C/C++》编程,不管是不是要写C/C++代码,这本书是一本理解程序的好书。
此外,不论开发中使用了VSS还是CVS或是其它版本控制工具,如果使用起来一直觉得别扭和不自在,或者时不时发现同一份代码没有签出的时候,在本机上和版本控制服务器上的内容并不一致,那仍然说明良好的开发习惯还可以进一大步培养。
五、站在用户和QA的角度编码
对于开发来说,程序员自己就是软件产品的第一个用户,很多时候,程序员自己很满意的东西用户不见得接受,但是自己都不满意的东西用户能完全接受并且很满意的情况一定是极端的个例。站在用户的角度编程,每完成一个功能或产品,你的第一反应会是,如果我是用户我会不会接受,还有没有问题,这种思维往往会让你有新的发现和收获;而不会是伸个懒腰对自己说,搞定,收工,然后暴走而去。这样的结果往往是留给测试人员一堆抓狂的bug。
站在QA的角度编程。你看到自己一天前的代码有什么感觉?一周后看有什么感觉?一个月之后再看有什么感觉?我的体会是,看自己写的代码,当时感觉最好,一天之后看感觉有可以改的地方,一周之后看发现有许多可以改的地方,一月之后再看就开始怀疑,这是我写的吗?今是而昨非,带着挑剔的眼光来检查代码,自己就可以发现问题。
六、积极的思考大胆的交流快速的学习高效的做事
第六点的这一行是一口气写出来的,写完想了想,把最后“正确的做事”改成了“高效的做事”。
这几点简单直白到不用做任何解释了,只说最后一个,修改的原因是,不能正确的做事,或是老找不到正确的做事方法,或是最后找到的方法才是正确的,我相信做出来的事很大程度都不会有效率可言,“高效的做事”,前提本身就包含着:快速找到事情的根本和正解,或者快速找到有效资源,然后,搞定它。
回过头来看上面主张的几点,并非是我已经把每点都已经做得非常好了,只是目前发现和遇到的项目组大多数问题都可以在这几点中找到原因和解决方法。广告说,大家好才是真的好。一点不假,如果每个程序员都能做好该做的几件事,最低程度,编码工作会变得轻松有趣得多。
热情期待大家的砖头和bs中。
Feedback
2个人交流中编码,效率是很高的。一句偶然的讨论,就可能解决一个困扰的问题,或诞生一个很好的实现。
@idior
写在记事本上的时候,是一整篇,考虑到过长的纯文字容易引起阅读疲劳,所以拆成了3篇。接受你的建议,合并为2篇。
看了大家的留言,感觉有一点应该补充,就是第七点“善于总结”,补上。
如果觉得:
if (bFlag==true)
...
和:
if (bFlag)
...
没有什么区别的话,说明程序思维还可以进一步提高。
真的不知道区别在哪,请指教,谢谢
如果觉得:
if (bFlag==true)
...
和:
if (bFlag)
...
没有什么区别的话,说明程序思维还可以进一步提高。
真的不知道区别在哪,请指教,谢谢
加入一个条件判断语句,其他代码阅读者更能明白程序的逻辑
那么要不要写if( (a == b) == true)呢?
if (bFlag==true)
...
和:
if (bFlag)
...
编译完成后一样吗?
汇编语言的:
mov ebx,[#####]
cmp ebx,1
jnz #####
和
mov eax,[#####]
jnz ######
一样吗?
很多年没碰汇编了,不知道我的理解对不对?
拜读全文!真巧,我也是做了6年有余的程序员,辗转了好多地方,碰了好多东西!
其实我发现程序员做久了很容易迷失,那是因为人们都说高处不胜寒,很容易造成你不晓得应该如何提高。
所以这两年,我开始改变,让自己更加勤奋的思考,以及对周围事物的观察,以前做WEB的时候大家都说技术发展快,更新快,以为只要抓住了最前沿的东西,就可以成为高手,后来我发现完全不是这样,高速推进的往往只是事物表面,是技术革新带动了不同的表达形式,其基础仍然是你对计算机,对逻辑以及基础科学的理解和认识。曾经与一位业界知名的程序员交流,他提出,开发其实分了很多细的领域,你只有在基础打好后,去深入向某一个领域钻研,才能成为专家,高手,如果只是样样都会,样样都不精,最后恐怕也是虚度。那么实际上这些领域更多的依靠了传统科学,例如图像领域的研究,密码学,AI...
所以我觉得去积极思考自己的发展方向是一个很重要的事情,不要在错综复杂的新技术更新面前将自己迷失。
拙见,望拍砖!
感谢大家的留言,谈一下我对前面提到的if语句的理解。
从程序的执行来看,if (bFlag==true)语句先运算,然后才是逻辑判断,是两个过程,而if (bFlag)是直接进行逻辑判断,是一个过程。
其次,从编译原理来看,两个if语句的代码生成是不一样的。
最后,考虑一下两个if语句在计算机中的执行,前者需要两个寄存器,后者只需要一个寄存器,xLight给出的汇编代码就很能说明。
@nbhorse
对你的观点,有同感。
现在回头看看自己六年的经历不算短也不算长,走过的弯路要很长时间才能发现,缺乏的正是思考和自我认识。想法和能力就像走路的两条腿,两者和谐运作的时候,速度似乎比平时会快上一点。技术本身不是问题,到底能做多深很多时候对我们能走多远有影响。比如web,我一个朋友的表弟还在高中时自学了一下html和asp就做了一个看起来很不错的动态网站,我以前有一个同事,中专毕业,但是在公司里面做web应用也很厉害,那是不是就意味着web的门槛很低很容易做呢?不尽然,据我所知,不少博士生仍然有专攻web方向的研究课题,不过深度和层次不一样,同属web领域,做的事情和结果也大不一样了。
對第6點高效的做事深有理解
現在在寫任何一個程序前都喜歡先想要怎樣寫讓它更高效更精致...
往往想了几天還沒找到一個方向﹐浪費了很多時間
我想這就是過度設計了
還不如先把它寫出來﹐然后再去重構更好些
追求程序的运行效率和代码的易读性
这两者需要兼顾,
像我现在所从事的是外包的行业,后者的
重要性要大一点。