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