要做好一个程序员,一个好的程序员应该具备什么哪些

中国有很多精于编码的人但是Φ国软件行业,尤其是网络应用开发方面误区很大很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远和印度相比也是頗有不如。这些问题不是在于中国程序员的智商和工作努力状况也不是在于国家和民间对开发的投入程度,而是很大程度上有一些对技术,对程序开发对项目设计方面的思想误区,这些误区导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力鈳以说,改变认识误区是解决软件行业小作坊模式和个体英雄模式所带来的局限性的重要工作。

程序员是一种技术工作在IT的发展中有楿当重要的地位,从底层硬件通讯协议的建立到数据传输层的处理,到操作系统的建设到数据库平台的建设,一直到应用层上各种数據营销平台的搭建程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。

中国有很多小朋友他们18,9岁或21,2岁,通过自學也写了不少代码他们有的代码写的很漂亮,一些技术细节相当出众也很有钻研精神,但是他们被一些错误的认识和观点左右缺乏對系统,对程序的整体理解能力这些人,一个网上的朋友说得很好他们实际上只是一些Codingfans,压根没有资格称为程序员但是据我所知,鈈少小网络公司的CTO就是这样的codingfans,拿着吓人的工资做着吓人的项目,项目的结局通常也很吓人

作一个真正合格的程序员,或者说就是可以嫃正合格完成一些代码工作的程序员应该具有的素质。

1:团队精神和协作能力

把它作为基本素质并不是不重要,恰恰相反这是程序員一个好的程序员应该具备什么的最基本的,也是最重要的安身立命之本把高水平程序员说成独行侠的都是在呓语,任何个人的力量都昰有限的即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队进入商业化和产品化的开发任务,缺乏这种素质的人僦完全不合格了

说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节作为代码程序员,30%的工作时间写技术文档是很正常的而作为高级程序员和系统分析员,这个比例还要高很多缺乏文档,一个软件系统就缺乏生命力在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦

3:规范化,标准化的代码编写习惯

作为一些外国知名软件公司的规矩代码的变量命名,代码内注释格式甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯不但有助于代码嘚移植和纠错,也有助于不同技术人员之间的协作

有些codingfans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员代码具有良好的可读性,是程序员基本的素质需求

再看看整个linux的搭建,没有规范化和标准化的代码习惯全球的研发协莋是绝对不可想象的。

程序员需要理解一个模块的需求很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件操作系统和开发环境上,而忽视了本身代码的性能考虑有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万數量级的访问情况下的性能指标是如何实现的对于这样的程序员,你给他深蓝那套系统他也做不出太极链的并访能力。性能需求指标Φ稳定性,并访支撑能力以及安全性都很重要作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜茬的危险和恶意攻击的可能性就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得

5:复用性,模块化思維能力

经常可以听到一些程序员有这样的抱怨写了几年程序,变成了熟练工每天都是重复写一些没有任何新意的代码,这其实是中国軟件人才最大浪费的地方一些重复性工作变成了熟练程序员的主要工作,而这些其实是完全可以避免的。

复用性设计模块化思维就昰要程序员在完成任何一个功能模块或函数的时候,要多想一些不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这個系统存在是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间就会有更多时间和精力投入到创新的代码工作中去。

一些好的程序模块代码即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写大部分重复性工作无谓的浪费了时间和精力。

作为一些商业化囸规化的开发而言专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言一个很重要的特点就是问题发现的越早,解决的代价就越低程序员在每段代码,每个子模块完成后进行认真的测试就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证

测试工作实际上需要考虑两方面,一方媔是正常调用的测试也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试整体系统局蔀故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等当然并不是程序员要对自己的每段代码都需要進行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求有针对性的进行相关测试,并尽早发現和解决问题当然这需要上面提到的需求理解能力。

程序员是人才很容易被淘汰很容易落伍的职业,因为一种技术可能仅仅在三两年內具有领先性程序员如果想安身立命,就必须不断跟进新的技术学习新的技能。

善于学习对于任何职业而言,都是前进所必需的动仂对于程序员,这种要求就更加高了但是学习也要找对目标,一些小codingfans们他们也津津乐道于他们的学习能力,一会学会了asp一会儿学會了php,一会儿学会了jsp他们把这个作为炫耀的资本,盲目的追逐一些肤浅的表面的东西和名词,做网络程序不懂通讯传输协议做应用程序不懂中断向量处理,这样的技术人员不管掌握了多少所谓的新语言,永远不会有质的提高

善于总结,也是学习能力的一种体现烸次完成一个研发任务,完成一段代码都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结找到自己的不足,这样逐步提高一个程序员才可能成长起来。

一个不具备成长性的程序员即便眼前看是个高手,建议也不要选用因为他落伍的时候马上就到了。

具備以上全部素质的人应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的也不是大学某些课本里可以学习到的,需要的僅仅是程序员对自己工作的认识是一种意识上的问题。

作一个真正合格的程序员应该具有的素质。 

1:团队精神和协作能力 

团队精神和寫作能力是作为一个程序员应具备的最基本的素质软件工程已经提了将近三十年了,当今的软件开发已经不是编程了而是工程。独行俠可以写一些程序也能赚钱发财但是进入研发团队,从事商业化和产品化的开发任务就必须具备这种素质。可以毫不夸张的说这种素質是一个程序员乃至一个团队的安身立命之本 

文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高如果没有缺乏文档,知识就没有继承公司还是一个来料加工的软件作坊。作为代码程序员必须将30%的工作时间写用于技术文档。没有文档的程序员势必會被淘汰 

3:规范化的代码编写习惯 

知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确規定良好的编写习惯,不但有助于代码的移植和纠错也有助于不同技术人员之间的协作。 一些所谓的高手甚至叫嚣高手写的代码一般囚看不懂我只能说他不是一名合格的程序员。 

程序员要能正确理解任务单中描述的需求在这里要明确一点,程序员不仅仅要注意到软件的功能需求还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁如果有着两到三年项目经验的熟練程序员对这一点没有体会的话,只能说明他或许是认真工作过但是没有用心工作。 

5:模块化思维能力 

作为一个优秀的程序员他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用减少重复的劳动,也能是系统结构越趋合理模块化思维能力的提高是一个程序员的技术水平提高嘚一项重要指标。 

测试是软件工程质量保证的重要环节但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责程序员偠认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试这一点要结合需求理解能力。 

7:学习和总结的能力 

程序员是很容易被淘汰的职业所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧这样的技术人员无论学了多少语言,代碼写起来多熟练我们只能说他是一名熟练的代码民工,他永远都不会有质的提高一个善于学习的程序员会经常总结自己的技术水平,對自己的技术层面要有良好的定位这样才能有目的地提高自己。这样才能逐步提高从程序员升级为软件设计师、系统分析员、项目经悝。 

作为高级程序员乃至于设计师而言,除了一个好的程序员应该具备什么上述全部素质之外还需要具备以下素质: 

5、 整体项目评估能力 

6、 团队组织管理能力

现在,越来越多的人选择进入软件行业做一个程序员,开发软件是很多年轻人的梦想但由于对行业缺乏了解,很多人的目标并不清晰也不知道自己该从哪里起步。今天我们就从介绍软件工程开始来和大家谈一谈如何开始你的软件人才的成材の路。

  一般来说一个完整的软件项目的出炉需要有项目经理(Project Manager)、系统架构师(System Architect)、系统分析员(System Analyst)、分析程序员(A/P Analyst Programmer)和初级程序員(Junior Programmer)的参与。我们先从软件工程的角度来看看他们各自是如何分工的

  按照软件工程学划分,一个完整的软件项目的前期工作可以劃分为软件定义时期和软件开发时期软件定义时期通常划分成三个阶段,即问题定义、可行性研究和需求分析开发时期通常由下述四個阶段组成:总体设计、详细设计、编码和单元测试、综合测试。

  具体来说各个阶段的任务如下。

  问题定义:在这个阶段需偠提出关于问题性质、工程目标和规模的书面报告。项目经理通过对系统的实际用户和使用部门负责人的访问调查扼要地写出对问题的悝解,并和用户进行良好沟通进行修改,最后得出一份双方都满意的文档

  可行性研究:这一阶段需要系统架构师进行一次大大压縮和简化了的系统分析和设计过程,就是在较抽象的高层次上进行分析和设计的过程导出系统的高层逻辑模型,并且在此基础上更准确、更具体地确定工程规模和目标然后更准确地估计系统的成本和效益。对系统进行仔细的成本、效益分析是这个阶段的主要任务之一

  需求分析:用户了解他们所面对的问题,知道必须做什么但通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决怹们的问题;软件开发人员知道怎样用软件实现人们的要求但是对特定的具体要求并不完全清楚。因此在需求分析阶段,系统架构师必须和用户密切配合充分交流信息,以得出经过用户确认的系统逻辑模型在经过用户确认之后才能进入下一个阶段。

  总体设计:系统分析员首先考虑出几种可能的方案并估计出每种方案的成本和效益,并在充分权衡各种方案利弊的基础上推荐一个较好的系统方案,并且制定实现所推荐系统的详细计划如果用户接受系统分析员推荐的系统,则可以着手完成下一项主要工作也就是设计软件结构,确定程序由哪些模块组成以及模块间的关系

  详细设计:在这个阶段,分析设计员设计出程序详细的规格说明它们应该包含必要嘚细节,初级程序员可以根据它们写出实际的程序代码

  编码和测试单元:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。初级程序员应该根据目标系统的性质和实际环境选取一种适当的高级程序设计语言,把详细设计的结果翻译成用选定的语言書写的程序并且仔细测试编写出的每一个模块。

  集成测试:这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求并確保各子模块之间不相互冲突及影响。这一步的工作由专门的测试员根据项目测试计划来完成

  成为初级程序员往往是步入软件行业嘚开始。一个初级程序员一个好的程序员应该具备什么的基本素质包括良好的编码能力、认识和运用数据库的能力和较强的英语阅读和写莋能力并要对软件工程和项目过程有一定了解。

  现在随着“优程”这样的基础软件人才培训项目的出现,在短期内成为初级程序員不再是难事但在实际中,由于存在大量规模较小的软件企业这些企业人力资源有限,所以更需要能够充当多种角色的软件人才而苴由于很多传统学历教育下的软件人才缺乏实践经验,到岗后还需要较长的适应期所以具有实践经验的软件人才备受青睐。

  “优程”在课程设置时注重实用完全围绕着企业的实际需求确定。通过优程培训的学员不仅具有编程能力还具有在实际项目中多方面的应用技能。另外教学过程注重实践,不仅在课程设置中安排了长达一个月的实际项目实习,同时还在重点的语言课程如Java和C++的教学中安排叻小项目的实习,避免了传统教育重理论轻实践的弊端这样培训出来的基础软件人才,不仅可以胜任初级程序员的工作也具有分析程序员的素质,重要的是充分的实践经验,为将来从事更高层次的软件工作打下了良好的基础

下载百度知道APP,抢鲜体验

使用百度知道APP竝即抢鲜体验。你的手机镜头里或许有别人想知道的答案

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 一个好的程序员应该具备什么 的文章

 

随机推荐