Ⅰ 编程行业年龄大就失业了
说几点看法:
一、系统分析必须先有深厚的程序员实践经验,才能做好(当然,对于打算“滥竽充数”的“系统分析员”例外)。
二、在其他条件相同的情况下,年轻者更容易适应程序员工作。但是,年龄并不是最主要的条件。程序员需要一定素质。年纪很老但具有素质的程序员,工作中远远胜于很年轻但素质不够的程序员,这种实例很常见。
三、如果您有一定素质,并有毅力和决心,那么50不算老。所谓“技术更新快”不应该算是问题,因为即使外部技术不更新,做程序员工作的也同样需要花费不亚于不断更新知识的工作量,因为程序设计这项工作本身的繁琐程度,就已经如此了。善于不断更新知识,是程序员的必要素质之一。
可以介绍一下我的个人经历,或许对您有参考意义?
我编程序很早了,我的第一个程序是在60年代“文革”以前,当时全国只有“屈指可数”的计算机,而“软件”这个名词还没有听说过。但后来多年,一直阴差阳错,没有机会从事本专业。
80年代初研究生期间,曾参与了解剖及开发系统软件的工作,当时比较有影响的一个微型机系列的系统软件的主要部分,就是我的作品。那时就已经过了35岁了。
从那以后,本该顺顺当当专业归队了,但不料触动了不知哪条潜规则,开罪了哪路神仙,四处碰硬钉子无法归队,最终也没有进入一个可以充分发挥专业的岗位。
须知,那时的工作分配可不像现在这样允许“双向选择”随便“跳槽”,那时即使人家极力要,自己也愿去,但只要办手续环节上有任何一个机关的经办人不高兴,就有绝对的“否决权”。
这些年顶多也就是抓了一些偶然的机会做出了一些成果,也有些仅仅是自己研究而没有机会推广的“无用功”。
直到60岁退休以后,应聘到一个军工单位,搞控制器系统软件,这才真正归队了。他们之所以聘我,也是因为以前的偶然机会,帮他们解决过一些技术问题,他们对我的能力有所了解。
有人可能会以为,我应聘的这工作,或许是年轻人干活我来“顾问”吧?其实根本不是这样,可以接手干活的年轻人远远不够,还没有培养出来。我只能是“事必躬亲”了,当一个“老程序员”(虽然,名义和待遇均是“专家”一级的)。
这种动辄数千条上万条的软件,人们戏称是“吃青春饭”,言外之意是只有年轻人才能干得了。所以常有人拿这跟我开玩笑。
当然,我干的实际上并非“纯程序员”的活,可以算是程序员兼系统分析员兼项目主管设计(因为项目的总体不仅有软件,还有机械电气等等多方面的技术问题)。
我的体会,“不断更新知识”的能力,是可以锻炼出来的。
据我所知,像这种该年轻人干的活缺人干,靠老头子撑局面的情况,现在不少国营大厂都有。有人猜想,这种情况有两个原因:一是近年教育质量滑坡,缺少有能力的年轻人才;二是国营大厂经济效益不好吸引不来有能力的人才。不知是不是。
Ⅱ 为什么很少有炫富的程序员
不是程序员很少炫富,只是我们看到的基本上没有炫富,但也有一些炫富炫的很高级,望尘莫及。
Ⅲ 为什么很多程序员在35岁以后就被裁了或者没有竞争力了
随着时代的不断发展,人们的生活水平以及经济水平都是得到了一个显着的提高,而且虽然现在人们的生活条件变好了,但是消费水平变得是越来越高,很多普通人想要让自己的生活条件变得比较好的话,那么只能去努力的工作,所以说很多普通人的生活压力及工作压力都是十分的大,都是想要让自己拥有一个工资比较高的工作,所以说很多年轻人都会选择去做一个程序员,但是做程序员并不是一件10分轻松的事情,不仅工作的压力十分的,而且等到自己到了中年之后,很有可能被公司炒掉,具体介绍如下。
一、身体出现问题在我看来之所以很多程序员在35岁之后就已经没有了竞争力,有一个很重要的原因就是他们在年轻的时候努力工作,让自己的身体出现了一些问题,在工作的时候也是没有办法更加的专心,没有更多的精力去工作了。
各位看官,以上就是关于我对“为什么很多程序员在35岁以后就被裁了或者没有竞争力了?”的看法,有什么想法可以在下面评论哦。
Ⅳ 什么是电脑程序员相关知识
程序员是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。
作一个真正合格的程序员,应该具有的素质。
1:团队精神和协作能力
团队精神和写作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
2:文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果没有缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。
3:规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。 一些所谓的高手甚至叫嚣高手写的代码一般人看不懂,我只能说他不是一名合格的程序员。
4:需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
5:模块化思维能力
作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
6:测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
7:学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,我们只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员、项目经理。
作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:
1、 需求分析能力
2、 整体框架能力
3、 流程处理能力
4、 模块分解能力
5、 整体项目评估能力
6、 团队组织管理能力
Ⅳ 为什么有些出入职场的程序员,必须要经历加班修改bug的过程
我个人感觉不是所有职场的程序员都要经历加班修改的过程,就算不是程序员其他工作的人员也会经历。上班儿加班儿,这都是很正常。有的时候任务催的很急,肯定是要加班完成的。这些都是常识。只是职场的程序员加班。修改的比较多。程序员他进行的问题的解剖需求,各方面程序的分析运行也是非常多的。所以职场的程序员面对加班修改的经历会比较多。
以上的情况是想说通常加班的人如果偶尔的话还是可以理解的,毕竟现在的工作都会有时候加点班。就是出来工作的,又不是出来享福出来玩的。所以也不是说职场的程序员必须要经历加班修改,只是做的不对或者催稿的情况下会进行加班修改的过程。
Ⅵ 程序员40岁之后怎么办
最近看到很多文章,关于程序员的寿命的问题,刚开始我也感到比较有危机感,毕竟现在已经写过代码6年了,自己也快30岁了,谈谈自己的感受吧!
目前在一家公司做系统分析师,专门做系统分析和设计,偶尔也参与编码。整体来说,很少有机会写代码了。但是个人的兴趣爱好还是技术,未来并没有考虑从管理路线,虽然曾经一度管理过 8个人的小团队,但是说实在的,管理是一门很虚的艺术,自己的性格不太适合。但是自己还是对技术有非常强烈的兴趣,学习新技术的动力还是非常强的,也一直经常性的看一些开源的代码,时刻提醒自己不要忘记如何写程序。
而网上大多数人认为程序员40岁之后很少的原因无非有以下几个方面:
1 在于40岁之后无论体力,精力,学习能力都下降,不能和年轻人在拼比了。所以40岁程序员的竞争力完全不如20多岁的小伙子。
这一点我认同一部分,的确男人在40岁之后由于生活压力,家庭压力 ,身体压力 等会造成精力和体力的下降。但是40岁之后的程序员有着多年的经验。如果一个优秀的程序员能够在40岁之前一直学习,必然他的经验会非常优秀。能够学会这种优秀的框架,了解优秀框架的设计原理,懂得各种底层的技术原理,有着丰富的软件设计架构经验,各种编程语言的熟悉或者甚至说精通。由于技术是想通的,所以学习新的语言也会简单很多。试想:如果设计一个能够承受秒钟上万的请求的高度并发系统,优先选择是那个人?但是前提是你能够不断的学习,一直努力提高自己的眼界和能力。如果天天混日子,天天做一些crud的操作,做了10年的java程序开发,连单例模式都写不出来的人,除了java其他都不会,竞争力的确不如20岁的年轻人。
2 年龄大的程序员外面的公司会有一些歧视,供应的职位相对来说比较少。
的确,在一些小的公司,由于不需要很高的技术要求,不需要丰富的经验,所以会有年龄的限制,希望更多的压榨年轻人的精力和薪水。但是也存在对经验和设计能力要求很高的公司,是不在乎年龄限制的。
3 业界的潜规则,歧视40岁之后还写程序的人
其实国外人的人40岁之后的程序员还是非常庞大的,在中国,这是一个业界规则,暂时是没有办法改变的。
所以40岁应该是程序员的一个分水岭,在目前中国这种大环境下,作为一个IT工程师,还是有必要考虑一下40岁之后的打算
个人觉得程序员无非有以下几个方向:1 转管理这个是很多程序员的想法,不过想想中国500W程序员,按照10:1的管理比例,有50W的管理岗位,如果大家都这样的打算,将会是10个人竞争一个人的岗位。
2 做业务分析
现在很多公司都有复杂的业务,比如保险,电商,银行,可以精通某一个行业,以后就专心了解这行的业务,做业务分析等等。
3 转行很多人估计都选择这一条路,的确挺简单。不过也很可惜,如果真的对IT没有兴趣,干嘛不在转,浪费自己那么多的时间4 架构师很多人架构师有不同的定义,认为架构师不用写代码,不用了解细节。我这里定义的架构师可以不用写代码,但是一定要了解细节。
5 独立程序员
这个是我最近看到国外的一个独立程序员一个blog才收到启发的。其实随着移动方面的成熟,完全可以开发应用来赚钱。自己在家里办公,自己建立一个工作室。
自己未来还是想做一个独立程序员 自由万岁!
Ⅶ 为什么程序员的思维很难理解
1、程序员的思维比普通人要严谨。
对编程有一定了解的人都能理解这一点,一是一二是二,电脑不认模棱两可的回答,因为“模棱两可意味着更多的可能答案”,所以你跟程序员交谈的时候,如果你问他“为什么要这样问”或“你为什么听不懂”,你就会知道你自己的描述有多么的不严谨了。
最简单的例子,你妈妈让你去市场买水果,如果看到有苹果就买一个苹果,看到梨就买两个。你看到市场有苹果和梨,你会买什么回家?
首先给出一个大前提,在程序上不存在“潜台词”或者“潜规则”这种东西,唯一起作用的只有“字面意思”。
一般人肯定是买一个苹果和两个梨。当然程序员也不是脑子有坑,以一个正常人的思维考虑也会买一个苹果和两个梨,但是看到这问题的第一个瞬间的直觉反应,却是“如果看到梨就买两个苹果”。这个问题不存在潜台词,所以所有人都会直接从字面理解老妈的意图。
按照程序的逻辑分析,这句话共分为两个部分,代表两个程序任务。“如果看到有苹果就买两个苹果”为任务一,条件是“看到有苹果”,目标对象“买苹果”,数量“一个”;“如果看到有梨就买两个”为任务二,条件是“看到有梨”,数量“两个”,没有给出新的目标对象。
因此按照程序逻辑来讲,第二句话将继承上一个目标对象,也就是“买苹果”,所以这句话被看起来像职业病一样的思维直接翻译成了“如果看到有苹果就买一个苹果,如果看到有梨就买两个苹果。”
————————————————————
2、程序员看问题比一般人透彻。
这是职业特性导致的,因为电脑编程的严谨性,因此程序员面对一个问题、一个需要实现的目标或者一个bug时,他会思考更底层的问题,并且会习惯性采用归纳法来尽量避免以后可能遇到同样的问题。
比如用输入法输入中文的词句,有的时候打出了一串拼音,然后按下数字2选取发现不是自己想要的词,然后发觉数字1对应的才是自己想要的,删掉,重新输入拼音,这次按下数字1的瞬间却发现两个词的位置调换了,于是又删掉重新键入,这次认真地看了看,终于选对了想要的词的序号。
这个时候你会说,啊,我下次应该更小心一点,不要马虎大意想当然,看清楚了再点。
程序员不这么想,他会想,导致这个问题的看来是输入法的“词语顺序自动调整”功能,他会自动监测使用者输入的各种词语的频率,来自动调整词语的顺序,底层代码实现的逻辑很简单,每个不同的词对应一个从输入法安装到现在的输入次数的计数器,直接按计数器排列顺序就好了;也有的输入法会监测你输入后是否会将其删掉,那么这时候会被智能识别为打错字,计数器不会加一。
然后再一思考,这种功能一般都是可以开关的,如果我想要靠记忆记住顺序使用而不用输入法自动调整的话,比如对汉字输入的速度有一定要求需要考记忆记住汉字序号,我只需要进入输入法设置将其关掉即可;如果我想要它帮助我调整词句位置,但是又不需要频繁地调整,那么在我有工作需要的时候我会提前关掉,平时开启即可;而如果我想单纯依赖这一功能,那就不用管它,下次看清楚再选就好了。
Ⅷ 程序员等级划分:看顶级高手如何编程
有脑子,很听话,很认真,但基础不好,代码有局限性 这类型的程序员大多是工作一到两年的程序员,但和上面的不同,他们很有脑子思路很好,而且很听经理的话,做东西很认真,做不完了自己会加班写,学新的东西也很快,但是有一点不好的是,他们有很多理由说自己没时间学习基础,这些人一般是在学校没有学好,出来之后后悔了,学起来很认真,由于学了些新的知识,起点高,看不起基础的东西,从不想着没事去看看编程基础,看看算法,看看数据结构,总是以为我都能做出这样的项目了,还看那些小东西会很丢人的,于是在公司从不看回家更不想看,时间长了,技术会有很大的局限性,对某一块技术很不错,但是对其它技术不怎么好,于是在接到一个项目时,总喜欢使用自己现有的,会的技术去实现,转了一圈又一圈总算是把东西写出来了,而且还是加班完成了,但是代码的性能,稳定性,和效率上差的很远,扩展性也谈不上,时间一长,项目一多起来,就会出现多次反工,因为需求是会不断变化的,于是自己的代码也要变化,感觉很是理所当然,一个项目没事,接手的多了就麻烦了,新项目刚到手,老项目就出问题了,不是这里有点小毛病就是那个功能要升级,于是新项目放下,着手改老项目,手上能有三四个项目时,就会忙个不停,改的多了,没办法再改了就得重新设计,或是直接说这个功能实现不了。 其实在这个阶段的朋友很有潜力的,只要花点心思补习一下自己的技术缺陷,多看看高手的代码,写之前想一下,设计一下,自然事半功倍,千万不要有眼高手低的心态。 真正的高手Nb人物是怎么工作的------------程序员 1.不随便改变需求 他们不会主观的改变一些东西,不管是对还是错,如果要改的话他们会在开会时,或是私下跟你提出来,通过后再改,否则会按需求办事 2.不写没有思想的代码 在写功能时会加上一些人性化的功能,比果加个小图标,加一些验证,处理一些操作习惯,加加快捷键,处理好Tab顺序,等这些,不用你说,他们自己会处理好。 3.不写没有远见的代码 他们在写代码时会想,不会是单纯的实现功能,他要想,如果别人也要用这个方法怎么办,以后要改的时候怎么办,代码这样写是不是合理,是不是会影响性能,然后才会”吝啬“的出手。 4.不写不负责任的代码 我们写代码一是为客户用,二是方便其他人看,不单单是自己维护,要对自己的代码负责,从自己手上出去的代码代表的就是自己的脸,代码不好,人家会“打脸”的。他们不愿意挨打所以他们负责。 高手在编程效率方面可能并不比普通程序员快多少,因为他们会吝啬自己敲下的每一行代码。这种“吝啬”有两方面的含义,一是项目的架构性和整体性考量,二是从性能和优化的角度进行Coding。其实,这里所映射的是一个开发者的技术视野。 有多位技术专家强调项目执行时的全局观。面对一个项目,即使是团队中的普通一员,也要力求从项目整体架构的角度审视开发需求,对各个模块、接口和通信做最优化的预想和配置。这样可以从全局审视整个项目的技术布局,预判可能出现的问题。 在确定了整体之后,落实到具体的模块实现,每一行代码不但有上下文的考量与规划,还要具备模块间的整体布局。这是模块内的技术视野,比如接口的定义、注释的可读性、代码的执行效率等。当你写下一行代码前,要考虑它是否会对整个系统造成影响,是否方便其他接口进行调用,这些都是一个开发高手的“技术潜意识”。 据一些经常带领入门级开发者的技术经理介绍,多数人只考虑自己所负责的模块进行开发,缺乏一个全局性的技术视野和对代码性能苛刻的态度,这样虽然能按交付日期完成项目,却对项目质量和开发者的自我提高有很大阻碍。 开发高手是代码阅读者。大多数技术专家的代码阅读量是普通程序员的百倍,代码阅读的时间比写代码的时间要长得多。 多数程序员只把程序开发当成一份工作,他们在乎平台的前景、语言的优劣、报酬的高低;他们不愿为一个技术点反复钻研,不愿为一个bug精心测试,不愿为自身技术水平的提高多花时间。而开发高手往往具有单纯的技术梦想,愿意为技术付出自己全部的时间。
Ⅸ 做程序员的黄金年龄是在多少岁
黄金年龄原则上来说是越小越好,因为你的专注力比较好,而且没有过多的生活,家庭的琐事来干扰你。这个时候你可以把大量的精力投入到产品研发当中去。不过中年和晚年各有各的好处。
所以黄金年龄如果对于身体来说,当然是年龄越小越好。不过还是要看自己怎么努力,就算你年龄很小,但是不学习的话那也没有用。
Ⅹ 关于程序员
那编程能力实在是太强了,而且开发经验丰富。你要想成为程序员就一定要做好吃苦的准备,还有一点要说明,做这个行业不是早结婚,就是晚结婚,这是不争的事实。
学好某一门语言或学好多门语言只是成为一名合格的程序员必备的条件之一,重要的是软件工程所要走的一个流程,看一下CMMi方面的资料会对你有一些好处.
(Capability Maturity Model Integration,能力成熟度模式整合)
CMMI( Capability Maturity Model Integration)的本质是软件管理工程的一个部分。软件过程改善是当前软件管理工程的核心问题, 50多年来计算的发展使人们认识到要高效率、高质量和低成本地开发软件,必须改善软件生产过程。基于模型的过程改进是指用采用能力模型来指导组织的过程改进,使之过程能力稳定的进行改善,该组织也能变得更加成熟。
然而,软件组织形成一套完整而成熟的软件过程不是一蹴而就的事情,需要经历一系列的成熟度。软件组织首先要进行差异分析,评定自己比较接近哪一个成熟度,然后再根据自身的情况来决定要采取哪些改进活动,来更有效地改进自己的软件过程。这就对软件过程的评定提出了一个客观的标准。美国卡内基梅隆大学软件工程学院于1987年研究成功的SW-CMM(Capability Maturity Model for Software)就是这样的一个理论模型,其目的在于帮助软件组织改善软件生产流程,以探索一个保证软件产品质量、缩短开发周期、提高工作效率的软件工程模式与标准规范。
CMMI是一个可以改进系统工程和软件工程的整合模式。1997年10月SEI停止对CMM的研究,改而致力于CMMI,以解决使用多个过程改进模型的问题。SEI同时宣布CMMI将取代CMM,与2000年8月11日颁布了CMMI-SE/SW 1.0版本,2001年12月颁布了1.1版本,这次发布标志着CMMI正式启用,并准备今年内完成CMM到CMMI的过渡。说到CMMI就不能不提CMM。
CMM
CMM框架用5个不断进化的层次来评定软件生产的历史与现状:初始级描述了不成熟,或者说是未定义的过程的组织,是混沌的过程以不可预测结果为特征;可重复级是经过训练的软件过程;已定义级是标准一致的软件过程,以组织内改进项目执行为特征;已管理级是可预测的软件过程,以改进组织性能为特征;优化级是能持续改善的软件过程,以可快速进行重新配置的组织性能,和定量的、持续的过程改进为特征。任何单位所实施的软件过程,都可能在某一方面比较成熟,在另一方面不够成熟,但总体上必然属于这5个层次中的某一个层次。
CMM包括两部分"软件能力成熟度模型"和"能力成熟度模型的关键过程域"。"软件能力成熟度模型"主要是描述此模型的结构,并且给出该模型的基本构件的定义。"能力成熟度模型的关键过程域"详细描述了每个关键过程方面涉及的过程域。
可重复级关键过程域:需求管理,软件项目计划,软件项目跟踪和监控,软件子合同管理,软件质量保证,软件配置管理。
已定义级关键过程域:组织级过程焦点,组织级过程定义,培训大纲,集成软件管理,软件产品工程,组间协调,同行评审。
已管理级关键过程域:定量过程管理,软件质量管理。
优化级关键过程域:缺陷预防,技术更新管理,过程更改管理。
多数组织的基本目标是达到成熟度3级。评估组织当前的成熟度级别的手段之一是软件能力评估(SCE)。SCE通过评估软件过程(一般以方针陈述的形式)和项目实践来确定该组织是否言行一致。组织的过程体现了如实记录所做的工作,项目实施(对该过程的特定剪裁和解释)应该证明说到做到。
现在全球许多不同的组织以CMM为协助企业作全面的过程改进活动,除了肯定其软件成熟度外,更像征具有跨足国际市场的能力。现在通过CMM5级认证的组织达到了一百多家。
CMMI
CMM的成功促使其他学科也相继开发类似的过程改进模型,例如系统工程、需求工程、人力资源、集成产品开发、软件采购等等,从CMM衍生出了一些改善模型,比如:SW-CMM,SE-CMM,IPD-CMM等。不过,在同一个组织中多个过程改进模型的存在可能会引起冲突和混淆。CMMI就是为了解决怎么保持这些模式之间的协调。
由业界、美国政府和卡内基·梅隆大学软件工程研究所率先倡导的能力成熟度模型集成(CMMI)项目致力于帮助企业缓解这种困境。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
与原有的能力成熟度模型类似,CMMI也包括了在不同领域建立有效过程的必要元素,反映了业界普遍认可的"最佳"实践;专业领域覆盖软件工程、系统工程、集成产品开发和系统采购。在此前提下,CMMI为企业的过程构建和改进提供了指导和框架作用;同时为企业评审自己的过程提供了可参照的行业基准。
CMMI的源模型:软件能力成熟度模型2.0版,C稿;电子行业协会临时标准(EIA/IS)731;集成产品开发能力成熟度模型(IPD- CMM)。
CMMI的原则:
1. 强调高层管理者的支持。过程改进往往也是由高层管理者认识和提出的,大力度的、一致的支持是过程改进的关键。
2. 仔细确定改进目标,首先应该对给定时间内的所能完成的改进目标进行正确的估计和定义并制定计划。选择能够达到的目标和能够看到对组织的效益。
3. 选择最佳实践,应该基于组织现有的软件活动和过程财富,参考其他标准模型,取其精华去其糟粕,得到新的实践活动模型。
4. 过程改进要与组织的商务目标一致,与发展战略紧密结合。
CMMI目标:
1. 为提高组织过程和管理产品开发、发布和维护能力的提供保障。
2. 帮助组织客观评价自身能力成熟度和过程域能力,为过程改进建立优先级以及执行过程改进。
CMMI的方法:
1 决定哪个CMMI模型等级最适合组织过程改进需要。
2 选择模型的表示法是连续式还是阶段式。
3 决定组织需要用到的模型中的知识领域。
4 类似CMM提出的过程改进6步,集成化过程改进分成:开始集成过程改进,建造集成改善平台,集成传统过程,启动新过程,进行改 进评估。
CMMI内容
CMMI内容分为"要求"、"期望"和"提供信息"三个级别,来衡量模型包括的质量重要性和作用。最重要的是"要求"级别,是模型和过程改进的基础。第二级别"期望"在过程改进中起到主要作用,但是某些情况不是必须的可能不会出现在成功的组织模型中。"提供的信息"构成了模型的主要部分,为过程改进提供了有用的指导,在许多情况下他们对需要和期望的构件做了进一步说明。
"要求"的模型构件是目标,代表了过程改进想要达到的最终状态,它的实现表示了项目和过程控制已经达到了某种水平。当一个目标对应一个关键过程域,就称为"特定目标";对应整个关键过程域就称为"公用目标"。整个CMMI模型包括了54个特定目标,每个关键过程域都对应了一到四个特定目标。每个目标的描述都是非常简捷的,为了充分理解要求的目标就是扩展"期望"的构件。
"期望"的构件是方法,代表了达到目标的实践手段和补充认识。每个方法都能映射到一个目标上,当一个方法对一个目标是唯一就是"特定方法";而能适用于所有目标时就是"公用方法"。CMMI模型包括了186个特定方法,每个目标有两到七个方法对应。
CMMI包括了10种"提供的信息":目的,概括和总结了关键过程域的特定目标;介绍说明,介绍关键过程域的范围、性质和实际方法和影响等特征;引用,关键过程域之间的指向是通过引用;名字,表示了关键过程域的构件;方法和目标关系,关键过程域中方法映射到目标的关系表;注释,注释关键过程域的其他模型构件的信息来源;典型工作产品集,定义关键过程域中执行方法时候产生的工作产品;子方法,通过方法活动的分解和详细描述;学科扩充,CMMI对应学科是独立的,这里提供了对应特定学科的扩展;公用方法的详细描述,关键过程域中公用方法应用实践的详细描述。
CMMI提供了阶段式和连续式两种表示方法,但是这两种表示法在逻辑上是等价的。我们熟悉的SW-CMM软件能力成熟模型就是阶段式的模型,SE-CMM系统工程模型是连续式模型,而IPD-CMM集成产品开发模型结合了阶段式和连续式两者的特点。
阶段式方法将模型表示为一系列"成熟度等级"阶段,每个阶段都有一组KPA指出一个组织应集中于何处以改善其组织过程,每个KPA用满足其目标的方法来描述,过程改进通过在一个特定的成熟度等级中满足所有KPA的目标而实现的。
连续式模型没有像阶段式那样的分散阶段,模型的KPA中的方法是当KPA的外部形式,并可应用于所有的KAP中,通过实现公用方法来改进过程。它不专门指出目标,而是强调方法。组织可以根据自身情况适当裁剪连续模型并以确定的KPA为改进目标。
两种表示法的差异反应了为每个能力和成熟度等级描述过程而使用的方法,他们虽然描述的机制可能不同,但是两种表示方法通过采用公用的目标和方法作为需要的和期望的模型元素,而达到了相同的改善目的。
======================================================================
CMMI 模型的前身是 SW-CMM 和 SE-CMM,前者就是我们指的CMM。CMMI与SW-CMM的主要区别就是覆盖了许多领域;到目前为止包括四个下面领域:
1.软件工程(SW-CMM)
软件工程的对象是软件系统的开发活动,要求实现软件开发、运行、维护活动系统化、制度化、量化。
2.系统工程(SE-CMM)
系统工程的对象是全套系统的开发活动,可能包括也可能不包括软件。系统工程的核心是将客户的需求、期望和约束条件转化为产品解决方案,并对解决方案的实现提供全程的支持。
3.集成的产品和过程开发(IPPD-CMM)
集成的产品和过程开发是指在产品生命周期中,通过所有相关人员的通力合作,采用系统化的进程来更好地满足客户的需求、期望和要求。如果项目或企业选择IPPD进程,则需要选用模型中所有与IPPD相关的实践。
4.采购(SS-CMM)
采购的内容适用于那些供应商的行为对项目的成功与否起到关键作用的项目。主要内容包括:识别并评价产品的潜在来源、确定需要采购的产品的目标供应商、监控并分析供应商的实施过程、评价供应商提供的工作产品以及对供应协议和供应关系进行适当的调整。
在以上模块中,企业可以选择软件工程,或系统工程,也可以都选择。集成的产品和过程开发和采购主要是配合软件工程和系统工程的内容使用。例如,纯软件企业可以选择CMMI中的软件工程的内容;设备制造企业可以选择系统工程和采购;集成的企业可以选择软件工程、系统工程和集成的产品和过程开发。CMMI中的大部分内容是适用各不同领域的,但是实施中会有显着的差别,因此模型中提供了"不同领域应用详解"。
CMM的基于活动的度量方法和瀑布过程的有次序的、基于活动的管理规范有非常密切的联系,更适合瀑布型的开发过程。而CMMI相对CMM更一步支持迭代开发过程和经济动机推动组织采用基于结果的方法:开发业务案例、构想和原型方案;细化后纳入基线结构、可用发布,最后定为现场版本的发布。虽然CMMI保留了基于活动的方法,它的确集成了软件产业内很多现代的最好的实践,因此它很大程度上淡化了和瀑布思想的联系。
在 CMMI 模型中在保留了CMM阶段式模式的基础上,出现了连续式模型,这样可以帮助一个组织以及这个组织的客户更加客观和全面的了解它的过程成熟度。同时,连续模型的采用可以给一个组织在进行过程改进的时候带来更大的自主性,不用再像CMM 中 一样,受到等级的严格限制。这种改进的好处是灵活性和客观性强,弱点在于由于缺乏指导,一个组织可能缺乏对关键过程域之间依赖关系的正确理解而片面的实施过程,造成一些过程成为空中楼阁,缺少其他过程的支撑。两种表现方式(连续的和阶段的)从他们所涵盖的过程区域上来说并没有不同,不同的是过程区域的组织方式以及对成熟度(能力)级别的判断方式。
CMMI 模型中比 CMM 进一步强化了对需求的重视。在 CMM 中,关于需求只有需求管理这一个关键过程域,也就是说,强调对有质量的需求进行管理,而如何获取需求则没有提出明确的要求。在CMMI的阶段模型中,3 级有一个独立的关键过程域叫做需求开发,提出了对如何获取优秀的需求的要求和方法。CMMI 模型对工程活动进行了一定的强化。在CMM中,只有3级中的软件产品工程和同行评审两个关键过程域是与工程过程密切相关的,而在CMMI中,则将需求开发,验证,确认,技术解决方案,产品集成这些工程过程活动都作为单独的关键过程域进行了要求,从而在实践上提出了对工程的更高要求和更具体的指导。CMMI中还强调了风险管理。不像在CMM 中把风险的管理分散在项目计划和项目跟踪与监控中进行要求,CMMI3级里单独提出了一个独立的关键过程域叫做风险管理。