现在的位置: 首页 > 综合 > 正文

软件开发人员发展的几个阶段和问题

2013年09月01日 ⁄ 综合 ⁄ 共 9077字 ⁄ 字号 评论关闭

进入IT的人员都是基本素质不错的人员,但IT产业似乎总是缺少合适的开发人员,为什么会产生这样现象,关键是缺少合适的开发人员,也就是说我们并不缺少开发人员,而是确认高级或者说专业的人员,从而使我们的整体人力优势无法体现出来,在这里说一下我自己在工作期间对软件开发人员的发展过程的一些感受和体会。
    首先,大致的说一下自己给IT人员发展过程的分类,以及和工作时间的大致关系(以下观点属于个人观点)
    阶段名称              工作年限 
   1入门阶段          本科毕业1-2年以及刚毕业的研究生
   2中级人员          本科毕业3-4年以及研究生毕业1-2年
   3高级人员          本科毕业5-6年以及研究生毕业2-3年
   4架构师            本科毕业7-8年以及研究生毕业3年以上 
   5项目管理人员      本科毕业9年以上以及研究生毕业4年以上

   这是根据我的经验做的一个大致的阶段以及和研发人员工作资历的一个简短的对应情况。关于这个对应关系有几点需要说明,
    1 本科毕业是指软件工程专业,或者相关专业,一些大学的计算机科学等专业和软件工程专业是有很大差别的,比如软件工作专业强调数据结构、算法、软件工程、操作系统、数据库设计概论等专业课程的学习,而其他计算机相关专业是没有这些课程的,其中数据结构、算法、软件工程对开发人员的工作能力和发展影响比较大。
    2现在的本科和研究生虽然数量增加了不少,但从整体能力上来讲水平下降了不少,这和整个社会风气以及自身的素质有关。总体上将,现在的研究生的工作能力和10年前的本科差不多,现在的本科和原来的大专差不多。
    3 博士学位我没有加进去,主要是博士的研究方向太专,一旦单纯的软件行业的博士比较少,多是其他行业的专业博士,这些人的特点是一个整体素质比较高,有很多人,在做开发的时候对软件专业的了解比很多软件专业的硕士要精通很多,但更多的对软件开发的细节重视不够,而往往是这些细节会给项目带来很大的风险,所以不太好做一个标准来说。
    4项目管理人员是我写的最后一个。这个职位和其他的职位似乎不是一个系列的,但在实际工作,技术人员最终的发展都是这个职位,如果你有很好的技术背景和项目经验,成为一个项目管理人员不是一个很难的事情,但如果没有扎实的技术基础容易出现外行领导内行的现象,结果是上级压,下级反,两面受气。
    好了废话说了不少,开始说正题吧。评价一个开发人员有很多方法,我自己一般会从几个方面评价一个开发人员工作能力(只评价能力,而不评价态度,实际工作中开发人员的工作态度对工作能力影响是很大的,这一点大家千万要注意)。A代码编写能力,B设计能力,C调试能力,D文档编写能力,E调研能力,F代码阅读能力,作为高级技术人员还需要G项目管理能力(包括沟通能力,项目控制能力等)
    我们以本科毕业的工作人员来讲述开发人员的不同发展阶段以及相关表现吧
    1入门阶段          本科毕业1-2年以及刚毕业的研究生
     处于入门级别的工作都是刚毕业不久的大学本科学生,一般来说他们没有太高的工作能力,各项技术能力是他们的弱项(中国的教育的确很失败),他们的优势是在于他们的心态,现在的本科一般来说都了解自己的就业情况,所以你一旦给他们一个机会,他们往往会抓住不放,努力地去工作。如果真能努力的去工作,2-3年以后他们的实际工作能力往往比刚毕业的研究生要强很多。好了具体说一下。
    缺点:
       1代码编写能力差,一般在大学4年的全部代码行在1-2万行以下(这个数量在10年前的本科是无法毕业的),另外一个重要的问题,单个程序的代码行比较少,基本在1千行左右,缺乏大代码复杂程序的编程经验,而在实际工作中2-3千行是不可能是一个有效的系统的。由于代码量少,他们对很多理论的理解基本上基于纸面上的。由于对基础理论的忽视,造成了他们在开发的时候急于编码,而不是进行设计,这样做的效果就是编写了一大堆鸡肋代码。这对于其他开发人员来说简直就是灾难,而别人对他们代码的评价又直接打击了这些人员工作信心。
       2设计能力,虽然现在的代码开发环境比10年前方便了许多,但由于代码量的限制,他们对系统的整体结构和异常情况缺乏清晰的认识,他们设计的系统在正常使用的时候一般可以正常运行,但一旦遇到异常情况则完全无法使用,而产生的问题,严重的时候不但会影响自己,而且会影响其他模块,甚至造成整个系统的崩溃.所以一般不应该让他们做太大的系统设计,另外需要格外说明的一个问题,对设计方法的使用是他们的一个很大的欠缺,比如设计数据库结构的时候采用拍脑门法,设计面向流程的程序不会使用流程图,设计面向对象的时候不会使用UML都是他们的特点。
       3 会编码,不会调试,不会发现问题,不会分析问题发生的原因,和排查错误。在测试人员将问题提高给他们的时候,他们一般的表现不是首先检查自己的代码,而是将问题归给别人,什么测试人员测试数据不规范用户不会这么变态输入这些错误的数据,什么这是上边接口传过来的数据,他传错了,我也没有办法处理等等。即使确定是他们的问题,怎么去重现这个问题,定位这个问题发生的地点的方法和手段是他们缺乏的,往往是一筹莫展。
       4基本没有文档编写意识和能力,仿佛项目的最后成果就是代码,不知道文档可以起到什么作用,也不知道如何编写,解决问题,讨论问题最爱用的方法是拍脑门法和直接交流,所以你在项目进入阶段往往会看到几个新开发的人员在一起吵得一塌糊涂。而讨论的内容无非是,上回说好了是这么做,怎么现在又变了,或者,你不给我什么东西,我的功能就做不下去了,等等。。。而这些东西其实在是方案讨论和编写相关文档的时候就应该已经解决的问题了。由于没有文档编写能力,他们往往无法描述一个商业流程或者程序处理流程,(有经验的开发人员是可以在不借助文档的情况下直接给你写出来这些流程的,这些流程经过思考和文档编写过程已经映入了他们的大脑中)。
       5调研能力,刚参加工作的开发人员是不应该去做调研工作的,做调研工作的技术人员应该是项目组中技术能力最强的工作人员,可惜在实际中却不是这个样子,很多刚入门的技术人员没有经过任何培训就被派去做调研,做系统该调研什么内容,如何和客户进行有效的交流,或者真实的需求(而不是表面的肤浅的需求)。如何将这些需求用文字正确的无二义性的表达出来,都是问题,而那种40-50页的需求文档是一个项目失败的第一个信号。
       6 代码阅读能力,这里说的代码阅读能力不是说在阅读什么《java小程序》之类的书的时候对书中的代码的理解,对于一个好的开发人员来说,真正的代码阅读能力是你能否阅读那些真实的系统的代码,甚至在没有任何技术文档和程序注解的代码的阅读,能否通过对这些代码的阅读了解系统的架构、系统的操作过程以及发现程序中的错误,这种阅读代码的能力是非常重要的,不过可惜的刚毕业的开发人员代码阅读能力基本为零,一个能很好理解《java小程序》的代码的入门级的开发人员已经很不错了。让他们直接阅读2000行以上的应用系统的代码基本是不可能的。
    说了这么多,估计很多刚参加工作的技术人员要气死了,现在让我们看一下他们的优点吧。
        1心态好,能够接受别人的意见,特别是老鸟们的意见(当然对对同级别的人可能不行),不要小看这一点,是否善于接受别人的建议对开发人员的成长是极为重要的,而入门级别的开发人员在这一点往往是做得最好的。
        2 有工作热情,肯加班。加班不是一种好的工作方式,但对于刚入门的开发人员来说,却是很重要的事情,效率*时间=工作成果。如果效率很高,工作时间少,工作成果也不会差,但既然我们的新工作人员无法一下提高工作效率,却可以提高工作时间的方法来保证工作成果,另外,随着工作时间的增加,工作经验也是同步增加的,而这也会使你的工作效率逐步提高,让我们假设一个工作人员每天比别人多工作1小时来计算,一年220个工作日,如果你可以坚持你比别人的提高是多少倍大家可以自己计算一下。(为什么菜鸟看老鸟是什么高不可攀,你算一下就知道了)
         3你可以犯错误,新人必然犯错误,甚至是很低级别的错误,而且由于你年轻,你会有更多的机会,所以这个阶段的技术可以利用自己的有时尝试各种方法。
    以上就是人门级别的IT开发人员的一些特征,对于如何迅速地帮助他们成为一个好的开发人员我们在以后的文章里介绍吧    
    2中级人员          本科毕业3-4年以及研究生毕业1-2年
     中级开发人员一般都有了一定的编码经验,一般来说,如果你的工作比较饱满的话,一个中级的开发人员应该有7-8万行左右的代码量,他们对某种语言的使用已经比较有经验了,对系统架构有一些了解,至于文档,他们现在只编写过一些无用的文档,为什么说他们编写的文档是无用的,主要是指他们对文档的作用没有更深刻的理解,他们可以很清晰地说出在开发过程中需要那些文档,但对这些文档应该包括那些内容,这些内容对以后的开发能够起到什么作用却不甚了解。也就是这个原因,他们编写的文档更多地是为了对付单位的检查,而不是对开发有什么实际作用,很多开发人员就是因为这个问题一直没有克服,使得他们一直处于中级开发人员(有时候会持续几年甚至十几年)。好了,说说中级开发人员的一些特征吧。
     1代码编写能力:重视语言的差异,是JAVA还是。net好,是他们热衷讨论的问题,但对编程的一些基础理论的却很少重视,他们由于在3-4年的时间里一直使用开发语言,对某种开发语言会比较精通,而且可以在短时间内生产大量的代码,比如在一天之内编写1-2千行的代码对他们来说是很正常的事情,但代码的质量如何就不好说了,出现这个问题的原因有时候大致有两个,一个对代码编程规范的了解,比如什么是高内聚低偶合,如何提高代码的复用等问题,作为一个开发人员如果不考虑这些问题,其代码质量是不可能很高的,另外一个问题就是调研、设计质量对编码质量的影响,我们开发的实际情况是开发人员往往是调研/设计/编码一勺烩的,如果前边的调研和设计问题多多,必然降低代码的有效性和质量。最后说一个就是是否有快速掌握一种开发语言的能力对中级开发人员来说一个很重要的能力。如果你无法快速学习一种新的开发语言并使用它进行新系统的开发,你恐怕还不是好的中级开发人员。
     2设计能力,应该说设计能力是中级开发人员和初级开发人员的主要区别。但实际情况却不容我们乐观。我们的中级开发人员的设计能力现在对项目的制约,对自己的以后的发展都产生了很大的阻力,其中最主要的表现就是设计工作的不正规。有时候简直如同儿戏。让我们举几个例子吧。
     1不会使用正规的设计方法,在面向过程的设计不会画流程图和DFD图,面向对象的设计方法不会使用UML,设计数据库不知道3NF和BCNF等,最好使用的方法就是拍脑门来进行各种设计。
     2各种设计方法混用,一会儿使用面向过程的方法,一会儿使用面向对象的方法,还有就是将流程图和系统结构图结合起来一起用,总之最好的设计是一个四不象,如果你问他为什么这么做,他总会告诉你这样画清楚,其实这都是对基础的设计方法掌握不好的表现。
     3 层次结构不清晰,单一层次复杂,中级开发人员一个衡量的标准就是是否可以独立完成一项任务,这是初级人员和中级技术人员标志性的差别,独立处理问题,最主要的一个技能就是是否可以将复杂问题简单化,而简单化的最常用的方法就是将问题分不同的层次,简化同一层次的复杂度,从流程图的设计上来看,就是根据问题复杂度不同,分层次画图,而同一层次处理的模块不应该超过8项,这样你可以很好的掌控你的程序。如果系统的确很复杂,可以不断将处理模块细化下去,直到最低层的处理模块。
     4设计无法和代码结合起来,无论是采用那种设计方法,好的设计都可以代码对应起来,如果你做的设计报告很详细,设计报告甚至可以和代码逐行对应起来的,如果你不能做到这一点,只能说明你对系统的理解和设计是有问题的
     5 无法说明处理的详细流程,所谓详细流程是指是否可以说出来计算机在做一个事情的步骤,如果你的可以说出来计算机每一个处理步骤(最详细的步骤可以细到变量的赋值),如果你真能说的出来,说明你对系统有了详细的了解和考虑,一般来说你编写的代码出问题的可能性比较小。顺便说一句,这也是概要设计和详细设计的一个检查方法。
     6不考虑系统出现异常的情况以及异常情况的处理,这里有两个问题,一个是你是否熟悉客户的商业流程,以及处理方法,如果你不了解客户的商业流程,你很难发现有那些异常情况以及这些异常的处理方式,而在实际情况这些异常情况总会出现,如果缺乏这些问题的考虑那你就准备不断的修改你的代码吧。
     7接口问题的考虑,以及设计是体现开发人员能力的一个方面, 
     在中级开发人员的思维中,总会出现用自己的想法替代用户的实际需要,比如,他们总是说,我认为客户应该是怎么怎么样,或者说,客户需要什么什么功能等,用一些模糊,不确定的语句描述系统是中级人员一个特征,而这些模糊的语言是系统开发失败的一个标志。
     3 文档编辑能力:作为中级开发人员,你是否在系统开发的时候可以不编码而只用文档就完成你的设计工作?我想很多人是做不到这一点的,在我们的实际开发环境中,似乎开发能力就是指代码编写,但实际上文档的编写能力才是最重要的,如何编写文档,如何让自己编写的文档让别人看得明白,如何让自己编写的文档成为真正的有效文档,这都是中级开发人员应该具备的基本素质,而文档编写的好坏一个体现了你的设计能力(没有好的设计能力是不可能编写出好的设计文档的),另外一个是体现出了你的文字功底的,如果你只能做,而不会表达,你怎么可能带领一个团队去完成一个复杂的项目。
    4调研能力:80%软件项目的失败是由于调研的问题,这个统计结果充分说明了调研能力在软件开发中的重要地位,一般来说调研工作是应该由一个项目中最富有开发经验的工作人员来完成,但可惜的是,在我们的实际开发中却往往不是这个样子。如何调研?调研那些内容?调研的步骤有那些?调研需要细致到什么程度?这些问题都应该是很明确的,否则你无法进行有效的调研,我们的开发人员一般在调研系统的时候经常提交几十页的调研文档,如果可以有一百多页就认为很有成就了,这就是中级开发人员在调研中表现(如果能提供一百多页的调研报告一定是不错的中级开发人员了),实际上这种程度的调研报告很多地方是很模糊的,这种模糊的调研报告无法满足实际开发的需要,而在开发过程中又很难进行补充调研,所以在设计和编码阶段会表现出很明显的一些现象,比如开发人员在设计阶段拍脑门决定功能或者在编码的时候不断发生争吵都是需求不完善的表现。

     5调试能力:工作3-4年的开发人员应该已经掌握的调试的基本方法,但他们面临的问题是否可以掌握和别人联调的能力,几个人合作开发,接口问题,问题定位对中级开发的考验都是比较大的,特别是稳定的确切的发生地点的定位的能力是体现中级开发人员的能力的标志,另外就是你帮助其他人进行调试的能力,对一个你了解不多的代码中进行调试,发现问题发生的规律,对一个中级开发人员是很重要的,特别是调试那些不规范的代码的时候,是中级开发人员经常要做的事情。
     6代码阅读能力,中级开发人员有一定的代码阅读能力,否则他无法和其他开发人员进行联合开发和联合调试,但中级代码人员缺乏的是快速阅读能力,和其他语言的阅读能力(指那些未学习过的语言)。所以中级技术人员最怕开发平台的变化。
     说了这么多。关于中级技术人员说一点自己的的看法。中级技术人员是一个承上启下的阶层,一方面他们要完成自己的工作,另外一个方面他们要完成技术的传播,带人门级别的工作通常是他们的正式或者非正式的任务之一,但令人遗憾的是:由于他们的技术水平的现在,往往让新技术人员走更多的弯路。如何提高自身的技术水平,是他们面临的最主要的问题。另外要格外强调的一点就是方法论(做事情的方法)的掌握往往比做具体事情更为重要,不过这一点是很多技术人员忽视的一个问题,这个缺陷造成了我们的技术人员总是在一个层次上低水平循环,而不是螺旋式上升。由于没有掌握做事情的方法,中级技术人员总是有一点怕接受新的,自己不熟悉的东西。由于自己技术基础不牢靠,会遇到多次技术生涯的失败,失败的开发经历以及不知道失败的原因,无法找到解决问题的有效方法,造成了大量中级实际人员离开技术岗位(别跟我说编码只能做到30岁,我见过很多50。60岁的软件开发人员)。而正式由于这一个级别的技术人员少而且技术水平不能符合开发的要求(包括技术上和其他方面)。使得我们的软件开发流程很不规范,而这种不规范往往又会造成项目的失败,从某种程度来说,中级技术人员的技术水平的提高和保证一定数量的合格的中级技术人员是保证项目成功、企业发展的重要因素。
    下边说一下对中级技术人员的提高技术水平的一些个人的看法:
    1重视方法论
    中级人员和初级人员最大的区别就是中级开发人员应该掌握了一定的开发方法而不仅仅是某一个工具的使用,要做到知其然知其所以然。如果你没有关注你的工作方法的改进,拿你只能是做一个低层次开发人员,不断进行低水平循环,而这种低水平循环很容易让你丧失对开发的兴趣。比如无论是那种开发方法都存在对问题的抽象,如何抽象出问题的本质就很重要了,很多开发人员在讨论的时候不会抽象,或者采用的抽象方法不对,成了空对空导弹。在比如如何降低问题的难度,在你写各种技术文档以及代码开发的时候是否能够将问题分层次,好的层次划分不但可以降低问题的难度,而且可以增加系统的灵活性,在系统需求发生变化的时候可以降低解决问题的难度,这些问题都是属于方法论的问题,在说一个最简单的问题,如何编写文档,如何不落下任何东西,如何保持文档结构的清晰,如何让自己的文档不成为枯涩难懂的所谓的纯技术文档,如何检查文档这些都是有一些方法和窍门,你是否掌握了这些方法直接关系你的以后技术生涯的方法,的确是不能不重视的问题
    2注意交流,不要搞技术封锁
    一招鲜吃遍天,这是中国的一句古话很有道理,精通一门技艺对我们这些开发人员的确很重要,但如果把这句话理解为对别人的技术封锁就不对了。由于有二,第一现在的技术发展很快,在IT行业基本不存在会一种技术可以吃一辈子的情况,而网络发展使你的封锁基本成为一个不可能。说一个我自己的技术人员的故事吧,2005年的时候,我招聘了一个测试人员,年底的时候我让他学习QTP自动化测试技术。这个同志学习很认真,很快掌握了这个工具的使用,后来我让他总结一下经验写一个总结,将自己在学习的时候遇到的问题做一个总结。奇怪的是他很长时间没有写出来(他平时的工作效率不是这样的),后来在一次聊天的时候他才告诉我真实的原因,原来是他母亲告诉他,如果这些东西都写出来并且发表的网络上,怕对以后的有影响。知道这个事情后我很明确的告诉他,首先QTP这个东西是一个一时性的工具,而不是一世的工具。我工作15年来,开发平台经历了DOS-WIN30-WINNT-WIN2003,原来在的开发工具和代码现在已经不能使用了,所以根本没有必要去保密。另外如果愿意将自己的知识和其他人共享,你可以扩展自己的朋友圈,为自己的技术生涯创造更好的环境。后来他还是完成了QTP使用的总结,当时一共回答了80多个在使用QTP的时候会遇到的问题。这个电子文档他发表在了www.51testing.com上的测试论坛。结果也不错,首先引起了斑竹的注意,把他从初级战友提升为高级战友(我到现在还是初级战友,哈哈)。其次有很多朋友问他问题,后来北京的一个朋友约他周六、周六去讲课,500元/日。哈哈,效果好的让人惊讶。所以作为中级技术人员,要各位注意和他人交流,不断总结自己的经验和别人共享,单纯的技术封锁无论对个人的发展还有是对项目团队有没有任何好处。  
    3他山之石可以攻玉
     要成为高级开发人员,有两个方面的知识是必须具备的,一个是专业知识,包括对开发平台/工具的了解,对开发流程的理解和使用(软件工程)。另外一个方面就是对客户的商业流程的理解。如果只了解单纯的开发知识很难成为好的高级技术人员。我们现在的应用系统都要和具体的应用相结合才可能成为一个真正实用的使用的系统。比如做办公自动化系统你不了解国家机关的公文流转的规矩,做ERP系统不了解财务系统、物流管理,做手机开发不了解通讯系统、用户使用习惯都不能保证你的系统是符合用户的真实的需求的,所以作为中级开发人员如果要向上发展成为高级技术人员除了对开发专业知识的了解,会需要对开发设计的行业知识,行业规范多了解,而这种了解一方面要通过各种行业文件来了解,另外一个重要的方面通过和客户交流去了解。
    4注意情商的培养
   作为中级开发人员,其交往的人群比初级开发人员的范围要广得很多,从大范围来划分,有客户、公司管理人员、技术人员等,而每一种类型人员都可以细分比如技术人员就有,高级技术人员,同级别技术人员(中级技术人员)。低级技术人员,由于不同角色的差异,交往的内容和方式都有很大的不同。即使同一类型的人群,由于每个人脾气秉性的不同,交往的方式差异也很大,作为中级技术人员能否和其他合作者,处理好彼此关系,善用其他的力量,是起进一步发展的关键,而你的情商在这个时候往往比你的智商要重要的多。
  总之,中级开发人员情况往往会决定一个单位和部门的发展,他们是公司发展最中坚的力量,是否会引导他们不断进步是一个公司和部门领导要格外注意的问题。在我自己的开发经历中,中层人员的流失不但是某一个公司或部门的问题,而是整个IT行业的问题,很多开发人员在没有经过训练就不得不承担中级开发人员要承担的工作,由于综合能力的问题,等待他们的往往是一个又一个的失败,而在看到很多做销售的同龄人,无论在收入和地位和自己的差别后,纷纷转行,这又进一步造成了中级技术人员的流失。中级技术人员整体素质和人员的流失才是中国IT人员真正的痛

抱歉!评论已关闭.