俗话说“师父领进门,修行靠我的”,随着互联网的高速发展,愈来愈多的人选择了IT行业,加入到了程序员的行列。那么,对于一个刚入行的小白来说,如何成为一个优秀的程序员呢?一个优秀的程序员须要哪些素质呢?程序员
扎实的技术shell
熟练开发工具数据库
作为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,不少系统级的软件仍是用C/C编写。编程
而JAVA的跨平台和与WEB很好的结合是JAVA的优点所在,而JAVA即其相关的技术集JAVAOne极可能会成为将来的主流开发工具之一。服务器
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减少了开发难度,并可以强化程序员对象模型的概念。网络
另外,须要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。分布式
熟知数据库模块化
为何数据库是如此重要?做为程序员,他们天然有本身的理由:不少应用程序都是以数据库的数据为中心,而数据库的产品也有很多,其中关系型数据库还是主流形式,因此程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要很是清楚,要熟练掌握SQL的基本语法。函数
虽然不少数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操做方法。若是没有机会接触商业数据库系统,可使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。工具
了解操做系统
当前主流的操做系统是Windows,Linux/Unix,熟练地使用这些操做系统是必须的,但只有这些还远远不够。
要想成为一个真正的编程高手,须要深刻了解操做系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux做为开发源码的操做系统,是一个很好的学习平台,Linux几乎具有了全部现代操做系统的特征。虽然Windows系统的内核实现机制的资料较少,但经过互联网仍是能获取很多资料。
懂得网络协议TCP/IP
在互联网如此普及的今天,若是您尚未对互联网的支撑协议TCP/IP协议栈有很好的掌握,就须要迅速补上这一课,网络技术已改变了软件运行的模式,从最先的客户/服务器结构,到今天的WEBServices,再到将来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深刻掌握TCP/IP协议是很是必要的。至少,须要了解ISO七层协议模型,IP/UDP/TCP/HTTP等经常使用协议的原理和三次握手机制。
明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是将来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代我的英雄主义,成为软件系统成功的保证,一个编程高手并不必定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
素质要求
需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不只仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估本身的模块对整个项目中的影响及潜在的威胁,若是有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工做过,可是没有用心工做。
模块化思惟能力
做为一个优秀的程序员,他的思想不能在局限当前的工做任务里面,要想一想看本身写的模块是否能够脱离当前系统存在,经过简单的封装在其余系统中或其余模块中直接使用。
这样作可使代码能重复利用,减小重复的劳动,也能是系统结构越趋合理。模块化思惟能力的提升是一个程序员的技术水平提升的一项重要指标。
团队精神和协做能力
团队精神和协做能力是做为一个程序员应具有的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。
独行侠能够写一些程序也能赚钱发财,可是进入研发团队,从事商业化和产品化的开发任务,就必须具有这种素质。能够绝不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,若是没有缺少文档,知识就没有继承,公司仍是一个来料加工的软件做坊。做为代码程序员,必须将30%的工做时间写用于技术文档。没有文档的程序员势必会被淘汰。
规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不一样技术人员之间的协做。
测试习惯
测试是软件工程质量保证的重要环节,可是测试不只仅是测试工程师的工做,而是每一个程序员的一种基本职责。程序员要认识测试不只是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
学习和总结的能力
程序员是很容易被淘汰的职业,因此要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员不管学了多少语言,代码写起来多熟练,只能说他是一名熟练的代码民工,他永远都不会有质的提升。一个善于学习的程序员会常常总结本身的技术水平,对本身的技术层面要有良好的定位,这样才能有目的地提升本身。这样才能逐步提升,从程序员升级为软件设计师、系统分析员。