已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
转软件开发人员的能力模型不知觉做软件开发已经有6年了,回看自己的经历,可以说是相当有成就感,6年中通过不断的学习的实践,从一个菜鸟成长为一名软件架构师,这个过程可以说充满乐趣。通过学习各种理论、技术、方法,并有在实践中应用,观察它们的效果,思考它们之间的关系,再把不同事物融合在一起,形成一个完整的能力体系,以此来挑战更艰巨的软件开发任务。我现在是一个框架师,所以看问题喜欢从总体架构出发,所以我认为人的能力也有一个架构存在,每个的能力架构都不一样,有的人能力架构比较合理,有的人则不那么合理,合理的能力架构能让较少能力元素(知识、技能、方法等)发挥出较大的作用,不合理的能力架构会浪费人的能力,让所学无所用。什么样的能力结构是比较合理的呢,这不是一个简单的问题,这里我根据自己的经验总结提出一个参考模型,这个参考模型采用我们常见的分层架构模式。我认为一个软件开发人员的能力大体应该分为四个层次:最高层:过程控制和管理第三层:方法、思想和理论第二层:具体技术、语言和工具最底层:基础原理、基础知识层以层之间存在一定的关系,上一层必须以下一层为基础,而上一层又反过来影响下一层。最底层是基础原理和基本技术:包括计算机原理、电路、数据结构、数据库原理、编译原理、操作系统等。这些知识是很基础的有了一定的基础才能更好的学习其它能力第二层是具体技术、语言和工具,包括各种编程语言、开发环境、数据库、开发框架等。每显然,一般情况下要学习第二层的内容必须要有以最底层的能力为基础,当然也有人没有任何基础就能学习第二层的能力,但是一般这样学习效果很差,知其然不知其所以然,遇到一些问题也会不知所措。另一方面第二层的学习又会反过来影响最底层的能力,它能巩固基础知识的学习,能暴露出你在基础方面的不足,还能驱动你对基础知识的学习。当我还是个程序员的时候,学习的内容主要集中在这两个层次。第三层是方法、思想和理论,包括面向对象思想、设计原理、设计模式、需求工程、UML等,同样第三层的能力也要以第二层为基础,具个例子来说,要学习面向对象的设计方法首先要学会一门面向对象语言还要会使用case工具,同时第三层的能力又会反过来影响第二层,好的方法能更好的发挥你的技术,还可以弥补技术的不足,举几个例子来说,设计做的好是不是写起程序来很轻松,断言、单元测试这些方法能让代码的质量达到前所未有的高度。最高层是过程控制和管理,这个层次的能力通常涉及时间跨度和团队协作,包括项目管理的能力,软件过程的控制能力、版本控制的能力、需求管理的能力等。同样这一层次的能力也要以第三层的能力为基础,举例来说,如果软件没有好的架构,那不管采用什么过程最终都会一团糟,而良好的设计能力,再加上迭代的开发过程、严格的版本控制,就一定能开发出优秀的软件。通过这个模型我们不难看出,一个优秀的软件开发人员各个层次的能力应该是比较均衡的,并且这些能力不应该是独立,它们应该能组合在一起发挥出整体性的威力。通过这个模型也可以指导我们的学习过程,一般地,我们应该先掌握下一层的能力再掌握上一层的能力,但又不能只停留在下一层。我见过不少大学生,刚开始工作就学习项目管理,还一些做项目N年的前辈,能够把类库倒背如流,还不知什么是UML、什么是内聚、藕合和粒度。我觉得这都不是好的现象,我认为能力的学习也应该采取迭代的方式,我们先要打基础,但也不需要打一个完美的基础,我认为打个三成就够了,然后就可以尝试学习上一层的的能力,可能你会掌握一成上层的能力,这时会发现基础还打的有问题,然后再带着你的问题来补基础。如此反复,当你上一层的能力也达到三成时,又可以尝试再上层的学习。这时就把上一层当成是基础再上一层当成是上层。如此反复直到你爽了为止,哈哈。=很不错的一篇文章, 感觉自己现在就出在2,3层间,但整个过程是迭代式学习的,可以来回跳跃学习,不懂的在回到下层来补。从业务理解上分层:最低层:实现简单的提交,保证数据能进去。中:学会理解单个模块,并且能够考虑到一些安全性。高:能够把整个业务有效的和单个模块结合。最高:能够多个纬度得理解业务,并正确有效的架构设计,并且产品化,能够指导整个行业发展。自己1,2层的很多基础还不是很扎实。当涉及到一个大点的系统,模块多点,感觉又没办法控制住了,线程太多,服务设计的很乱,这些应该在3层来学习。比较难,多看看不错的源码应该有助于这一层的学习了(如:Linux kernel, MySQL, Apache, Berkeley DB, .)。项目经理的职业生涯与能力模型2009-09-12 作者: 本文介绍了职业生涯管理和胜任能力模型的应用,分析了与项目经理职业生涯对于的胜任能力模型,并结合在IBM公司和惠普公司的项目经理职业生涯管理,建立了中国IT系统集成和服务行业的项目经理胜任能力模型,说明了该模型在中国IT企业的应用过程。1.项目经理的职业生涯与能力模型1.1.什么是职业生涯管理? 职业生涯管理(Career Management)是美国近十几年来从onmouseover=displayAd(4);onmouseout=hideAd(); onclick=linkClick(4);人力资源管理理论与实践中发展起来的新学科。所谓生涯,根据美国组织行为专家道格拉斯霍尔(DouglasT.Hall)的观念,是指一个人一生工作经历中所包括的一系列活动和行为。职业生涯则是根据对每个职业的长期从业人员的工作经历中包括的活动和行为的概括。职业生涯管理就是通过研究,归纳分析不同职业的活动和行为,为从事该职业的人员提供清晰的发展方向和成长路径,加速技术人才的成长。 职业生涯管理有两个层面: 一是个人行为,即员工个人自发的自我职业生涯管理。关注自我发展的员工,根据自己理想选择职业,并分析该职业生涯的活动和行为,规划自己在该职业的发展计划。二是组织行为,即企业主导的职业生涯管理。企业建立职业生涯管理体系,帮助员工落实员工职业生涯发展计划。企业的职业生涯管理体系的目标是达到企业人力资源需求与员工职业生涯发展需求之间的平衡,并创造一个高效率的工作环境和引人、育人、留人的企业氛围。1.2.为什么出现职业生涯管理?职业生涯管理的兴起,从上个世纪80年代开始。因为激烈市场竞争的企业发展环境的动荡,企业管理者开始鼓励员工“管理自己的职业”,并逐步淡化几十年来主导的“终身”雇佣模式。例如一直奉行“不裁员”的IBM公司在上个世纪80年代末和90年代初,也进行了大规模的裁员。 2000年互联网泡沫的破例,公司裁员现象更为普遍。企业为了灵活有效应对市场的起伏,开始采用诸如缩减编制(downsizing)和调整至恰当编制(rightsizing)的安全灵活资源战略,因此员工所期望的“稳定的雇佣关系”已经失去了根基。在中国,由于以人为本的传统文化和企业发展历程,企业在社会上通常扮演家长式的角色,以及过去的计划经济模式下形成的铁饭碗观念的烙印,员工往往有更强的依赖企业的心理。然而市场竞争中企业经营的起起伏伏,迫使企业进行必要人员调整,包括裁员。中国员工也不得不接受这样的事情发生。首先能够接受裁员的是外企员工,例如2002年初惠普和康柏合并进入到实质阶段,一位惠普公司的高级领导来到中国,向大家解释合并的过程和裁员的安排是说到,“公司就像一辆公共汽车,有人上车,有人下车”。其次是国内的企业的员工面对的公司的裁员,例如2004年联想裁员时,员工感慨“公司不是家”,通过互联网引发了大量讨论。 1.3项目经理是一个清晰的职位序列 中国传统中只有仕途一条路,所以“万般皆下品,唯有读书高”,十年寒窗苦,也只为金榜能够提名,谋得一官半职。因此反映到企业管理环境中,就是官本位,很多职员在公司里拼命去当经理、总经理。然而这些职位在公司毕竟是很少的。广大技术员工的发展希望和出路在哪里呢? 特别是技术密集性的企业,业务的发展离不开技术人员的贡献。职位序列是技术员工的发展之路。职业生涯管理的核心是定义公司的职位序列,对技术员工管理的双通道模式的确定, 也就是职位序列的确定.如下图所示: 在IBM公司我们对技术员工的职位序列的体会非常深刻,例如员工可以选择项目经理的职位序列并持续发展,不一定要去做部门经理,事业部经理,因为作为资深的职位的项目经理,同样可以拿到必部门经理还高的薪水。因此所有的人不必都削尖脑袋正确经理的位置,大家可以是IT架构师,咨询顾问、技术专员职位序列。职位序列一定是一个下列等级,就像经理有不同的层级,项目经理、咨询顾问也分为不同的等级。1.4职业生涯管理的基石: 胜任能力模型(Competence Model) 职位序列的等级表示了员工能力。实施职业生涯管理首先需要客观公正地评估和确定员工在职位序列上的等级,然后需要有效的培养员工的能力以实现员工能力的快速提升。能力评估和培养是是实施职业生涯管理关键。胜任能力模型是能力评估和培养有效途径,是职业生涯管理的基石。 影响一个人工作业绩的因素是多方面的,既包括知识、技能层面,还包括一个人的态度、思维模式等层面的因素,而且态度往往是影响业绩更深层、更核心的要素,一个人如果不具备知识和技能,但具有积极学习的态度,那么这些知识和技能一定能够习得,只是不同人因为资质不同习得的速度可能有快有慢。这也就是我们常说的一个人应该既要“Like to do”,又必须“Able to do”,只有两方面都具备了,才能有高绩效。胜任能力就是将圆满完成工作所需要具备的知识、技能、态度和个人特质等用行为方式描述出来。这些行为应是可指导的,可观察的,可衡量的,而且是对个人发展和企业成功极其重要的。胜任能力是从西方发展而来的一个概念,英文叫做Competency,它与我们通常所说的“能力”有所区别,这个能力更多指知识和技能,比如“积极进取”按照我们过去的理解可能认为不应该属于能力之列,但按照胜任能力的定义,它却是核心要素之一。胜任能力与岗位职责的关系:我们每一个岗位都有岗位说明书,胜任能力与岗位职责具有密切关系,岗位职责告诉我们“做什么”,胜任能力则告诉我们“怎么做”。岗位职责的不同决定了应具备的胜任能力的不同,这种不同可能是能力结构的不同,也可能是同一能力所要求程度的不同。岗位与职位的关系. 2.国际项目经理的能力体系概述 2.1.美国项目管理协会(PMI)的能力体系美国项目管理协会(PMI)2002年推出了PMCDF(Project Manager Competence Development Framework),定义了项目经理的能力发展框架,作为个人或组织来管理项目经理的专业发展。该项目经理能力发展框架有三部分组成:项目管理知识、项目管理应用、个人能力。其中项目管理知识和项目管理应用方面的要素项是根据项目管理的5个流程和9大知识领域交叉组成,如下图,针对每个交叉格的内容进行评估,分为4级。 个人能力划分为六个方面,针对每个方面,又进一步细分,共有19个能力元素。如下表,在每个能力元素上,也按照四个级别进行评估。 但是美国项目管理协会的项目管理职业资格认证PMP,却不是根据上述了能力体系进行认证的。PMP的认证主要根据两部分,资格审查和PMP考试。资格审查考量申请者的项目管理工作经验,侧面反映了申请者的管理能力和项目管理知识的应用能力。PMP考试,在主要考察申请者对项目管理知识的了解和认识。 2.2.国际项目管理协会(IPMA)的能力体系 国际项目管理协会(IPMA)于2006年3月推出了国际项目管理协会能力基准(ICB)3.0版本。说明了对于不同级别的项目管理人员的知识和经验的要求,包括项目管理方面的基本术语、任务、实践、技能、管理过程、方法、技术和工具等,并将其分为三个类别:技术能力、行为能力和管理环境的能力。如下表所示,其中项目管理相关的技术能力有20个元素,行为能力有15个能力元素,管理环境能力有15个能力元素。 IPMA依据ICB能力体系,针对项目管理人员专业水平的不同将项目管理专业人员资质认证划分为四个等级,即A级、B级、C级、D级,每个等级分别授予不同级别的证书。国际项目管理专业资质认证(IPMP)是国际项目管理协会在全球推行的四级项目管理专业资质认证体系的总称。IPMP是对项目管理人员知识、经验和能力水平的综合评估证明,根据IPMP认证等级划分获得IPMP各级项目管理认证的人员,将分别具有负责大型国际项目、大型复杂项目、一般复杂项目或具有从事项目管理专业工作的能力。 3.IT项目经理的能力模型的建立 基于国际项目经理能力模型的要素,借鉴了跨国公司的职位序列和能力模型,结合中国IT系统集成和IT服务企业的职位发展管理现状,北京力鼎创新管理咨询咨询有限公司为中国系统集成和IT服务企业构建了的一个胜任能力模型的框架,项目经理为该模型支撑的一个职位序列。胜任能力模型按照能力元素,分为两大部分:通用能力族和专业能力族。 通用能力族 通用能力族,是IT系统集成和服务各个职位序列能力都需要的能力。中核心能力族分解为五个领域,这是从事系统集成和IT服务职业技术人员的基本能力和素质: 1.行业 理解客户环境、困难、核心流程,能够制定出相应的解决方案 2.技术 设计和交付解决方案的能力 3.关系 与内部及外部的个体及组织的事务处理能力 4.业务 执行公司策略、运作流程、工作方法论的知识与能力 5.领导 领导、管理、配置、优化公司人力资产的能力 能力模型需要将能力分解为元素,成为可以可衡量、可观察、可指导的能力元素。如下图 个能力元素,需要进行分级描述,以便可以来考察员工在每个能力项方面的能业内比较流行的能力分级的方法有四级和九级几种,我们采用了四级能力划分,即学习发展、独立贡献、团队贡献和领导创新。以下是业内认可的关于四个层级。 能力描述,根据四个层级的原理,针对每个能力元素的四个层级,做出客观描述,以方便员工自己和其他评估人员对员工在该能力上的评估。以关系能力分解的沟通谈判、变革管理和客户增值的元素为例,说明对能力元素的层级的描述如下: 专业能力族 专业能力族按照我们所设计的职位序列分为咨询顾问、项目经理、IT架构师、IT应用工程师、IT系统工程师、IT运营工程师等。项目经理职位序列的中项目管理专业能力包含计划进度、经营项目、风险控制和团队领导等能力元素,同样采取四级的描述方法,对每个能力元素进行定义,以便对员工的具体能力进行评估。 4.IT项目经理的能力模型的应用 职位序列和能力模型结合在一起,为项目经理培养和发展提供了一个坚实的基础,也是企业加强项目管理,培养项目经理的正确道路。我服务的IBM公司是这样,惠普公司也是这样。力鼎咨询设计的IT项目经理的能力模型和职位序列,在神州数码的应用,获得成功。 高级程序员之抽象能力模型 (1) 发布时间:2009.09.15 11:36 来源:赛迪网作者:高阳每一滴雨水里,都有海洋的气息;每一颗石子里,都有沙漠的影子。所以诗人才说:一支三叶草,再加上我的想象,便是一片广阔的草原。走在秋日的田野上,我想起一位诗人对老托尔斯泰的叩问:一切成熟了的都必须低垂着头么? 转眼三个月过去了,大熊在公司工作表现得非常好。干好本职工作之外还经常帮其他同事解决技术问题,并且经常在业余时间主动帮助项目经理整理文档,很用心地研究项目需求的每一个细节。大熊从锐哥那里学习到的知识每次都总结在自己的一个小本子里,抽时间就温习一遍,尤其锐哥讲过的“上善若水”水的特性对大熊的影响尤为深刻,每看一次都领悟到很多新东西。几个月下来大熊长进和成熟了很多,并且技术也提高得很快,又得到了同事的好评。 软件公司里程序员流动性非常大,由于项目组小组长责任心不够,编码质量差,更没有一个好的编写架构,以至于项目第一阶段上线出现很多严重Bug,给客户造成非常大损失,所以项目没做完就离职了。大熊竟然被项目经理提拔为项目小组长,带领3个新人继续做项目。这使他心里忐忑不安,不知怎样做才能更好地、保质保量地完成项目,才不至于重蹈覆辙? 时间:11月01日 08点 星期六 地点:锐哥家 人物:锐哥、小蔡、大熊 周末一大早,大熊又风风火火地跑到锐哥家,一进门就扯着嗓子喊开了:“锐哥,小蔡在不?”“嘘小点声儿,小蔡还没起床呢,让他多睡一会儿,这几周复习功课把他累坏了,前几天刚考完清华大学的工程硕士。”“哦看,锐哥我给你带什么来了?”大熊拿出一个卷轴,从里面取出一幅画。“啊郑板桥四季竹碑拓!太好了,大熊你从哪儿搞到的?”锐哥情不自禁地兴奋起来。“锐哥真厉害,一眼就认出是郑板桥四季竹。是我父亲出差到陕西,办完事后绕道到北京来看我,我看到他带了这幅画,知道锐哥喜欢书画,我就慢慢地磨叽,终于从老爸那里磨过来了。” “太好了,非常感谢你。听说郑板桥的四季竹碑在道教祖庭楼观台,是陕西非常著名的名胜地,还有老子炼丹炉、上善池和老子亲手种的银杏树什么的,都很有名!可惜没亲身去过。” 小蔡被锐哥的惊呼吵醒,晃晃悠悠地从屋子里走出来。一脸还没睡醒的样,揉了揉眼睛道:“大熊拿来的这幅画真不错,我就知道中国水墨画比西方画有生命力,但说不出来为什么,似乎水墨与所画之物有很大的联系?” 锐哥:“呵呵何止是有联系,是联系得非常密切。记得在情商里提过,老子的上善若水。最好的东西是莫过于水了,水的品质非常高尚,它可以居卑处危。低下的地位,一个小河沟它都可以过去;又能容百川,有巨大的力量,天下之至柔,驰骋天下之至坚。中国画是用水墨,水蘸了墨,虽然没有涂颜色,它会使你感到春天的绿、秋天的黄、冬天的白。只有黑白,从宇宙角度来讲,它也逃脱不了黑与白。 “当欣赏画的时候,你也不能只看到黑,更要注意它的白。老子哲学里有,知其雄而守其雌,知其白而守其黑,笔墨加上宣纸就是黑和白,笔墨到纸上它的渗透过程,是水在起作用,这个水是中国画的生命,而这个水墨,又渗透到宣纸的后面。而油画,你拿个油画笔在那儿画,它能渗透到油画布后面去吗?油画笔是化工产品,它没有那种生命的联系,而中国的笔墨纸,存在着生命的内在联系,它到了纸上,水墨是那样的融洽,升华出那么多美的东西,那种独特游离的意境,使你能体味一种精神力量,所以说中国画也是哲学的,了解大自然才能了解中国画。” 大熊:“锐哥说得很好。郑板桥的画看上去是不错,不过我却不清楚它到底好在哪儿?” 锐哥笑道:“你看他画的竹子生动、有感染力、清新、俊逸。他画竹经过了认识和体现的三阶段:看竹、体会竹、写竹。意思是说在画竹过程中,心中之竹已经不是眼中之竹,笔下之竹又不是心中之竹。这与西方很大的不同。比如说,你如果叫西方人画个西瓜,眼中是西瓜,和心中西瓜一模一样,画出来的西瓜和西瓜一模一样,光线都没差。眼中之瓜即心中之瓜,即笔下之瓜。他画的西瓜会产生食欲。 “而中国人徐渭画的葡萄,你会产生食欲吗?不会。他以饱含水分的泼墨写意法,几个叶子,潇洒跌宕,水墨酣畅,葡萄珠的晶莹透彻之感,显得淋漓酣畅,非常有神韵,可不会产生食欲。能够引起人们食欲的画有可能不是太好的画,能够引起人们精神感发的绘画才真正有意味。中国画有一种游离,它非关乎理,都要和理有所游离才是高手。你看水墨间寥寥几笔便承载出非常丰富的内容,再看中国的诗词(诗中有画)和文字(象形,文字类像)无不都包含了很大的深意,因为简易才有承载了大量的信息!它反映的是事物存在的本质,这是一种高度抽象的境界,直接反映所对应对象的本质。这是西方文化所不能及的。” 听着锐哥慷慨激昂的解说,小蔡和大熊也感到非常兴奋,都有一种对中国传统文化的无比自豪感。 锐哥话锋一转继续说:“这种抽象能力是认识事物从现象到本质的能力。就像上面绘画所说的那样,如果你只是停留在见西瓜是西瓜,见葡萄是葡萄的层次,客户说什么,你就做什么,在设计上让你怎么做你就怎么实现,代码质量和结构也就很难得到保障,从来不过问为什么,也不去想是否满足了用户哪些方面的需求。这样可能只能解决了表面问题,可能会引起返工。 “认识到本质,才能让你的程序具备更大的灵活性和扩展性。在软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。这是一个优秀高级程序员所应该具备的能力。” 小蔡:“我知道抽象是从众多的事物中抽取出共同的本质特征,而舍弃其非本质的特征。例如苹果、香蕉、葡萄、西瓜等,它们共同的特性就是水果。得出概念的过程,就是一个抽象的过程。在C#语言中也有抽象(abstract)类和接口(interface)。” 锐哥:“是的,人对世界的认识,实际上就是一个不断抽象的过程。这种抽象思维就是在不同中找相同,在变化中找不变。把这些相同的和不变的东西理解为共性。而共性的东西是能够共用的。 “提高抽象思维的能力就是提高抽取不同事物的共性的能力,不同的事物不仅仅是包括现实中具体的事物。引入到编程语言里:抽象类是一类事物的高度聚合,而接口是定义行为规范。聚合(抽象abstract)分解(接口interface)。例如,狗是牧羊犬、黑贝等所有狗类的抽象;而对于“叫”的动作,狗也可以叫,鸟也可以叫,这便是行为需要按照接口来完成。合格的高级程序员应该具备很强的设计能力,而设计能力是结合了数据抽象和代码抽象以及语言映射能力到现实问题的解法的能力。 程序员的技术能力模型 “编程语言30% +抽象能力(数据结构50% + 对现实事实的抽象理解能力10% + 设计模式能力10%)70% = 100%。” 大熊:“技术能力模型?太棒了,听锐哥这么一讲,让我有了技术提升的方向,感觉抽象能力太重要了,那么具体体现在哪里呢?” 锐哥:“抽象能力就是发现事物之间相同点或隐含联系的能力。抽象能力具体体现为设计能力: “将用户的需求提炼抽象为计算机描述设计一个高效扩展的系统架构应用设计模式等去实现代码级的抽象得到更高的复用性。 “数据结构能力(逻辑能力)则具体体现在代码的实现上:高质量的代码需要很强的逻辑性,逻辑严谨,Bug就少;在一些对代码执行效率要求严格的应用上,好的算法实现更需要好的数据抽象能力,数据结构就是对数据逻辑的一种抽象。抽象能力本身是一种思维能力,也就是说,你只有不断地进行思维锻炼才能获得。具备了这种基本的抽象能力才能写出高质量的代码,从而设计出好的软件系统。 “相反,如果不具备这种能力,或者能力较弱,写出来的代码、设计出来的系统肯定是问题百出。数据结构正是前人在思索问题的过程中所想出的解决方法。打个比方,如果每个人都懂得英语的语法与基本类型,但是对于同样的题目,每个人写出的作文水平却高低不一。程序设计也和写英语作文一样,虽然程序员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。” 小蔡思索了一会儿说:“我们是否可以这样理解:抽象使高层置为顶端,面向对象就是一种抽象,这种抽象使我们看不到我们不想用到的事物的一些方面,而把那些我们能用到的事物的方面用来作为描述此对象的全部,接口是关于如何应用对象提供的服务的全部抽象。如果说面向对象是代码级复用的机制,那么接口是二进制级真正的复用机制,接口把一个系统的可用部分按不同的形式透露给复用者,抽象使高层置为顶端。” 锐哥笑道:“不错,孺子可教也。没想到小蔡领悟得这么快。” 大熊:“那为什么在软件公司很少人提起过数据结构呢?听锐哥这么一说,我才知道数据结构的应用真是太重要了。我们该怎样才能学好它呢?” 锐哥:“这也是国内软件行业的普遍存在的一个误区,绝大多数程序员都很浮躁,认为数据结构离自己很遥远,工作中用不上,实际上这种数据抽象能力才决定技术将来达到的高度。如果没有很好的心态面对自己的职业,把这种心态问题提升到编程,提升到认识论的高度,就只能达到养家糊口的状态如果着眼点放在生存上,也许就永远停留在维持生存的状态。 “所以,很多程序员基本功不扎实,以为能写一些代码,实现了几个数据库的存储过程能跑起来就是编程了,实际上与国际化软件质量与标准化有很大差距。但在国外知名公司,如微软亚洲研究院选人才就非常注重数据结构方面的能力。另外,我发现很多程序员都不清楚程序员技术能力模型是什么,所以缺少发展技术的方向。 “学习数据结构其实很简单:多练、多学、多看,不要被数据结构吓倒认为它有多难?我们通常用到的数据结构有:线性表、栈和队列、串和数组、树和二叉树、网状结构图、排序(Sort)、查找等数据结构等,除此之外,还有很多其他数据结构实例,需要大家不断总结。我们平时也应该经常锻炼抽象思维能力,经常把现实生活中的东西用计算机语言描述,例如:数据结构里经常提到的“抽象数据类型”,以时钟为例:时钟都有什么特点?可以显示时间;可以调时间。那么可以用这样的类型来抽象这个时钟: class Clock int hour; /表示时针 int minute; /表示分针 int second; /表示秒针 getTime(); /显示时间 setTime(hour,mimute,second); /调时间 “这样抽象化就结束了。实际上,很多事务的抽象比这个复杂得多,其实数据结构就是指抽象。另外要注意的是,在进行程序设计时,先确定相应的数据结构,然后再根据数据结构和问题的需要设计相应的算法。另外,我们无论选择哪一种语言,算法才是根本,掌控了算法,就掌控了任何语言的根本,以不变应万变。” 小蔡:“OK,我明白了。另外,抽象能力中的现实事实的抽象理解能力和设计模式能力分别占抽象能力模型中的10%,那么,它们分别都有哪些体现?如何应用到我们现实工作中呢?” 锐哥:“在软件工程学里有比较成熟的OOAD(Object Orient Analysis & Design,面向对象的分析和设计)软件开发方法。OOAD科学分析法体现的是现实事实的抽象理解能力,以业务为中心来分析解决问题,不涉及求解方案。分析阶段所做的主要工作是理解问题和需求构模,将现实世界中的问题映射到问题域。OOAD包括设计模式能力,反映计算机世界来体现现实世界。 l 分析阶段主要是明确用户的功能需求,满足用户所需的系统部件及其结构。 l 设计阶段则主要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。 “OOAD方法要求在设计中要映射现实世界中(指问题域,如图5.3所示)的对象和实体,如程序员、汽车、项目实施人员等。这就需要在设计中尽可能地接近现实世界,以最自然的方式表述实体。所以,面向对象技术的优点就是能够构建与现实世界相对应的问题模型(桥梁),并保持它们的结构关系和行为模式。 “比如说,我们通常做的系统分析是在假定需求不变的情况下进行的,这样可以把企业的资源配置到最优的程度,但是企业的需求是变化、不稳定的,那么以变化的需求为基础建立起来的软件系统当然也就不稳定了。需求是项目的根本,既然需求都是不稳定的,那么何以建立起稳定的企业信息系统呢?” 小蔡:“我记得有一句经典名言:没有不变的需求,世上的软件都改动过3次以上,唯一一个只改动过两次的软件拥有者已经死了,死在去修改需求的路上。用OOAD方法如何能解决这种需求不断变化的情况呢?” 图5.3 软件表述示意图高级程序员之抽象能力模型 (1) 发布时间:2009.09.15 11:36 来源:赛迪网作者:高阳每一滴雨水里,都有海洋的气息;每一颗石子里,都有沙漠的影子。所以诗人才说:一支三叶草,再加上我的想象,便是一片广阔的草原。走在秋日的田野上,我想起一位诗人对老托尔斯泰的叩问:一切成熟了的都必须低垂着头么? 转眼三个月过去了,大熊在公司工作表现得非常好。干好本职工作之外还经常帮其他同事解决技术问题,并且经常在业余时间主动帮助项目经理整理文档,很用心地研究项目需求的每一个细节。大熊从锐哥那里学习到的知识每次都总结在自己的一个小本子里,抽时间就温习一遍,尤其锐哥讲过的“上善若水”水的特性对大熊的影响尤为深刻,每看一次都领悟到很多新东西。几个月下来大熊长进和成熟了很多,并且技术也提高得很快,又得到了同事的好评。 软件公司里程序员流动性非常大,由于项目组小组长责任心不够,编码质量差,更没有一个好的编写架构,以至于项目第一阶段上线出现很多严重Bug,给客户造成非常大损失,所以项目没做完就离职了。大熊竟然被项目经理提拔为项目小组长,带领3个新人继续做项目。这使他心里忐忑不安,不知怎样做才能更好地、保质保量地完成项目,才不至于重蹈覆辙? 时间:11月01日 08点 星期六 地点:锐哥家 人物:锐哥、小蔡、大熊 周末一大早,大熊又风风火火地跑到锐哥家,一进门就扯着嗓子喊开了:“锐哥,小蔡在不?”“嘘小点声儿,小蔡还没起床呢,让他多睡一会儿,这几周复习功课把他累坏了,前几天刚考完清华大学的工程硕士。”“哦看,锐哥我给你带什么来了?”大熊拿出一个卷轴,从里面取出一幅画。“啊郑板桥四季竹碑拓!太好了,大熊你从哪儿搞到的?”锐哥情不自禁地兴奋起来。“锐哥真厉害,一眼就认出是郑板桥四季竹。是我父亲出差到陕西,办完事后绕道到北京来看我,我看到他带了这幅画,知道锐哥喜欢书画,我就慢慢地磨叽,终于从老爸那里磨过来了。” “太好了,非常感谢你。听说郑板桥的四季竹碑在道教祖庭楼观台,是陕西非常著名的名胜地,还有老子炼丹炉、上善池和老子亲手种的银杏树什么的,都很有名!可惜没亲身去过。” 小蔡被锐哥的惊呼吵醒,晃晃悠悠地从屋子里走出来。一脸还没睡醒的样,揉了揉眼睛道:“大熊拿来的这幅画真不错,我就知道中国水墨画比西方画有生命力,但说不出来为什么,似乎水墨与所画之物有很大的联系?” 锐哥:“呵呵何止是有联系,是联系得非常密切。记得在情商里提过,老子的上善若水。最好的东西是莫过于水了,水的品质非常高尚,它可以居卑处危。低下的地位,一个小河沟它都可以过去;又能容百川,有巨大的力量,天下之至柔,驰骋天下之至坚。中国画是用水墨,水蘸了墨,虽然没有涂颜色,它会使你感到春天的绿、秋天的黄、冬天的白。只有黑白,从宇宙角度来讲,它也逃脱不了黑与白。 “当欣赏画的时候,你也不能只看到黑,更要注意它的白。老子哲学里有,知其雄而守其雌,知其白而守其黑,笔墨加上宣纸就是黑和白,笔墨到纸上它的渗透过程,是水在起作用,这个水是中国画的生命,而这个水墨,又渗透到宣纸的后面。而油画,你拿个油画笔在那儿画,它能渗透到油画布后面去吗?油画笔是化工产品,它没有那种生命的联系,而中国的笔墨纸,存在着生命的内在联系,它到了纸上,水墨是那样的融洽,升华出那么多美的东西,那种独特游离的意境,使你能体味一种精神力量,所以说中国画也是哲学的,了解大自然才能了解中国画。” 大熊:“锐哥说得很好。郑板桥的画看上去是不错,不过我却不清楚它到底好在哪儿?” 锐哥笑道:“你看他画的竹子生动、有感染力、清新、俊逸。他画竹经过了认识和体现的三阶段:看竹、体会竹、写竹。意思是说在画竹过程中,心中之竹已经不是眼中之竹,笔下之竹又不是心中之竹。这与西方很大的不同。比如说,你如果叫西方人画个西瓜,眼中是西瓜,和心中西瓜一模一样,画出来的西瓜和西瓜一模一样,光线都没差。眼中之瓜即心中之瓜,即笔下之瓜。他画的西瓜会产生食欲。 “而中国人徐渭画的葡萄,你会产生食欲吗?不会。他以饱含水分的泼墨写意法,几个叶子,潇洒跌宕,水墨酣畅,葡萄珠的晶莹透彻之感,显得淋漓酣畅,非常有神韵,可不会产生食欲。能够引起人们食欲的画有可能不是太好的画,能够引起人们精神感发的绘画才真正有意味。中国画有一种游离,它非关乎理,都要和理有所游离才是高手。你看水墨间寥寥几笔便承载出非常丰富的内容,再看中国的诗词(诗中有画)和文字(象形,文字类像)无不都包含了很大的深意,因为简易才有承载了大量的信息!它反映的是事物存在的本质,这是一种高度抽象的境界,直接反映所对应对象的本质。这是西方文化所不能及的。” 听着锐哥慷慨激昂的解说,小蔡和大熊也感到非常兴奋,都有一种对中国传统文化的无比自豪感。 锐哥话锋一转继续说:“这种抽象能力是认识事物从现象到本质的能力。就像上面绘画所说的那样,如果你只是停留在见西瓜是西瓜,见葡萄是葡萄的层次,客户说什么,你就做什么,在设计上让你怎么做你就怎么实现,代码质量和结构也就很难得到保障,从来不过问为什么,也不去想是否满足了用户哪些方面的需求。这样可能只能解决了表面问题,可能会引起返工。 “认识到本质,才能让你的程序具备更大的灵活性和扩展性。在软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。这是一个优秀高级程序员所应该具备的能力。” 小蔡:“我知道抽象是从众多的事物中抽取出共同的本质特征,而舍弃其非本质的特征。例如苹果、香蕉、葡萄、西瓜等,它们共同的特性就是水果。得出概念的过程,就是一个抽象的过程。在C#语言中也有抽象(abstract)类和接口(interface)。” 锐哥:“是的,人对世界的认识,实际上就是一个不断抽象的过程。这种抽象思维就是在不同中找相同,在变化中找不变。把这些相同的和不变的东西理解为共性。而共性的东西是能够共用的。 “提高抽象思维的能力就是提高抽取不同事物的共性的能力,不同的事物不仅仅是包括现实中具体的事物。引入到编程语言里:抽象类是一类事物的高度聚合,而接口是定义行为规范。聚合(抽象abstract)分解(接口interface)。例如,狗是牧羊犬、黑贝等所有狗类的抽象;而对于“叫”的动作,狗也可以叫,鸟也可以叫,这便是行为需要按照接口来完成。合格的高级程序员应该具备很强的设计能力,而设计能力是结合了数据抽象和代码抽象以及语言映射能力到现实问题的解法的能力。 程序员的技术能力模型 “编程语言30% +抽象能力(数据结构50% + 对现实事实的抽象理解能力10% + 设计模式能力10%)70% = 100%。” 大熊:“技术能力模型?太棒了,听锐哥这么一讲,让我有了技术提升的方向,感觉抽象能力太重要了,那么具体体现在哪里呢?” 锐哥:“抽象能力就是发现事物之间相同点或隐含联系的能力。抽象能力具体体现为设计能力: “将用户的需求提炼抽象为计算机描述设计一个高效扩展的系统架构应用设计模式等去实现代码级的抽象得到更高的复用性。 “数据结构能力(逻辑能力)则具体体现在代码的实现上:高质量的代码需要很强的逻辑性,逻辑严谨,Bug就少;在一些对代码执行效率要求严格的应用上,好的算法实现更需要好的数据抽象能力,数据结构就是对数据逻辑的一种抽象。抽象能力本身是一种思维能力,也就是说,你只有不断地进行思维锻炼才能获得。具备了这种基本的抽象能力才能写出高质量的代码,从而设计出好的软件系统。 “相反,如果不具备这种能力,或者能力较弱,写出来的代码、设计出来的系统肯定是问题百出。数据结构正是前人在思索问题的过程中所想出的解决方法。打个比方,如果每个人都懂得英语的语法与基本类型,但是对于同样的题目,每个人写出的作文水平却高低不一。程序设计也和写英语作文一样,虽然程序员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。” 小蔡思索了一会儿说:“我们是否可以这样理解:抽象使高层置为顶端,面向对象就是一种抽象,这种抽象使我们看不到我们不想用到的事物的一些方面,而把那些我们能用到的事物的方面用来作为描述此对象的全部,接口是关于如何应用对象提供的服务的全部抽象。如果说面向对象是代码级复用的机制,那么接口是二进制级真正的复用机制,接口把一个系统的可用部分按不同的形式透露给复用者,抽象使高层置为顶端。” 锐哥笑道:“不错,孺子可教也。没想到小蔡领悟得这么快。” 大熊:“那为什么在软件公司很少人提起过数据结构呢?听锐哥这么一说,我才知道数据结构的应用真是太重要了。我们该怎样才能学好它呢?” 锐哥:“这也是国内软件行业的普遍存在的一个误区,绝大多数程序员都很浮躁,认为数据结构离自己很遥远,工作中用不上,实际上这种数据抽象能力才决定技术将来达到的高度。如果没有很好的心态面对自己的职业,把这种心态问题提升到编程,提升到认识论的高度,就只能达到养家糊口的状态如果着眼点放在生存上,也许就永远停留在维持生存的状态。 “所以,很多程序员基本功不扎实,以为能写一些代码,实现了几个数据库的存储过程能跑起来就是编程了,实际上与国际化软件质量与标准化有很大差距。但在国外知名公司,如微软亚洲研究院选人才就非常注重数据结构方面的能力。另外,我发现很多程序员都不清楚程序员技术能力模型是什么,所以缺少发展技术的方向。 “学习数据结构其实很简单:多练、多学、多看,不要被数据结构吓倒认为它有多难?我们通常用到的数据结构有:线性表、栈和队列、串和数组、树和二叉树、网状结构图、排序(Sort)、查找等数据结构等,除此之外,还有很多其他数据结构实例,需要大家不断总结。我们平时也应该经常锻炼抽象思维能力,经常把现实生活中的东西用计算机语言描述,例如:数据结构里经常提到的“抽象数据类型”,以时钟为例:时钟都有什么特点?可以显示时间;可以调时间。那么可以用这样的类型来抽象这个时钟: class Clock int hour; /表示时针 int minute; /表示分针 int second; /表示秒针 getTime(); /显示时间 setTime(hour,mimute,second); /调时间 “这样抽象化就结束了。实际上,很多事务的抽象比这个复杂得多,其实数据结构就是指抽象。另外要注意的是,在进行程序设计时,先确定相应的数据结构,然后再根据数据结构和问题的需要设计相应的算法。另外,我们无论选择哪一种语言,算法才是根本,掌控了算法,就掌控了任何语言的根本,以不变应万变。” 小蔡:“OK,我明白了。另外,抽象能力中的现实事实的抽象理解能力和设计模式能力分别占抽象能力模型中的10%,那么,它们分别都有哪些体现?如何应用到我们现实工作中呢?” 锐哥:“在软件工程学里有比较成熟的OOAD(Object Orient Analysis & Design,面向对象的分析和设计)软件开发方法。OOAD科学分析法体现的是现实事实的抽象理解能力,以业务为中心来分析解决问题,不涉及求解方案。分析阶段所做的主要工作是理解问题和需求构模,将现实世界中的问题映射到问题域。OOAD包括设计模式能力,反映计算机世界来体现现实世界。 l 分析阶段主要是明确用户的功能需求,满足用户所需的系统部件及其结构。 l 设计阶段则主要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。 “OOAD方法要求在设计中要映射现实世界中(指问题域,如图5.3所示)的对象和实体,如程序员、汽车、项目实施人员等。这就需要在设计中尽可能地接近现实世界,以最自然的方式表述实体。所以,面向对象技术的优点就是能够构建与现实世界相对应的问题模型(桥梁),并保持它们的结构关系和行为模式。 “比如说,我们通常做的系统分析是在假定需求不变的情况下进行的,这样可以把企业的资源配置到最优的程度,但是企业的需求是变化、不稳定的,那么以变化的需求为基础建立起来的软件系统当然也就不稳定了。需求是项目的根本,既然需求都是不稳定的,那么何以建立起稳定的企业信息系统呢?” 小蔡:“我记得有一句经典名言:没有不变的需求,世上的软件都改动过3次以上,唯一一个只改动过两次的软件拥有者已经死了,死在去修改需求的路上。用OOAD方法如何能解决这种需求不断变化的情况呢?” 图5.3 软件表述示意图“当父类(通常为抽象类)对象ProjectManager引用子类对象SeniorEngineer,然后用ProjectManager去调用父类中的方法的时候,子类中从父类继承而来的虚方法如果采用覆盖(new去修饰)方式,实际执行的是父类的方法;如果采用重写(override修饰)的方式时,则实际执行的是子类的方法。这个是设计模式抽象的关键,如果不能理解这个原则,那么设计模式是很难看下去的,同时它也是组建多态的关键。 “因为我们常常要利用抽象类去引用子类来实现多态。当然,这只是设计模式中的一个小小应用而已,传递参数在设计模式中还比较常见,如int,string型参数,但在实际大型软件运用中这远远不够,有时候一个类、对象、属性都可以作为参数来传递。” 大熊:“哈哈这真是太好了,真想快点回去试试,看看这招好不好使。锐哥说的那些真是太确切了,像是在说我似的,我就是接口和抽象类基本不用。” 小蔡:“设计模式像数学公式,大熊比喻得挺有新意,这让我想起上次锐哥讲的无为之境界和编程之道。武功套路是习武的门径。新手要一招一式地练习套路,烂熟于心之后,熟能生巧,在实战之中即可见招拆招、运用自如,此时习武之人已从菜鸟成长为大鸟。老鸟则没有套路,实战之中只有自然反应,然而一招一式浑然天成、恰到好处,似有似无、无中生有、无招胜有招。 “设计模式应用于设计,就好比武功套路。菜鸟要一个接一个地学习模式,大鸟能够活用模式,老鸟则没有模式。设计模式的内功是面向对象的基本原则。这些原则是神,模式是形。高手拼的是内功,只有对面向对象基本原则有了深刻的领悟,才能用好设计模式,避免走火入魔。这可能就是设计模式之道吧。” 锐哥哈哈大笑道:“小蔡比喻得很好,这确实很像修炼武功之七层境界(设计模式步骤):能看懂设计模式的文章能写一个设计模式的骨架能编一个新的运用设计模式的例子能在写代码的时候想到似乎有设计模式适合,在翻阅资料后找到了这种设计模式在理解项目的需求后就能意识到哪里可以使用哪种设计模式进行优化完全掌握了设计模式的精髓,灵活使用各种设计模式以及其变种忘掉全部设计模式,达到运用设计模式成为随心所欲,全是下意识的自然反应的境界,无变之变,这就是设计之道。” 小蔡:“锐哥总结得非常好。我们是否可以这样理解:抽象能力模型中设计模式也是一种抽象。在使用OOAD(包括设计模式)软件开发过程中,识别稳定的需求、识别核心的需求、识别概
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024上海市优惠价房购买合同文本
- 咖啡店桌椅订购与安装合同
- 2024年挖机施工协议合同
- 企业承包经营合同书范本
- 2024年购买二手车需谨慎
- 展会与媒体合作协议模板
- 产品制造分许可协议分析
- 个人与企业间借款合同范本
- 成都市白蚁防治工程合同书参考文献
- 广告媒介合同格式参考
- 新人教PEP版六年级上册英语Unit 4单元测试卷(含听力音频)
- 工匠精神之资产负债表重构
- 300万吨钢铁工程项目可行性研究报告书
- 非金属膨胀节采购技术协议(茶园)
- 场地平整工程施工方案(完整版)
- 妇产科诊疗常规
- 《风景园林工程》word版
- 实验室生物安全委员会及其工作职责
- JJF(鄂) 90-2021 电子辊道秤校准规范(高清版)
- ISO-IEC17025-2017实验室管理体系全套程序文件
- 上好一节消防课(课堂PPT)
评论
0/150
提交评论