程序员需要具备的职业素养

标签: 程序员 需要 职业 | 发表时间:2014-03-28 18:14 | 作者:ghevinn
出处:http://blog.csdn.net
说起职业素养,可能大家脑子里马上反映出来的是西服领带公文包的精干白领形象,其实作为程序员来说,外在可能没有那么重要,更多的是内在职业素养,本期调查分享了两个研发小组的故事,让大家在统计数据的基础上进一步了解——什么是程序员需要的职业素养?

案例一:问题团队A

    D公司是个在发展壮大中的贸易公司,由于业务发展员工从刚开始的10人两年内增加到150多人,管理上出现了沟通效率低、对员工工作难以监控的现象。公司想近期上OA系统,以加强公司的工作效率、支持快速增长的业务。经过几次与F开发公司的沟通后,双方确定了合作意向。安排有两年开发经验的开发工程师苏成,作为项目经理带领三个开发人员,开始了D公司的OA项目。

    因项目不大,没有特别安排需求工程师,而由项目经理与客户确认需求后进行开发,初为项目经理的苏成信心爆棚:对外,他想当然地按照合同后附的简单需求说明草率开发;对内,他认为项目经理拥有绝对权力,任何关于开发的不同意见都听不进去。在第一期快结束时,苏成已与项目组成员发生了N次争吵,大家纷纷要求调离项目组,团队面临崩溃。

    在两个月未与客户沟通的状态下,苏成项目组向D提供了OA系统一期产品,按合同规定包括了:员工管理一项功能和其中四个子项。看完基本功能演示后,D公司的HR经理Helen几乎崩溃——OA系统中员工管理没与考勤部分联系起来,而且在系统中增加一个新用户需要五步,十分繁琐,很多功能也与公司需求相差极大。

    但是苏成却认为这些都是小问题,更让Helen气结的是要求增加一个小的统计功能时,他居然说做不了。后来才了解到,原来在开发时,项目组并没有留下文档,加之团队其它几个成员均已准备离开项目组,任何在此模块中的小小变化都会面临所有代码重新开发的局面,更不用说要新增什么功能了。

    最终苏成辛苦开发了几个月却没有得到相应地回报,客户不满意,项目组成员不满意,研发部总监更是对他的能力产生了怀疑,在几经努力拿到D公司的第二期项目开发合同之后,更换了项目经理。

点评:程序员如何以明确需求为基础与客户沟通?

    如果有专门掌握需求编写技术和经验的需求工程师作为客户和程序员之间的桥梁是最理想的状态。但以国内目前的国情,每个项目组都配有需求工程师的并不多。因此,正确地帮客户表达需求、正确地理解需求就成了程序员的基本素质之一。在此次调查中66.67%的被访者认为“能帮助客户正确提出需求”是程序员职业素养之一,可见在程序员内部已就此达成了相当的共识。认为“能使客户需求更完善”是程序员看重的职业素养之一,占到此次调查的55.13%,这说明超过一半的程序员认识到,帮助客户完善需求会节省双方的时间和精力。

那么如何才能提高自己的需求分析能力呢?以下分享几个有关需求的小技巧:

1.尽量提高自己的表达和沟通能力。良好的表达和沟通能力能在客户不能清楚表达需求时,融入到客户组织内部,了解客户的工作流程,与客户共同更好地、更准确地定义和分析需求。此次调查中60.90%的被访者认为沟通能力是程序员应具备的基本能力,但只有28.85%的程序员认为“表达能力”是程序员必备的基本能力。沟通固然很重要,但我们更应该进一步认识到准确表达自己的观点和意见也是成功沟通的基础之一。如果只“沟”而不“通”仍然是在浪费方面宝贵的时间。

2.应用多种方式了解需求。常用的方法有:问题分析法和建模分析法以及几种方法的结合。比如在问题分析法中应用面向对象的思想,与客户的员工谈话,访谈首先要面向工作流程,面向任务,面向角色,也就是用面向对象的思想帮助客户理清思路。

3.不臆测需求。如果有专门的需求工程师,有一点要特别强调,就是在编码过程中当需求不明确时,必须与项目经理或需求工程师及时沟通,程序员不能自作主张地猜测客户的需求。

4.不过度承诺。很多销售人员拿到项目,向客户大包大揽,甚至完全不顾公司的现有开发能力向客户承诺很多功能。在定义需求阶段,一定要向客户说明“什么是我们能做的,什么是我们应该做的,什么是我们不能做的”。很多时候过度承诺导致了新功能无法实现的同时,原有功能也受到影响。在此次调查中,有59.62%(近六成)的被访者正确地认识到对客户提出的不合理需求拒绝得当也是程序员职业素养的一个重要方面,这是非常难得的。

案例二:严格开发流程的团队B

    国资委某下属集团公司要上OA系统,C公司在研发能力、价格两个方面以综合分第一的成绩竞标成功。拥有10年项目管理经验的李石被任命为项目经理,并由他组建团队。李石对团队成员只有三个要求:分析能力、产品意识、较强的团队意识。

初选方案

    需求确定后,项目有两个方案:更流行的BS模式和传统的CS模式。李石安排两个程序员前期负责选方案,分别基于两种模式开发用户权限管理系统的原型,给大家做演示,并结合客户特别评估每一个架构的优劣。

分析了BS/CS的特点、结合客户的需求,他们发现:

1.从流程的定制来看CS结构更加利于客户方便地进行“可视化”定制;

2.从公文的“不可修改、保密性”以及电子图章的“不可诋毁性”需求来看,CS框架更加利于实现DRM技术和数字指纹技术实现;

3.从公文的打印需求与一般WEB报表的差异性来看,CS框架更加适合对打印格式的定制与控制;

4.从客户提出的内部电子会议的实时性来看,CS框架明显优于BS框架的非状态性,能够做到更顺畅、更及时的沟通;

5.从系统的安全性来讲,CS框架更加适合硬加密系统(如加密狗、U盘Key)与系统的对接。


产品开发

    在开发过程中李石强调了每个程序员的产品意识,取得了不错的效果。比如客户要求一个能上传文件的功能时,并没有提出UI需求,团队的B程序员并没有简单完成任务了事,而是做出一次能同时选取上传5个文件的程序。这种产品意识为客户使用带来方便,弥补了需求的不足。


团队配合

    在团队B中,每个程序员都做到了做完一个功能后与项目经理沟通进度、结果,并与负责测试的同事沟通,及时检测Bug,及时修改并及时回归。每个功能的实现都相对完善。及时的沟通与相互学习,还促进了团队磨合。

    经过8个月的开发,OA项目第一期完成基本功能顺利上线。C公司已顺利拿到了客户第二期的开发合同。


点评:成功的开发需要这样的程序员

通过上面的案例,我们为程序员总结出如下素养:

1.学习和分析能力。每个团队都在成长,作为程序员这个群体就更需要“与时俱进”。尤其是在开发这个知识日新月异的行业里。同时分析能力也是必不要少的。在调查中71.15%的程序员认为,学习能力非常重要,同时有57.69%的程序员认为,在技术方面有不同的意见时,处理妥当是程序员应该具有的职业素养。相信这个案例为我们提供了新的思路。

2.与内外保持良好的沟通,永远是成功的保证。及时汇报、沟通进展也可以在第一时间发现自己的偏差。数据证明59.62%的程序员认为“汇报项目进展时明确及时”是重要的职业素养。

3.产品意识。良好的产品意识可以大幅度提高开发效率,也能有效的弥补需求不足。例如,在案例二中,在做文件上传功能时,充分考虑了客户使用的方便性,弥补了需求中被忽略的细节。

4.团队意识。强烈的团队意识能帮助自己和整个团队更快成长,因为知识的分享是知识学习中一个最有效的方法,尤其是在程序员这个行当里。

5.编码规范和文档规范。据调查显示有分别由80.77%和68.59%的程序员认为编码规范和文档规范是程序员的必备职业素养之一。


文/橙子  点评/职业顾问 Leo


(来自:《程序员》杂志  http://www.programmer.com.cn/)

作者:ghevinn 发表于2014-3-28 10:14:00 原文链接
阅读:120 评论:0 查看评论

相关 [程序员 需要 职业] 推荐:

程序员需要具备的职业素养

- - CSDN博客编程语言推荐文章
说起职业素养,可能大家脑子里马上反映出来的是西服领带公文包的精干白领形象,其实作为程序员来说,外在可能没有那么重要,更多的是内在职业素养,本期调查分享了两个研发小组的故事,让大家在统计数据的基础上进一步了解——什么是程序员需要的职业素养.     D公司是个在发展壮大中的贸易公司,由于业务发展员工从刚开始的10人两年内增加到150多人,管理上出现了沟通效率低、对员工工作难以监控的现象.

程序员职业发展的思考

- - 外刊IT评论
从11岁开始一个已经十分明确的事情就是,我要成为一名程序员. 那一年我有了一台Commodore 64机器,开始在上面编写BASIC程序. 我十分喜爱编程,以至于不久之后用于编程的时间就超过了玩游戏的时间. 编程中有一种美妙和纯粹的东西是现实生活中任何事情都不能替代的. 即使要面对bug,时间限制和失败沮丧,编程仍然是美妙的.

程序员的职业素养

- - 云风的 BLOG
今天收到了《程序员》杂志 2012 年 12 期的样刊. 上面有我应邀写的一篇稿子,在这里为自己存个档. 程序员是可以当作一生的职业. 但首先,你需要热爱编程,而不是把它作为完成其他人生目标的工具. 既然计划投入数十年的人生,那么一定会不断的反思自己在哪些方面的努力是更有效率的. 换句话说,现在的你,和十年前的自己到底有哪些不同,十年后又怎样超越现在的自己.

走向产品是程序员的第三条职业通道

- - 博客 - 伯乐在线
千千万万的 程序员们一直困惑“程序员的前途如何”、“程序员工作到底能干多久”的问题. 目前比较普遍的认识,程序员的职业通道有两条进阶路线. 一条是技术路线,即由程序员、高级程序员、系统分析师,到架构设计师. 在这条路线上,立足于从业务模型到计算机软件模型的转换,成为高端的软件技术工作者. 另一条是管理路线,即由程序员,经开发小组负责人、项目经理,再到企业中高层管理者.

程序员编程需要多少个小时?

- - 搜索引擎技术博客
作者Krishna Kumar是一名软件开发者,曾多次发表过软件开发、程序、项目管理、商业管理等相关议题文章,原文来自《 How Many Hours Can a Programmer Program. 》现对此文进行编译,与开发者一起探讨如何合理、有效的管理好工作时间. Michael Arrington曾发表一篇 博文说,创业者必须加倍的努力工作,甚至不惜趴在办公桌上睡觉,这样才能成功.

每一个程序员需要了解的10个Linux命令

- - 极客521 | 极客521
码农网原创翻译,转载请看清文末的转载要求,谢谢合作. 作为一个程序员,在软件开发职业生涯中或多或少会用到Linux系统,并且可能会使用Linux命令来检索需要的信息. 本文将为各位开发者分享10个有用的Linux命令,希望对你会有所帮助. 以下就是今天我们要介绍的Linux命令:. 接下来让我们逐一来详细介绍.

程序员需要了解的硬核知识之CPU

- - SegmentFault 最新的文章
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU. CPU 的全称是 Central Processing Unit,它是你的电脑中最 硬核的组件,这种说法一点不为过.

成为一名优秀程序员所需要知道的那些事

- robin - cnBeta.COM
导读:编程虽是复杂活,但成就优秀程序员的很多因素和我们在学校中最早学到的相差无几. 尽可能使用开源,并且当你有能力的时候,要对其有所贡献. 聚全社会之智慧,胜过某些“大”公司之短视.

为何程序员完成最后20%的工作需要的时间跟之前的80%一样多?

- - 博客园_新闻
英文原文: Let me tell you why the last 20% of work takes the same amount of time as the first 80%. 这句话在程序员的工作中同样适用,到底是为何呢. Matija 用一个精巧的比喻揭示了个中道理. 其实这就好比在高峰期从郊外开车回市中心.

程序员要进入Google、Amazon这样的顶级IT公司,需要达到什么样的技术水平?

- - IT瘾-zhihu
现在北美求职市场飘忽不定. 能不能进入这些公司或毕业就上车,在一定程度上更取决于你的就业时间,而不是你的能力. 我当年在USC见过很多水人赶上Amazon扩招直接两轮OA拿Offer的,也有很厉害的大神赶上市场缩招半年没有一个面试,被ICC拒了的. 2020年疫情北美缩招,我在国内阿里的一个同学所在的组新招的应届生都是UCLA, UT-Austin,CMU 正统MSCS毕业, 在北美没找到工作的.