[程序员职业规划]个人理解:1.学好外语,尽量3年内学会说一口比较流利的外语 2.多读一些技术原理的书,学会分析业务,学会设计。但infosys不能提供分析业务和设计的锻炼,这时需要自己寻找机会啦。 3....+阅读
程序员的职业素养
说起职业素养,可能大家脑子里马上反映出来的是西服领带公文包的精干白领形象,其实作为程序员来说,外在可能没有那么重要,更多的是内在职业素养,本期调查分享了两个研发小组的故事,让大家在统计数据的基础上进一步了解——什么是程序员需要的职业素养? 案例一:问题团队A D公司是个在发展壮大中的贸易公司,由于业务发展员工从刚开始的10人两年内增加到150多人,管理上出现了沟通效率低、对员工工作难以监控的现象。公司想近期上OA系统,以加强公司的工作效率、支持快速增长的业务。经过几次与F开发公司的沟通后,双方确定了合作意向。安排有两年开发经验的开发工程师苏成,作为项目经理带领三个开发人员,开始了D公司的OA项目。 因项目不大,没有特别安排需求工程师,而由项目经理与客户确认需求后进行开发,初为项目经理的苏成信心爆棚:对外,他想当然地按照合同后附的简单需求说明草率开发;对内,他认为项目经理拥有绝对权力,任何关于开发的不同意见都听不进去。
在第一期快结束时,苏成已与项目组成员发生了N次争吵,大家纷纷要求调离项目组,团队面临崩溃。 在两个月未与客户沟通的状态下,苏成项目组向D提供了OA系统一期产品,按合同规定包括了:员工管理一项功能和其中四个子项。看完基本功能演示后,D公司的HR经理Helen几乎崩溃——OA系统中员工管理没与考勤部分联系起来,而且在系统中增加一个新用户需要五步,十分繁琐,很多功能也与公司需求相差极大。 但是苏成却认为这些都是小问题,更让Helen气结的是要求增加一个小的统计功能时,他居然说做不了。后来才了解到,原来在开发时,项目组并没有留下文档,加之团队其它几个成员均已准备离开项目组,任何在此模块中的小小变化都会面临所有代码重新开发的局面,更不用说要新增什么功能了。
最终苏成辛苦开发了几个月却没有得到相应地回报,客户不满意,项目组成员不满意,研发部总监更是对他的能力产生了怀疑,在几经努力拿到D公司的第二期项目开发合同之后,更换了项目经理。 点评:程序员如何以明确需求为基础与客户沟通? 如果有专门掌握需求编写技术和经验的需求工程师作为客户和程序员之间的桥梁是最理想的状态。但以国内目前的国情,每个项目组都配有需求工程师的并不多。因此,正确地帮客户表达需求、正确地理解需求就成了程序员的基本素质之一。在此次调查中66.67%的被访者认为“32313133353236313431303231363533e59b9ee7ad9431333332636332能帮助客户正确提出需求”是程序员职业素养之一,可见在程序员内部已就此达成了相当的共识。认为“能使客户需求更完善”是程序员看重的职业素养之一,占到此次调查的55.13%,这说明超过一半的程序员认识到,帮助客户完善需求会节省双方的时间和精力。
那么如何才能提高自己的需求分析能力呢?以下分享几个有关需求的小技巧: 1.尽量提高自己的表达和沟通能力。良好的表达和沟通能力能在客户不能清楚表达需求时,融入到客户组织内部,了解客户的工作流程,与客户共同更好地、更准确地定义和分析需求。此次调查中60.90%的被访者认为沟通能力是程序员应具备的基本能力,但只有28.85%的程序员认为“表达能力”是程序员必备的基本能力。沟通固然很重要,但我们更应该进一步认识到准确表达自己的观点和意见也是成功沟通的基础之一。如果只“沟”而不“通”仍然是在浪费方面宝贵的时间。 2.应用多种方式了解需求。常用的方法有:问题分析法和建模分析法以及几种方法的结合。比如在问题分析法中应用面向对象的思想,与客户的员工谈话,访谈首先要面向工作流程,面向任务,面向角色,也就是用面向对象的思想帮助客户理清思路。
3.不臆测需求。如果有专门的需求工程师,有一点要特别强调,就是在编码过程中当需求不明确时,必须与项目经理或需求工程师及时沟通,程序员不能自作主张地猜测客户的需求。 4.不过度承诺。很多销售人员拿到项目,向客户大包大揽,甚至完全不顾公司的现有开发能力向客户承诺很多功能。在定义需求阶段,一定要向客户说明“什么是我们能做的,什么是我们应该做的,什么是我们不能做的”。很多时候过度承诺导致了新功能无法实现的同时,原有功能也受到影响。在此次调查中,有59.62%(近六成)的被访者正确地认识到对客户提出的不合理需求拒绝得当也是程序员职业素养的一个重要方面,这是非常难得的。 案例二:严格开发流程的团队B 国资委某下属集团公司要上OA系统,C公司在研发能力、价格两个方面以综合分第一的成绩竞标成功。
拥有10年项目管理经验的李石被任命为项目经理,并由他组建团队。李石对团队成员只有三个要求:分析能力、产品意识、较强的团队意识。 初选方案 需求确定后,项目有两个方案:更流行的BS模式和传统的CS模式。李石安排两个程序员前期负责选方案,分别基于两种模式开发用户权限管理系统的原型,给大家做演示,并结合客户特别评估每一个架构的优劣。 分析了BS/CS的特点、结合客户的需求,他们发现: 1.从流程的定制来看CS结构更加利于...
一个程序员要具备那些基本素质呢
作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。 1:团队精神和协作能力 把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。 2:文档习惯 说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。
缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。 3:规范化,标准化的代码编写习惯 作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。 有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。 再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。 4:需求理解能力 程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。
性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。 5:复用性,模块化思维能力 经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。 复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。 6:测试习惯 作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。 测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。
当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试,并尽早发现和解决问题,当然这需要上面提到的需求理解能力。 7:学习和总结的能力 程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。 善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了...
做一名合格的软件工程师应具备的职业素质
我个人觉得做一名合格的软件工程师应具备以下八点职业素质。第一自信:万事开头难.有了第一次,就有下一次.那么第一次的信心从那来呢?
那应该保持一个平常的心,来面对挑战.要相信自己能够做的到.而且一定可以做的到.第二自学能力:在当今的软件业,技术不断更新,而老的思想,老的逻辑等等,
也不断被新的思想,新的逻辑所代替,所以在这中压力之下。不可能不迫使自己学习更新的技术来提高
自己的能力.使自己学习到更多的知识,经验,技能和创造性思维.这样才不会落后旁人,落后于社会.第三责任心:责任心.不仅对于软件,而是对于任何一件事,都得有责任心.敢做敢当,是做为男人的基本
素质。第四沟通:在软件这行沟通主要对两方面。第一点是对客户:我们做的东西都是回绕客户而做的.
通过深入的沟通和交流,能够了解到客户想要什么,不要什么.而不会使我们做的东西另客户觉得不满意,从而得到客户的信任
第一点是对团队成员:通过深入的沟通和交流,产生一种团队和睦精神,能够最大限度地避免完成上面交下来的任务.第五团队合作精神:任何一个团队,组织都是由众多人组成的协作系统。团队中人与人和睦相处,
相互信任的关系。能够避免成员之间不团结等事情的发生.为此。我们应该真正做到尊敬他人,关心他人,
理解他人正确处理好领导.同事之间的关系.形成和谐的人际关系.是整个团队开发能力,效率不断提高.第六动手能力:在牛耳的学习过程,学校主要培养我们的动手能力和实践操作能力,我们就应该利用这一点来不断提高自己的动手能力.
在以后的工作当中,我们还可以通过自学能力,来提高自己的理论知识.从而达到更高的水平.第七细 心:细心一般是女孩子的代名词.但是学软件的毕竟还是男的比女的较多.不可能编程序时做个女生做在你旁边吧.
那样也不现实.所以我们要学会细心,才能预防出现N多的BUG,才能编写更高效的代码,还可以给你人生带来意想不到的改变.第八上进心:应不断认识自我,认识外界日新月异的变化,不断给予自己新的奋斗目标。要勇于挑战过去的成功,不被眼前的
一点利益所诱惑。努力的发展自我,超越自我。
一个初级程序员应该具备哪些素质
现在,越来越多的人选择进入软件行业。做一个程序员,开发软件是很多年轻人的梦想,但由于对行业缺乏了解,很多人的目标并不清晰,也不知道自己该从哪里起步。今天我们就从说明软件工程开始,来和大家谈一谈如何开始你的软件人才的成材之路。 软件工程详解 一般来说,一个完整的软件项目的出炉需要有项目经理(Project Manager)、系统架构师(System Architect)、系统分析员(System Analyst)、分析程序员(A/P Analyst Programmer)和初级程序员(Junior Programmer)的参与。我们先从软件工程的角度来看看他们各自是如何分工的。 按照软件工程学划分,一个完整的软件项目的前期工作可以划分为软件定义时期和软件开发时期。软件定义时期通常划分成三个阶段,即问题定义、可行性研究和需求分析。
开发时期通常由下述四个阶段组成:总体设计、详细设计、编码和单元测试、综合测试。 具体来说,各个阶段的任务如下。 问题定义:在这个阶段,需要提出关于问题性质、工程目标和规模的书面报告。项目经理通过对系统的实际用户和使用部门负责人的访问调查,扼要地写出对问题的理解,并和用户进行良好沟通,进行修改,最后得出一份双方都满意的文档。 可行性研究:这一阶段需要系统架构师进行一次大大压缩和简化了的系统分析和设计过程,就是在较抽象的高层次上进行分析和设计的过程,导出系统的高层逻辑模型,并且在此基础上更准确、更具体地确定工程规模和目标。然后更准确地估计系统的成本和效益。对系统进行仔细的成本、效益分析是这个阶段的主要任务之一。
需求分析:用户了解他们所面对的问题,知道必须做什么,但通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员知道怎样用软件实现人们的要求,但是对特定的具体要求并不完全清楚。因此,在需求分析阶段,系统架构师必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型,在经过用户确认之后才能进入下一个阶段。 总体设计:系统分析员首先考虑出几种可能的方案,并估计出每种方案的成本和效益,并在充分权衡各种方案利弊的基础上,推荐一个较好的系统方案,并且制定实现所推荐系统的详细计划。如果用户接受系统分析员推荐的系统,则可以着手完成下一项主要工作,也就是设计软件结构,确定程序由哪些模块组成以及模块间的关系。
详细设计:在这个阶段,分析设计员设计出程序详细的规格说明。它们应该包含必要的细节,初级程序员可以根据它们写出实际的程序代码。 编码和测试单元:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。初级程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。 集成测试:这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求,并确保各子模块之间不相互冲突及影响。这一步的工作由专门的测试员根据项目测试计划来完成。 从哪里开始 成为初级程序员往往是步入软件行业的开始。一个初级程序员应该具备的基本素质包括良好的编码能力、认识和运用数据库的能力和较强的英语阅读和写作能力,并要对软件工程和项目过程有一定了解。
现在,随着“优程”这样的基础软件人才培训项目的出现,在短期内成为初级程序员不再是难事。但在实际中,由于存在大量规模较小的软件企业,这些企业人力资源有限,所以更需要能够充当多种角色的软件人才。而且由于很多传统学历教育下的软件人才缺乏实践经验,到岗后还需要较长的适应期,所以具有实践经验的软件人才备受青睐。 “优程”在课程设置时注重实用,完全围绕着企业的实际需求确定。通过优程培训的学员不仅具有编程能力,还具有在实际项目中多方面的应用技能。另外,教学过程注重实践,不仅在课程设置中,安排了长达一个月的实际项目实习,同时还在重点的语言课程如Java和C++的教学中,安排了小项目的实习,避免了传统教育重理论轻实践的弊端。
这样培训出来的基础软件人才,不仅可以胜任初级程序员的工作,也具有分析程序员的素质,重要的是,充分的实践经验,为将来从事更高层次的软件工作打下了良好的基础。
延伸阅读:
程序员的人生职业规划有人说是青春饭,程序员并不是吃青春饭的,而是典型的脑力劳动。推荐你去看两本书,一本是《Java程序员上班那点事》一本是《走出软件作坊》,会对你关于如何找工作有帮助。至于一到...
职业方面文章求谈谈职业素养的文章以谈谈职业素养为题写一篇谈谈员工责任与职业素养 在管理升级的进程中,我们引入了以“责任单”为特征的“问责制”,在公司内实行这种已经被证实是行之有效的方法,通过上下工序之间、上下级之间的互相监...
求谈谈职业素养的文章要突出“谈谈”,即谈出对“职业素养”有见地的认识。有“见地”,即不但涉及面要有深度、广度,而且要有独到的认识。具体怎么写,既要看你己经或可能掌握的资料,还要看你熟悉哪些领...
如何提高自己的职业素养1.敬业——只有善待你的岗位,你的岗位才能善待你。 2.发展——与单位的需求挂钩,才会一日千里。 3.主动——从要我做到我要做。 4.责任——会担当才会有大发展。 5.执行——保...
如何提升个人职业能力和职业素养一、职业能力和职业素养的作用 当我们踏进大学校园的时候,我们每个大学生都应该进 行自己的职业生涯规划,在进行职业生涯规划时都应该把握 好所愿与所能的关系。所愿是我们想...
教师的职业素养包括哪些内容(1)教育思想素养。良好的教育思想素养,是教师职业素养的核心内容。 (2)职业道德素养。教师的职业道德是教师在从事教育工作中应遵循的行为规范和准则。它是教师道德结构中的...
音乐教师的职业素养多方面提高音乐教师的职业素养通过对《走进新课程——与课程实施者对话》这本书的阅读,我对诸如为什么我国基础教育课程已经到了非改不可的地步;如何理解本次课程改革的六项具...
如何提高教师职业素养与职业道德如何提高教师职业素养与职业道德,如何加强教师的职业道德建设:我们每一个人都知道教师不仅传授文化知识,而且还具有塑造人们的心灵。思想和品格的职能和作用。教师要成为名副其...
职业素养的概念是什么职业素养的概念是什么,什么是职业道德素质:一、职业素养的概念:职业素养是人类在社会活动中需要遵守的行为规范,是指职业内在的规范和要求,是在职业过程中表现出来的综合品质,包含...