最近在了解一下关于开发的事情,觉得一些文字对开发人员的总结和思考相当不错。
进 入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接口问题的考虑,以及设计是体现开发人员能力的一个方面,
在中级开发人员的思维中,总会出现用自己的想法替代用户的实际需要,比如,他们总是说,我认为客户应该是怎么怎么样,或者说,客户需要什么什么功能等,用一些模糊,不确定的语句描述系统是中级人员一个特征,而这些模糊的语言是系统开发失败的一个标志。
5调试能力:工作3-4年的开发人员应该已经掌握的调试的基本方法,但他们面临的问题是否可以掌握和别人联调的能力,几个人合作开发,接口问题,问题定位对中级开发的考验都是比较大的,特别是稳定的确切的发生地点的定位的能力是体现中级开发人员的能力的标志,另外就是你帮助其他人进行调试的能力,对一个你了解不多的代码中进行调试,发现问题发生的规律,对一个中级开发人员是很重要的,特别是调试那些不规范的代码的时候,是中级开发人员经常要做的事情。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!