论坛: 编程破解 标题: 程序员应具有的素质(转贴) 复制本贴地址    
作者: lwei889 [lwei889]    论坛用户   登录
                          程序员应具有的素质



  程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立,到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。
  中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性的重要工作。
  中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际上只是一些Coding fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的CTO就是这样的coding fans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓人。

  作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。


1:团队精神和协作能力


  把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。


2:文档习惯


  说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。
    缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。


3:规范化,标准化的代码编写习惯


  作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
  再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。


4:需求理解能力


  程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。


5:复用性,模块化思维能力


  经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。


  复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。


  一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。


6:测试习惯


  作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
  测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。


7:学习和总结的能力


  程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。
  善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。
  但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。
  善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
  一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。

  具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。




地主 发表时间: 04-02-26 15:33

回复: kert_t8 [kert_t8]   论坛用户   登录


B1层 发表时间: 04-02-26 16:46

回复: ziaichen [ziaichen]   论坛用户   登录
看来我应该努力呀!!
呵呵!

B2层 发表时间: 04-02-26 18:16

回复: xiaoshi [xiaoshi]   论坛用户   登录


B3层 发表时间: 04-02-26 18:59

回复: yangcheng [yangcheng]   论坛用户   登录
真的很不错!

B4层 发表时间: 04-02-26 19:56

回复: cncd [cncd]   论坛用户   登录
收藏.谢谢子木.
找到篇“豪杰解霸”的作者梁肇新写的书的序和前言,大家借鉴一下――
    有人说,“编程是一种艺术”,这句话的意思一方面是说,编程技巧像艺术技巧一样,深不可测、奥妙无穷;另一方面是说,程序员像艺术家一样,也有发挥创造性的无限空间。
    在传统产业中,比如,一个人操作一部机床,他所需掌握的技术是有限的、几乎不变的,而他的创造性的发挥也基本上受到机床能力的局限。但是搞艺术就不同了。比如,拉小提琴的技巧,从“会拉”到“大师”,其水平相差何止十万八千里!同一架小提琴,初学者拉起来会令人生厌,而大师演奏出来却能使听众陶醉、痴迷。
    当然,将程序员与艺术家相比也不完全恰当,而一个软件企业也需要各种层次的软件人才的组合。比如所谓“软件蓝领”,就是指在软件项目中从事编写代码或测试这类工作的,他们的工作性质与其说像艺术家,不如说更像传统产业工人。所以,这里将程序员与艺术家相比,更多的是指所谓“软件白领”。不过,“软件蓝领”如果能提高自己的编程水平,也对做好工作大有帮助,何况,“软件蓝领”是可以向“软件白领”发展的。
    现在都说人才重要,那么对软件来说,人才更是无比重要。如果说我们的某些传统产业落后于人可以归结为装备落后的话,那么,我们的软件产业落后于人只能归结为人才了。因为在今天,我们和发达国家的软件人员所使用的硬件和软件装备基本上是一样的。
    不管怎样,一个软件企业需要有一些高水平的程序员来做架构设计、系统分析或进行重要部分的编码、调试等工作。他们的水平、他们的创新,对于软件企业至关重要。记得当盖茨被问及:如果只允许他在全部金钱和最有才华的20个雇员之间做出选择的话,他将选择哪个?盖茨毫不犹豫地选择了后者,他说:“我不在乎钱”!这说明在盖茨心目中,这20个雇员(显然很大一部分是顶级程序员)是微软公司最宝贵的财富。
    由此可见,中国软件产业能否赶上国际水平,关键在于中国是否能够拥有一大批具有国际先进水平的软件人才。
    现在,随着我国软件产业的高速发展,每年吸引着数以十万计的相关专业的毕业生和众多爱好者加入到这片热土中来。但另一方面,很多企业还是感到饥渴,深感合格的软件人才还是不多,他们迫切地呼唤具有丰富工作经验,技术扎实精深的高层次复合型人才。这种人才的成长需要一定的环境、一定的时间以及一定的实践磨炼。他们也很希望得到高手的指点,从高手丰富的实践经验中吸取营养、迅速成长。
    本书作者梁肇新是国内为数不多具有十多年编程经验,而依然战斗在软件开发第一线,且依然对其热情执著的编程高手之一。梁肇新将自己厚积薄发的编程经验集结成书,相信对广大程序员大有裨益。本书通篇没有时髦的IT新名词或新思想,而是踏踏实实地对很多知识进行了深刻的剖析,这有助于为编程打下坚实的根基。只有这样,才能在飞速变化的软件领域免于雾里看花,才能更快更深地认识许多新问题、新知识,也才能更从容地应对未来之挑战。
    千里之行,始于足下。希望本书的出版有助于每位程序员走好坚实的每一步。
              中国工程院院士                             
              2003年8月12日

前  言
    我的这一本书很难写,因为试图在这本书中把我所了解的东西和盘托出,但是,其中的每一个部分其实都可以单独成书。由于本书的目的是让那些彷徨于如何提高自己而不得其法者以最大的启迪,所以,我认为必须把握的内容都有必要提及。
    本书是以先讲基本知识,然后用实例来开悟读者的,可能基本知识中的内容有些枯燥,这也是我的第一本书一开始不知如何下手的缘故。由于无经验,所以一开始的方法也有一些不当,从而把精彩的内容略去了,在这本书即将完成之际已经无法再补上。如果会再版的话,将会更加精彩有趣。
    此书的精要在于悟,即在真实的实验之中进行领悟。必须提到的是,在此书的创作中起关键作用的易虎刚从2001年开始一直努力协助,同时以亲身的进步来证明我所讲的内容和方法,并且在现实的工作中得到提高。
    此书写作之时正值IT业狂躁之际,所以书中一再强调耐心,强调方法,所以很难写。难写之处在于思考成分多,实例讲解少。而计算机书籍中以实例讲解,不需要思考的成分多,即一本不需要动什么脑筋的书最容易写。像这本几乎是挖空心思的书最难。
    高手在我看来是可以达到对从CPU本身到操作系统内核、到系统平台、到应用软件体系,到软件的具体工作都有着深层次的掌握者。可以达到出神入化境界者谓之高手。
    我在书中试图把十几年来的精髓写出来,但可能会存在书不达意之处,请众高手笑纳。
    计算机技术的本质是什么?它是一个精心积累人的思维智慧的机器。现在技术越积越多,功能也就越来越强大,智能化也就越来越无所不在。千万不要以为软件无非如此,现在还没有到达它发展的登峰造极的时候。
    有人认为现在是Java及.Net的时代,有谁还需要C及汇编呢?要知道,Java及.Net是建立在软件之上的,是为了垄断市场而建立的体系,有如挖好一个金碧辉煌的坑让你往里跳,还自以为站在巨人的肩膀上,事实上成了坑底之蛙。所以,我认为要作为高手,就必须从机器本身出发,从CPU到操作系统、再到软件体系。当你做到这一点时,你会发现自己也可以建立一整套体系,如可以为Ne(tja)va之类。
    。。。。。。。
还有286在置顶中收的“编程高手。。。”一文,都是很有启发的东东,越早读到越好。

[此贴被 菜鸟初段(cncd) 在 02月26日22时34分 编辑过]

B5层 发表时间: 04-02-26 21:41

回复: sniper167 [sniper167]   论坛用户   登录
不错
好贴

B6层 发表时间: 04-02-27 19:10

回复: newmyth21 [newmyth21]   论坛用户   登录
小生收到

B7层 发表时间: 04-02-27 20:36

回复: windflower [windflower]   论坛用户   登录
独立--协作--高度独立

结构--模块--面向对象

楼主你明白了吗?


B8层 发表时间: 04-02-28 13:35

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号