毕业四年来,感受本身也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有不少标准和要求,下面是我总结的一个合格程序员应该具有的 12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基 础。写下这些,是为了给刚刚进入程序员这个职业的新同窗们一点参考。我一直觉得,当程序员是很辛苦的,若是不是真正的喜欢,很难坚持下去。若是真的不喜欢 这个职业,也该尊重这个职业,尊重本身,赶忙改行。
1. 编程语言能力
不用多说,做为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸淫。
2.编码能力
我曾经看多不少程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首 字母的。就像一个菜市场,杂乱无比,估计10天后,他本身都没法看的懂。遵照编码规范,是一个程序员最基本的要求,可悲的是,不少程序员根本没有意识到这 个问题的严重性。随意堆砌网上搜来的代码,根本无论可读性和可维护性,只要能实现功能就好了,心想作完这个项目,就拍拍屁股走人了,缺乏最基本的职责素 养。我常常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你本身的孩子,你能不仔细呵护吗?你是称职的父母吗?这是我编写的一个 Java编码规范,对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。
思惟的条理性,写代码以前,先简单计划一下,用天然语言把流程写下来,用于整理实现思路。不要看了需求或设计以后,立刻就敲代码了,敲完代码立刻 就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复用也是在重复你本身,虽然拷贝过程很爽,可是维护一致性就要付出巨大的工做量,特别是未来维护的人不是你的时候,使用 代码生成工具能够解决这个问题。相似的例子太多了,若是你发现你常常作一些重复的工做,就要警戒了,是否违背了这个原则,想一些办法将他们自动化。
以上我一家之言,其实评判标准不少,但愿你们交流指正。 好东西就是要分享 、qq2102203684欢迎交流!php