Archive for the '随想' Category

转载:作一个真正合格程序员的七种素质

星期二, 05月 30th, 2006

作为一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。  
      1:团队精神和协作能力
  把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。一旦进入系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人是不合格的。
  2:文档习惯
  说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
  3:规范化,标准化的代码编写习惯
  代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。有些codingfans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己?根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。没有规范化和标准化的代码习惯,研发之间的协作是绝对不可想的。
  4:需求理解能力
  程序员需要理解一个模块的需求,很多程序员写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
  5:复用性,模块化思维能力
  经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
  复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
  一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在很多软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力,这是我们应当刻意克服的弊病。
  6:测试习惯
  作为一些正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
  测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。
  当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。
  7:学习和总结的能力
  程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。
  但是学习也要找对目标,善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
  具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。

迷茫了。。。

星期一, 05月 29th, 2006

完成一个软件项目,有两个方向的技能是必须要掌握的。
微观方面,对基础知识的掌握,对计算机经典理论的理解程度,是一名合格程序员的基本功。其中包括(我认为很重要的):算法,数据结构,C++,组成原理,体系结构,离散数学,数据库原理,操作系统。。。而我不得不承认,自己在这方面实在欠缺的太多了。大学四年浪费了宝贵的时光,现在想弥补这些只能靠自已用业余时间来完成。我一向相信自己的学习能力,但面对如此多的内容,也不知从何下手,上面提到的每一项,不拿出至少一个月的时间是不太可能补得回来的。
宏观方面,作为一项工程,要对项目有全局的认识及掌控能力,经验固然重要,理论的学习也是不可缺少的。而且,与基础知识不同,这一路线涉及到很多当前流行的软件开发方法论、平台、标准、产品,也是一张宏大的知识网。涉及内容有:开发方法(RUP、MSF、设计模式),平台(J2EE、.NET)、标准(TCP/IP为代表的各种协议)、产品(VS、Oracle、LINUX。。。太多了)。。。系统地学习每一项都需要很长的时间,而且在学习的同时还要有相应的项目经验才能深入理解。
时间是宝贵的,不会允许我学习每一样想了解的东西,到底该怎么学呢?迷茫。。。
希望牛人能给提点建议。

陆小凤——凤舞九天

星期一, 05月 22nd, 2006

一部好的小说,就在于能让人拿起之后就再也放不下,全部读完还能留下一些东西。陆小凤——凤舞九天属于此类。
有一句话,出现在陆小凤于西门吹雪诀别的时刻:
誓要去,入刀山!
  浩气壮,过千关。
  豪情无限,男儿傲气,地狱也独来独往返!
  存心一闯虎豹灾,今朝去几时还?
  奈何难尽欢千日醉,此刻相对恨晚。
  愿与你,尽一杯。
  聚与散,记心间。毋忘情义,长存浩气,日后再相知未晚。

人与佛关于婚外情的一段对话

星期四, 03月 30th, 2006

深夜,寺里一人一佛,佛坐人站。
人:圣明的佛,我是一个已婚之人,我现在狂热地爱上了另一个女人,我真的不知道该
怎么办。
佛:你能确定你现在爱上的这个女人就是你生命里唯一的最后一个女人吗?
人:是的。
佛:你离婚,然后娶她。
人:可是我现在的爱人温柔,善良,贤惠,我这样做是否有一点残忍,有一点不道德。
佛:在婚姻中没有爱才是残忍和不道德的,你现在爱上了别人已不爱她了,你这样做是正确的。
人:可是我爱人很爱我,真的很爱我。
佛:那她就是幸福的。
人:我要与她离婚后另娶她人,她应该是很痛苦的又怎么会是幸福的呢?
佛:在婚姻里她还拥有她对你的爱,而你在婚姻中已失去对她的爱,因为你爱上了别人,正谓拥有的就是幸福的,失去的才是痛苦的,所以痛苦的人是你。
人:可是我要和她离婚后另娶她人,应该是她失去了我,她应该才是痛苦的。
佛:你错了,你只是她婚姻中真爱的一个具体,当你这个具体不存在的时候,她的真爱会延续到另一个具体,因为她在婚姻中的真爱从没有失去过。所以她才是幸福的而你才是痛苦的。
人:她说过今生只爱我一个,她不会爱上别人的。
佛:这样的话你也说过吗?
人:我。我。。我。。。
佛:你现在看你面前香炉里的三根蜡烛,哪根最亮。
人:我真的不知道,好像都是一样的亮。
佛:这三根蜡烛就好比是三个女人,其中一根就是你现在所爱的那个女人,芸芸众生,女人何止千百万万,你连这三根蜡烛那根最亮都不知道,都不能把你现在爱的人找出来,你为什么又能确定你现在爱的这个女人就是你生命里唯一的最后一个女人呢?
人:我。我。。我。。。
佛:你现在把一根蜡烛拿到你眼前,看看哪根最亮
人:当然是眼前的这根最亮。
佛:你现在把它放回原处,再看看哪根最亮
人:我真的还是看不出哪根最亮。
佛:其实你刚拿的那根蜡烛就是好比是你现在爱的那个最后的女人,所谓爱由心生,当你感觉你爱她时,你用心去看就觉的它最亮,当你把它放回原处,你却找不到到最亮的一点感觉,你这种所谓的最后的唯一的爱只是镜花水月,到头来终究是一场空.
人:哦,我懂了,你并不是要我与我的爱人离婚,你是在点化我,
佛:看破不说破,你去吧。
人:我现在真的知道我爱的是谁了,她就是我现在的爱人。
佛:阿弥陀佛,阿弥陀佛。
真的精辟,一生只要守好一只蜡烛就可以了,看多了自会眼花。
你真正爱的人其实就在眼前,哈哈(这句是我自己加的)