`

你是合格的程序员吗?—合格程序员应该具备的12种能力

阅读更多
毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基础。写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考。我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去。如果真的不喜欢这个职业,也该尊重这个职业,尊重自己,赶紧改行。

1. 编程语言能力

不用多说,作为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸淫。

2.编码能力

我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的。就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,心想做完这个项目,就拍拍屁股走人了,缺少最基本的职责素养。我经常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你自己的孩子,你能不仔细呵护吗?你是称职的父母吗?这是我编写的一个Java编码规范,供大家参考,这里可以下载http://gurudk.iteye.com/blog/111734

另外一个就是注释,要注意不是为了注释而注释。对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。

思维的条理性,写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。安安静静把实现过程想清楚,在脑子里先实现一遍。再去敲代码,水到渠成。

3.面向对象思维能力

如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对继承,多态,重载的理解。对面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该掌握常用的设计模式,比如工厂模式,策略模式,观察者模式,模板方法模式,命令模式等等。我面试过很多程序员,没有一个能说得上几句的。

4.利用工具能力

工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。

另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。

经常上互联网,看到好多好的资料想保存下来,作为日后查看之用.一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了得乐书签(del.icio.us)的firefox插件,非常方便,现在成为了我必备的一个工具。

还有一个最重要的工具就是搜索引擎了,我装了google for firefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用baidu,外事用google。很多技术资料都是英文的,用google搜索效率高一些。搜索引擎用好了,就等于打开了一扇通向知识宝库的门,使用搜索引擎,关键字选择很重要。

经常去浏览大牛的blog,逐个网站访问很麻烦,去看了又可能没有更新,可以借助于RSS订阅工具,我是用iGoogle桌面工具,每天早上花半个小时扫一下,大牛的最新文章尽收眼底了。

5. 英语能力

新的技术资料都是英文的,英语国家的IT技术走在我们前面至少10年(这是我自己估计的数字,可能正在缩小)。就连印度,一个连基础设施建设都不太完善的国家,因为其英语基础较好,其在软件外包领域的发展也非常迅猛,远远超过了我们。学英语,首先是有信心,其次就是花时间。多阅读英文资料,使用金山词霸,google的firefox插件等工具配合,贵在坚持。

6.学习能力

在IT也混饭吃不容易,整个环境进化的太快,你不学习,就等于落后了。学习要有针对性,别今天学ruby,明天学python,后天php的。首先要认清自己的目标,自己短期目标是什么,1年后,3年后,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。

要想系统的学习一门技术或工具,看书是最好的方法。看完后,然后上网找相关资料,进行深入学习。学习要抓紧一切可以利用的时间,比如电脑启动要花1分多钟,旁边放一本书,可以看上几页了。公交车上,地铁上也可以看。

当然,不能只学习技术,要经常练习自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。

我学一样东西,总是先上网了解有没有相关书籍,如果想学,就买一本或者去图书馆找相关的书来读。我买的书,家里快放不下了(到目前位置,我买了1万多块的书)。我多半是把目录看完,了解这本书讲解的主要内容,然后需要的时候,我就可以立即补充它进入到我的知识结构。每个人可能都有自己的学习方法,意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。

7.创造能力

普遍认为,东方人模仿能力很强,但创造能力差。我见过很多这样的程序员,经常说,“这个只能这么解决了,我想不出有什么别的方法。”可能他根本都没想过别的方法,或者懒得去想。对任何一个问题,找出两种以上的解决办法都是非常容易的,简单的google一下,可能就是数十种。悲哀的是,有些程序员经常止步于自己构建的狭小领地之内。对待客户也是这种态度,不是积极的帮助客户解决问题,而是推脱这只是唯一解决方案。

打破这一思维定势的首先的一个办法就是在面临一个问题时,首先想到的是“没有不可能”,或是“一切皆有可能”,前面那个是阿迪的广告语,后面是李宁的。只有这样去想,才能寻找解决问题的别的出路,即使最后我们试了很多种办法,还是只有着一种解决方案,但我们在这种寻找解决方案的过程中,常常会产生很多好的想法,这样才会使我们真正深刻思考一个问题。建议大家看一看《水平思考》这本书,他提供了一些进行创造性思考的方法和工具。

但我认为,坚持认为存在另一种解决方案的信念是第一位的,方法和工具都是其次。

8.文档能力

也许有人会质疑,程序员跟写文档有什么关系。大家开源软件也用过不少,看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他么的tutorial,他们的getstarted,他们的reference文档写的多么的易懂。其实写代码也相当于写文档,只不过用的是编程语言。同样,写文档,用自然语言,也相当于写程序,简单明了,清晰易懂,这样的“程序”谁看谁舒服。同样,对于想进阶到设计师或者需求分析员角色的程序员,文档能力更是非常重要。

word是一个最实用的工具,很多程序员,多级编号都不会用,索引目录也不知道如何生成,更别灵活应用样式了。很多排版都是所谓的dirty work。垃圾样式一大堆。其实,静下心来,稍微学习一下,就能写出一篇格式漂亮的文档。

9.抽象能力

抽象能力是认识事物从现象到本质的能力。如果你只是停留在“见山是山,见水是水”的层次,客户说什么,你就做什么,设计怎么做,你就怎么实现,从来不过问为什么,也不去想他是满足了用户哪些方面的需求呢。这样可能只解决了表面的问题,可能会引起返工。认识到本质,才能让你的程序具备更大的灵活性和可扩展性。在做企业应用软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。

10.代码评审能力

代码评审和单元测试是保证代码质量的两种常用手段之一。代码评审能力,说明了你的审美标准,知道什么是好的,什么是不好的,什么是优雅的代码,什么是糟糕的代码,你才能让自己做的更好。

11.单元测试能力

没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试驱动开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。

12.DRY

DRY是一种原则,就是Don't Repeat Yourself.出自《程序员修炼之道-从小工到专家》。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。

还有一个就是我们经常在不同的地方切换IP,如果每次手工做,也非常浪费时间,写一个bat命令可以解决,找一个小工具也可以解决。

编码时,对代码的copy复用也是在重复你自己,虽然拷贝过程很爽,但是维护一致性就要付出巨大的工作量,特别是将来维护的人不是你的时候,使用代码生成工具可以解决这个问题。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。

以上我一家之言,其实评判标准很多,希望大家交流指正。
56
17
分享到:
评论
51 楼 Hibernate9 2011-09-01  
和“标准”比,才发现自己写的代码很烂!虽然解决了问题,估计新的问题也就随之产生了。
50 楼 caoguojian9999 2010-01-18  
谢谢楼主 真是受益匪浅!
49 楼 java_mike 2009-10-15  
    楼主说的真好。   学到了不少东西!
48 楼 eils2000 2009-02-25  
博主讲得很有道理,对于刚刚上路的新人有很好的指引作用,有恒心坚持,就能成功
47 楼 he_lux 2009-02-06  
学习了!!感谢楼主分享经验。
46 楼 selarey 2008-12-31  
真是经典啊,小妹受教了。本来要工作了有点迷茫的感觉,谢谢你帮我指明方向啊!!
45 楼 sd080134 2008-11-18  
thanks ,guludk.
44 楼 zhang1224 2008-11-02  
小弟,受益匪浅啊!谢谢
43 楼 handong 2008-10-27  
老哥,写的不错啊,小弟是个小菜鸟啊,多多指教啊
42 楼 sz-James 2008-09-04  
写的真的不错,而且你能花自己宝贵的时间来写文章,
来教育我们这些菜鸟,真是太感谢你了,还是那个字:牛!
41 楼 yourgame 2008-08-15  
学到了.我要做好一个程序员!
40 楼 cuishen 2008-08-15  
记得自己刚进康时的时候,总监在给我们培训时曾说过:"一个合格的程序员,要具备三大素质:1.一切从客户需求出发, 2.要在效率和产能上找到平衡点, 3.要力求完美".
39 楼 shuishou 2008-08-15  
能达到楼主的标准,至少干技术工作问题不大了
38 楼 koda 2008-08-14  
一个最基本的问题没有表述,那就是严谨的思维!!
37 楼 gurudk 2008-08-14  
引用
楼主
我是个女孩刚刚工作,在公司你们感觉怎末什么也不懂。。。
我有不知道该如何入门、、、、


1.首先问自己,喜不喜欢编程?
2.如果喜欢,建议你根据工作要求,先学好一门语言。
3.在项目中学习,实践,思考。

其实也就是学习,实践,思考这几个循环,新人尤其要专一一点,精通一门语言后,再去学别的语言。

学习语言,无非是学习语言基本知识,多写程序,没有其它捷径。

印象中,没有几个女孩子喜欢做程序员的,一般都做不长,做测试或者QA比较合适。
36 楼 gurudk 2008-08-14  
引用
说的那么多有啥用呢,最重要的能力就是沟通和解决问题的能力,还有就是细心,这个很重要


概括的讲,可以这么说,但解决问题能力确实是一个概括,实际点来说,这个很重要。“我不管你怎么样,把问题解决了就行了。”,老板经常会这么说。假设以前的一个系统出现了一个bug,让你去修改,你很快就解决了,这是解决问题,但是如果你解决的不专业,可能引起连锁反应,或者你修改的代码和注释写的不好,可能会给后面维护的人带来很大的麻烦,你是增加了总体成本,是在给软件开发的整体制造混乱。受害的可能先是你的公司,然后是你的行业,然后接下来就是你。一荣俱荣,一损俱损。
35 楼 nakupanda 2008-08-14  
刚入公司慢慢来,特别女孩,没这么快被赶走的.
34 楼 spell 2008-08-14  
说的那么多有啥用呢,最重要的能力就是沟通和解决问题的能力,还有就是细心,这个很重要
33 楼 ouyang8312 2008-08-14  
写的不错,以后工作应该对自己的要求更高一点了
32 楼 kelingSKY 2008-08-14  
楼主
    我是个女孩刚刚工作,在公司你们感觉怎末什么也不懂。。。
   我有不知道该如何入门、、、、

相关推荐

    2021-2022收藏资料合格程序员应该具备的12种能力.doc

    2021年09月16日

    合格程序员应具备的素质

    该文档主要讲述了如何成为一名合格的程序员。

    《程序员》2011年08期

    作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质: 1、 需求分析能力 2、 整体框架能力 3、 流程处理能力 4、 模块分解能力 5、 整体项目评估能力 6、 团队组织管理能力 1,...

    《程序员》2011年第2期

    作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质: 1、 需求分析能力 2、 整体框架能力 3、 流程处理能力 4、 模块分解能力 5、 整体项目评估能力 6、 团队组织管理能力 1,...

    合格的PHP程序员必备技能

    要想成为一个合格的PHP程序员需要掌握许多技能,这篇文章就向大家介绍了一个合格的PHP程序员必备技能,想要真正了解php程序的朋友一定仔细阅读,判断自己具备多少个技能。

    从程序员到系统分析员

    在这章之前,我们讨论的都是一个合格的程序员应当具备的技能,当然不止那一些内容。之所以在这里插进来讨论系统分析员的事情,是因为我们的栏目叫做软件工程而不是程序员从入门到精通之类的。在正式开始之前,我们...

    《IT职业素质修养》论文

    作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。 1:团队精神和协作能力 这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在...

    软件测试工程师应该具备哪些素质?

    现在从事程序员的人有很多,做测试工程师的人少点,工作压力不太大  测试工程师应该具备的三项基本素质[1]很多年轻或者刚刚从事测试工作的工程师,经常会问:“测试工程师需要什么技能或者具有什么素质才是合格的?...

    考务处理系统需求分析数据流图

    资格和水平考试的考务处理系统,该考试的目的是认定考生具备的软件技术资格和水平,分成多个级别如初级程序员、程序员、高级程序员、系统分析员等。凡满足一定条件的考生都可参加某一级别的考试。由于每年的试题难度...

    每天10小时,6个月的时间,零基础学编程能到什么水平?1

    基本来说,一个合格的程序员得具备良好的编码能力,解决问题的能力,算法能力,以及架构能力,最重要的还是自学能力。首先说结果,如果你能刷完上面说的书,并且有1-2个

    软件工程期中试题

    资格和水平考试的考务处理系统,该考试的目的是认定考生具备的软件技术资格和水平,分成多个级别如初级程序员、程序员、高级程序员、系统分析员等。凡满足一定条件的考生都可参加某一级别的考试。由于每年的试题难度...

    c/c++给软件开发初学者

    给软件开发初学者 要做一个合格的程序员,你需要具备下面几个条件: 1. 强烈的好奇心和求知欲 2. 追求完美的精神 3. 良好的逻辑分析能力

    COM实用入门教程

    由于COM具有二进制代码共享的特性,所以它具备了高可开发性、高度可维护性和高度的可移植性(跨开发语言),以至于在Windows上面的...作为一个VC++程序员,是否系统掌握COM的用法成为是否合格的重要的衡量指标之一。

    菜鸟也能搞定C++内存泄漏

    所以学会如何防止并检查内存泄漏,是一个合格的c++程序员必须具备的能力。但是由于内存泄漏是程序运行并满足一定条件时才会发生,直接从代码中查出泄 漏原因的难度较大,而且一旦内存泄漏发生在多线程程序中,从大量...

    java面试题及技巧3

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    Frog人工生命-其他

    1、脑结构由电脑生成:神经网络由电脑算法生成,但是电脑算法仅限于模拟环境,而不是直接参与搭建神经网络,就好象大自然只负责拍死不合格的生命,它从不主动参与设计大脑。 2、脑结构可遗传:类似于生物的DNA,电脑...

    java面试题及技巧4

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    work-at-olist

    我们一直在寻找喜欢改善工作的优秀程序员,并且我们偏爱具有合格专业人员的小型团队,而不是具有一般专业人员的大型团队。 该资料库包含一个小型测试,用于评估候选人是否具备与我们合作的基本技能。 您应该实现...

Global site tag (gtag.js) - Google Analytics