`

你是合格的程序员吗?—合格程序员应该具备的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  
楼主
    我是个女孩刚刚工作,在公司你们感觉怎末什么也不懂。。。
   我有不知道该如何入门、、、、

相关推荐

    程序员应该具备的12种能力

    以下是对程序员应具备的12种能力的详细解析: 1. **编程语言能力**:精通一门编程语言是程序员的基础,这意味着深入理解语法、特性以及如何高效地解决问题。这需要时间和实践的积累,而不仅仅是速成课程。 2. **...

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

    ### 作一个真正合格程序员的七种素质 在IT行业中,成为一名合格的程序员不仅需要扎实的技术基础,还需要一系列软技能和个人素质。以下是成为一名真正合格程序员所必备的七种关键素质。 #### 1. 团队精神和协作能力...

    作一个真正合格的程序员要知道的

    本文将根据给定的标题、描述及部分内容,详细阐述一名真正的合格程序员应该具备的核心素质与技能。 #### 一、扎实的基础知识与学习能力 对于任何一名程序员而言,掌握扎实的基础知识是至关重要的第一步。这包括但...

    合格程序员应具备的素质

    根据给定的文件信息,我们将深入探讨一个合格程序员应具备的关键素质。 ### 1. 专业技能与知识体系 首先,一名合格的程序员必须拥有扎实的专业技能,这包括但不限于对至少一种编程语言的精通,理解计算机科学基础...

    程序员应具备的能力和素质.doc

    【程序员应具备的能力和素质】 在信息技术领域,程序员扮演着至关重要的角色,从底层硬件到高层应用,他们的工作贯穿整个IT产业链。然而,中国的软件行业在规模化和产品化能力上存在一些不足,主要源于对技术、开发...

    如何成为一名合格程序员

    成为一名合格的程序员,不仅需要扎实的技术基础,还需要不断学习新知识和技能,特别是在这个日新月异的IT行业中。英语,作为IT行业的通用语言,扮演着至关重要的角色。以下是对标题和描述中所述知识点的详细解释: ...

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

    2021年09月16日

    论程序员应具备的职业素质.doc

    合格的程序员需要具备以下基本素质: 1. **团队精神和协作能力**:无论技术水平如何,程序员都必须具备团队协作精神,因为任何复杂的项目都需要团队共同努力才能完成。像Linux这样的大型项目,正是由全球各地的...

    合格的程序员必看的书

    本文将基于提供的部分信息进行深入解析,并结合实际需求,提炼出对合格程序员至关重要的几大知识点。 #### 一、技术交流与合作能力 在IT领域,技术交流与合作是非常重要的技能之一。程序员不仅需要具备扎实的技术...

    程序员教程(pdf)

    《程序员教程》是一本针对初学者和有一定经验的程序员精心编写的教材,旨在全面介绍编程基础...通过阅读和完成书中的任务,你将逐步成长为一名合格的程序员,具备解决复杂问题的能力,为未来的编程生涯奠定坚实基础。

    如何成为合格程序员

    ### 如何成为合格程序员 成为一名合格的程序员不仅仅是掌握一两门编程语言那么简单,它涉及到对技术的深刻理解、良好的编码习惯、以及持续的学习能力等多个方面。以下是对文章中提到的关键知识点进行深入解析。 ##...

    程序员应具备的素质(程序员)

    总结来说,成为一名合格的程序员,需要具备以下素质: 1. 团队精神和协作能力:理解和尊重团队合作,能够有效地与他人协同工作。 2. 文档习惯:重视技术文档的编写,确保软件的可持续发展。 3. 规范化、标准化的编码...

    程序员的八重境界

    **定义:**合格程序员不仅能够独立完成任务,还能在一定程度上解决较为复杂的问题。他们是团队中的中坚力量。 - **特征:** - 拥有扎实的编程基础,能够写出高质量的代码。 - 在团队中承担重要的角色,如模块负责...

    程序员如何成为月入百万的自由职业者?.pdf

    首先,程序员需要具备四种常见的能力:软件开发、讲授、咨询、写作。软件开发是指针对特定领域问题,运用思维、分析、设计、想象力等寻找答案,经过语言、技术框架、工具等编写软件来实现答案的能力。讲授是指把自己...

    程序员必经之路~~高级程序员复习资料

    以上知识点是成为一名合格高级程序员的基础,通过深入学习和实践,你可以不断提升自己的技术水平,更好地应对复杂项目和挑战。这份“程序员必经之路”的复习资料无疑是一份宝贵的资源,它将带你逐步走进高级程序员的...

    C程序员成长攻略

    它不仅具备高级语言的基本结构,还具有低级语言的功能,例如直接对硬件进行操作的能力。C语言是一种结构化语言,尽管它不支持函数的嵌套定义,但它仍具有结构化语言的典型特征,如程序的模块化设计。 C语言对程序员...

    程序员必玩游戏...来测试下你的编程能力吧

    而这些能力,正是一个合格程序员在实际工作中所必须具备的。 此外,这类游戏通常都设有一定的评分机制,分数的高低不仅取决于玩家完成关卡的速度,还可能和代码的质量有关。例如,代码的简洁性、执行效率和能否在...

    程序员10年的试题及答案(超全)

    为了确保程序员具备必要的技能和知识,业界通常会通过一系列的试题和考试来评估他们的能力。本压缩包“程序员10年的试题及答案(超全)”包含了从1990年至2010年间程序员考试的题目和解答,这是一份全面的学习资源,...

Global site tag (gtag.js) - Google Analytics