优秀程序员应该具备哪些素质?
优秀程序员应该具备哪些素质?
你可以不聪明,但是你绝对不能不用心。
--《女人公敌》
程序员求职是本是一件只要“郎有情女有意”,一拍即合的事情,可是企业与求职者却总是看不对眼、聊不到一块去,进而导致IT市场上总是会出现结构性失衡的现象。一方面,社会每年培养大量的计算机相关专业毕业生,他们却找不到好的工作,但另一方面,企业却招不到好的程序员。据不完全统计,大学生里面大约有23%的人是学习计算机、通信、电子相关专业的,都可以从事程序员相关工作,也就是说全国每年大约有160 万准程序员们毕业,可同样,据传国内某知名搜索引擎企业在2012 年应届生名额没用完。问题出在哪?问题恰恰就出在程序员越来越多,但优秀的程序员却不是这样。因为这个世界上从来都不缺少好的企业,缺少的是好的员工。
凭什么你就比别的程序员优秀?是因为别的程序员具备的能力你都具备,而别的程序员不具备能力你也具备,而这正是你的优秀之处。着名书籍《人月神话》里面对优秀程序员的特性进行了一个深入分析,认为优秀程序员必须具备以下几个方面的素质:
(1)对编程有浓厚的兴趣,而不是因为“篮球之父”乔丹(备注:乔丹曾经给NIKE代言,广告词为“Just do IT”)的缘故才入行,由兴趣能驱动自己的探索和钻研精神,优秀程序员一般喜欢用业余时间探索和自己琢磨点东西,研究点开源框架和源代码。
(2)优秀程序员一般善于重构,懒于做重复的事情,对于重复事情有独有的程序员思维,即通过程序或其它自动化方式解决重复问题,而留更多时间去思考。达到一种多约束下的良好平衡。
(3)优秀程序员更多的会从简单功能实现,花哨的界面转移到对安全,性能,可扩展等底层架构的关注。
(4)优秀程序员一般有较明显的自恋和偏执特征。
(5)优秀程序员一般对计算机底层知识非常了解,有较为扎实的算法,数据结构等理论知识的基础。
对于优秀程序员而言,编程不是一份工作,而是一项充满激情的事业,编者比较认同这个观点,同时,编者也觉得,一名优秀程序员除了具备这些素质外,如果还能具有以下一些能力,必将锦上添花。
(1) 身体壮如牛
人生很漫长,不是一场百米冲刺,加速发力短暂的十几秒就完了,而是一场长达两万多天的马拉松比赛,二十几岁大学毕业,只是人生马拉松的开始,最重要的不是起跑的初速度有多快,而是是否能够坚持跑完全程。所以,起跑时就需要有足够的贮备能够让自己坚持下来,这贮备就是健全的身体和人格。所以,想成为一名优秀的程序员,身体不好肯定不行。本章第4.5 节对程序员的身体健康有比较详细的论述,此处不再赘述。
(2) 心理素质好
编程是一项劳心劳力的活,程序员也因此需要承受巨大的精神压力,也许压力能够激发人的潜能,但压力同样可以摧残一个人的意志,关键就看如何对待了。生活似乎并没有给程序员缓解压力的空间,反而高房价、高物价一点点地消磨掉了他们所剩不多的斗志。此时,就对程序员的心理素质提出了更高的要求。有的程序员经不住风吹雨打,尽管实力不俗,但面对压力,面对困难,却畏首畏尾,瞬间崩溃,立马变成软蛋,而有的程序员大器沉着,面对困境,不慌不乱,能够冷静思考,越战越勇,尽管泰山压顶,却仍然岿然不动,丝毫没有怯意。而优秀程序员属于后者。
(3) 团队精神和协作能力
“不怕神一样的对手,就怕猪一样的队友”,一句经典的网络用语道出了团队合作的重要性。
众所周知,失败的团队没有成功者,成功的团队成就每一个人。真正优秀的程序员应学会怎样和别人工作与合作,因为团队精神和协作能力是程序员应该具备的最基本的能力,也是最重要的安身立命之本。很多人误认为优秀程序员是独行侠,不食人间烟火,喜欢把自己关在一个小黑屋子里面,一待就是几个月,然后突然出关,向世界宣布自己已经如何武艺高强了,其实不然。如果没有团队精神,任何一个程序员也不可能有真正的成功,即使成功也是渺小的、暂时的。
随着软件系统的规模越来越大,计算机软件的发展已经度过了早期的依靠个人能力的单兵作战时代,“孤胆英雄”也早已成为传说,即便如Linus Torvalds(Linux 之父)这样的天才,也需要通过组成强大的团队来才能创造奇迹。现在的软件已经朝着大型化、商业化、定制化方向发展,因此要获得事业上的成功,必须要依靠团队的力量才能达到,就更加需要程序员的团队精神与合作能力了。
关于如何培养团队精神与写作能力,编者认为,除了加强自身的技术水平、沟通技巧、语言表达能力等能力以外,还需要增强自己的责任心,因为责任心是赢得团队成员尊重的最好利器。
(4) 书写注释与文档的能力
程序员最烦两件事:第一件事情是别人要他给自己的代码写注释与文档,第二件事情是别人的程序没有留下注释与文档。鉴于此,为了别人,也为了自己,还是应该好好书写注释与文档。“本是同根生,相煎何太急”,程序员何苦为难程序员?就如同你刚接触项目渴望得到前辈留下注释与说明文档一样,为你后面的兄弟留点注释和文档吧。
很多人以为编程就是写代码,其实,这是对编程的一种误解。程序员的世界不应该只有代码。没有好的建设图纸,搬砖的力气再大,房子也是会塌的,而文档对于软件的重要性丝毫不亚于建设图纸于建筑的重要性。软件由代码与文档组成,写代码需要技术,写好文档也需要技术,优秀的程序员绝不仅仅只是会写代码,而是应该具有很强的注释与文档书写能力。虽然说代码本身可以说明问题的确是很棒的,但并不是说注释不重要,良好的注释与文档是正规研发流程中非常重要的环节,如果软件缺少注释与文档,那么这个软件就会缺乏生命力,在未来的升级、排故以及模块的复用时就都会遇到极大的麻烦,有可能是毁灭性的灾难。
作为一名普通程序员,花费30%的工作时间写技术文档是很正常的事情,而作为优秀程序员,这个比例会更高。