《A++ 敏捷开发》- 26 根与翼

news2024/12/23 2:00:09

中国社会一直非常强调家庭价值观,希望实现家族的持续传承,家族有族谱,代代相传的关系对每个家庭成员的成长产生深远影响。我们每个人都只是人类进化过程中的短暂过渡。父母普遍希望把最好的东西传承给下一代。然而我们需要问自己,什么东西能够持久,仅仅是财富和金钱吗?
继承大量财富,但如果不懂得如何正确利用,可能反而会削弱个人的竞争力,适得其反,最终成为社会的蛀虫。
《七个习惯》的作者史蒂芬•柯维(Stephen Covey)在书的结尾(最后一章)中提到,我们可以传承给下一代并具有持久价值的,只有2样东西:根和翼。

“There are only two lasting bequests we can give our children - one is roots, the other wings.”

回看人类过去130年,除了打了2次世界大战外,也做了很多前所未有的创新:

  • 电灯 (煤气灯)
  • 汽车 (马车)
  • 飞机
  • 摩天大厦
  • 半导体,集成电路
  • 计算机
  • 互联网
  • 移动电话

现在我们使用的的发明其实都是‘发明者’依据之前人的经验演化出来的。 我在爱丁堡大学的古乐器博物馆 见过各种奇形怪状的古乐器,这些都是 原来是现代乐队里的铜管和木管乐器,例如双簧管、单簧管、巴松管、圆号、小号等的前身,有如达尔文先生物种起源里物种演化一样,去弱留强,最终演化成现代各种乐器。

现在我们熟悉的口琴和手风琴,其实都是欧洲人依据中国的笙改造出来的。

人类创新并不仅限于前述领域,这只是我们看到的凤毛麟角,其他在医疗、电影、音乐、数学等各个领域都表现出了卓越的创新力,这些都是祖先留给我们的宝贵财富。
举例来说,如果19世纪欧洲城市的居民能够坐上像“Back to the Future”那样的时间跑车,见到200年后现代人的生活,他们将感到难以置信。
正因为每一代人都有承传前人的成果,继续发展,我们人类才能有现在的成就。这就是我们的根。

除了根的传承,祖先还留给了我们“翅膀”,赋予我们自由思考的能力打破负基因传承,而不是简单地将这些基因传给下一代。

以下面2故事介绍2种不同的策略。

飞行实验

人类一直都想飞上天,中西方对此都有尝试,但始终以失败告终。例如,传说明代火箭专家万户陶成道尝试在凳子上绑47根火箭,又绑上风筝做飞行试验,结果爆炸而亡。15世纪,意大利人达芬奇也模仿鸟类的翅膀设计飞行器,但只是留在图纸设计阶段。

莱特兄弟 (Wright brothers) 在1903年首次成功进行机动飞机飞行,

在12月17日的第四次飞行在空中飞行了59秒,航程达到259米。

404页替换图片.jpg


莱特兄弟并非工程或数学天才,但为了实现“飞翔”的梦想,不断从失败找改进,从1899年开始不断试验:
1900年,他们首次试验滑翔机,但效果并不理想。
1901年,他们把机翼的面积从15扩大到26平米,可以飞行120米,但他们发现试验数据与计算数据不符。为了找出原因,他们制造了风洞来测量各种机翼设计的浮力。他们试验了200种机翼。利用收集数据,他们开始制作第3架滑翔机。
1902年9月,他们完成了1000次试飞,其中空中飞行最长可以达到26秒。也因为这些经验,他们知道如何设计飞机的舵,让飞行员更好控制飞机,并开始设计使用4气缸发动机加上螺旋桨来准备设计机动飞机。
1903年成功飞行后,他们继续改善设计。
1905年10月,飞机能在空中飞行39分钟,并且能在飞行员控制下转圈。
飞行是在不稳定的大气条件下操控不稳定的机器,充满了许多变数,因此非常困难。最终,莱特兄弟通过不断实验,发明了各种重要部件,包括机翼、舵、发动机、螺旋桨等,并研究了它们之间是如何相互影响。

从莱特兄弟的飞行故事,可以看到他们兄弟为了"飞天梦"能成功绝非偶然,不仅单靠意念和冲劲,更重要是不断试验,从自己和前人的失败中获取经验教训,收集数据持续改进。

= = = =

2年后的1905年,在大西洋对岸,在瑞士伯尔尼(Bern) 一名26岁专利局员工发表了5篇科学论文,其中第4篇提出时间与空间并非固定,而是相对观察者的移动,打破了自三百年前牛顿力学的观点。这篇后来被认为是物理界最具影响力的论文就是爱因斯坦的《狭义相对论》。
为什么这年轻小伙子能做到?
好奇心和年轻人无限的想象力。
触动他的好奇心是之前物理学家从实验发现光速是不变的,但这与牛顿的传统力学有冲突。但他不是理学家,没有实验室,他只能单凭想象力,利用一系列的假想试验,创建了狭义相对论公式。

假设光速是C,高速火车地板与车顶的高度是 C/2,光从高速火车地板射到车顶,然后再发反射回地板总共时间是1单位。

假设高速火车以高速v从左往右运行,一位静止的人从外面看这火车,也看到光从火车地板射到车顶,然后反射回到地板,因火车已经往右移动了vt,所以光线的总长度是Ct (=Ct/2+Ct/2)。 如果光速C是永恒不变,时间t必须大于一才对,而且v越大,t也越大。所以在高速火车里的时间比外面地面静止的时间短。了解了因光速不变,时间相对必须变的道理,便能理解为什么会出现“太空飞行员乘高速火箭太空旅行,30天后回到地球会发现实际已经过了几十年,亲人都已经去世”的可能。

26章三角图.jpg

(爱因斯坦后面被访问时说“我很骄傲的一点是,我有着大把大把的空闲时间。”因为在专利局工作,所以他有很多时间,可以尽情思考、想象。)

日本数学家樱井进先生从小一直崇拜爱因斯坦,他总结:
“他教会我要去珍视人类所拥有的‘想象力’。想象力比知识更重要,因为知识是有限的,而想象力概括着世界上的一切。他教会我要去珍视人类所拥有的“想象力”。正因为有着想象力的翅膀,人类才能抵达去不了的地方,看见看不见的东西。而我们每个人都有着这双翅膀。展翅高飞。”
他发表相对论时,大部分物理界学者觉得这只是理论,无法验证,也缺乏实用价值。

科学本身就是一种喜悦,是一场旅行,旅行者能看更多其他人看不见的风景。爱因斯坦教会我享受数学、科学研究之旅的乐趣。将科学运用到实际中去是另外一回事。 (随着科技不断发展,相对论启发了后面的“宇宙大爆炸”和“黑洞”,也帮我们能精准地测量卫星的时间与定位。)

“我们都不知道。我们所了解的知识和小学生没什么两样。” 爱因斯坦也说:“这个世界最难以理解的部分,就是去理解这个世界。” 也正因为这年轻人敢面对这世界最难的挑战,使人类的物理认知上了一个台阶。 后者的策略是依赖年轻人的无限想象力,抛开前人留下来的包袱,达到创新。

= = = =

虽然我们都继承了祖先的根与翼,但不是每人都能为人类继续发展作出贡献,要具备什么重要元素才能做到?

To be a powerful transition person, one must first change his inner first.

要成为有影响力的过渡者(a powerful transition person),无论采用以上哪类策略,我们必须首先进行由内而外的改变,这样的改变才能持久。
(有了这内部的转变,任何人都可以在自己可控的范围内进行创新和持续改善。)

以上源自Covey先生在《七个习惯》最后一章的总结。

‘魔术师’乔布斯1997年重回苹果,13年后再把苹果带上高峰

1985年乔布斯被迫离开苹果公司,独资开创NEXT公司,到1997年NEXT被苹果公司收购,乔布斯重返苹果(当时苹果公司在破产边缘),到2010年将苹果公司带回到美国市值最高的科技公司,中间也经历了多次失败。

乔布斯在他的传记里说,“是什么力量推动我? 我觉得大多数创新者(Creative people) 都很希望感谢我们的前辈,感激他们对人类的贡献。
我并没有发明我用的语言或数学。我的食物基本都不是我自己做的,衣服更是一件都没做过。我所做的每一件事都有赖于前人的贡献。我们很多人都想回馈社会,在历史的长河中再添上一笔。因为我们不会写鲍勃•迪伦(Bob Dylan)的歌或汤姆•斯托帕德(Tom Stoppard)的戏剧,我们只能用自己能掌握的方式去表达、体现。试图用自己的才能去表达内心感受,去表达对前人的感激、并做点贡献,那就是推动我的力量。”

共通点

为什么莱特兄弟、爱因斯坦、乔布斯能在航天、物理、电子产品领域作出突破性重大贡献?他们的故事都有两个共通点:

  • 专注 -- 例如:
    • 专心研究飞机
    • 解决物理难题,更好理解这个世界
    • 结合新技术研发针对个人市场的领先电子产品
  • 长期锲而不舍 -- 从启蒙到成功都经过很多年不断努力,中间困难重重,必须内心坚定,也正是这心态让他们成为有影响力的过渡者,继续传承人类的根与翼。例如,乔布斯从被迫离开开始,前后经过25年,经过iMac iPod iPhone iPAD 等,最终才使苹果再创辉煌(因为这是公司级突破,不是个人,所需时间更长)。

“你的例子都是超级明星级大人物,根与翼概念不一定适用于我们这些普通人群。”
“为什么你认定自己不能成为有影响力的过渡者?”我问。
每次听到这类反驳,我都会接着讲我的故事。

因从小很喜欢看书,从小学到大学毕业一切都很顺利,没有遇过什么挫败 – 例如,因80年代香港经济还是高速发展,大学毕业后不难找高薪岗位,每年2位数调薪,所以对自己的能力信心爆棚,也看不出自己的问题、弱点。

但香港缺乏研发工作,1992年我31岁,第一位小孩出生,但工程职业生涯已经到了天花板,如要继续提高收入必须转到市场和销售岗。 但转销售后虽然能达标,但一直没有特出表现, 最终在2000年被公司辞退沦为失业汉。失业后审视自己的问题和不足:发现自己一直保持工程师思维,总觉得只要方案具优良、具竞争力,客户无理由不买!但不知道产品只是商务购买的其中一个考虑因素,市场如战场,有太多的因素会导致失败。最关键是自己一直都没有这意识,也不觉得有问题。

现在静下心来想,自己一直都是先制定总体计划(最短也几个月),然后按计划执行的传统工作模式,这方式在8、90年代香港没有问题,但2000年后市场环境快速变化,思路必须转变过来,当时也刚读完软件工程,学过敏捷和精益等概念,自己的工作方式也转为每一小步试验,有效果才做下一小步的做法。例如写这本书里,每写完一个章节,必须找我的“写作伙伴”们看看,让他们给反馈,有些专门挑语法问题,有些能专门看出总体架构问题。经过他们的反馈,我再修正,然后才会在公共媒体上发布。

想尝试创业,但创业很难,风险非常大。不能用传统方式制定大计划,只可以不断尝试各种能产生收入的机会,尝试,看看效果。所以开头几年试过各种的工作,比如给企业做项目管理培训,进高校当讲师,帮朋友公司做市场调研与分析,并写产品推广方案书等等,为自己带来一些收入。因为刚读完软件工程,在富士通工作时也与一些CMMI5级软件开发公司合作过,并开始探索软件工程的质量改进和参与CMMI评估,慢慢学习(因毕业后一直没做过软件开发)。

从2006年始,香港政府开始鼓励软件开发公司使用CMMI模型做改进与评估,提供资助,我便开始专注软件开发CMMI过程改进的培训与评估,也开始从长三角地区开始,与大陆本地公司合作提供CMMI服务(虽然我成本较高,但CMMI源自美国,绝大部分材料都是英语,与大陆高校老师比较,我是直接读英文原文,比单看中文翻译能更好理解。)

十年后,2016年左右,越来越多团队使用敏捷开发,我便开始深入比较各种敏捷开发方法。2018年,正值美国PMI推出ACP个人证书,我开始与培训机构合作教学生ACP,发现如果团队能在每次迭代回顾利用数据(缺陷和返工)分析根因能更有效提升(背后其实是改善,CMMI, 敏捷,精益等原则)。

越接触更多开发团队越发现要有改进动力不仅仅是工程的问题,开始再探索人性相关问题(虽然以前读MBA时接触过,再细读 X-Y理论,组织发展 (Organization Development)的方法与理论), 并在培训 和 现场辅导中不断实验有效的方法帮助团队提升。

学习敏捷大师和软件工程学院科学家与学者等前辈们的贡献,成为我的软件工程的根,没有他们,我不可能从零自己创造这么多东西出来。 不固步自封,因市场环境变化,从传统模式改变为精益思路,是我的翼,这都是我自身根和翼的经历,让我可以成功走过24年独自创业之路,也帮我成功出版第一本书 (也希望这书能为软件工程做些微小的贡献)。 根与翼如能用得其所确实能促成有影响力的过渡者。

“所以任何人,只要把心态转过来,并能锲而不舍,都有机会。”我总结说。
“好吧。但你说这些跟敏捷开发、持续改善有什么关系?我没有期望能成为爱因斯坦!”

我认识很多软件开发公司虽然已经做了很多轮的CMMI评估(3年一轮)但一直没有任何实质的改善,是什么原因?

他们误以为CMMI是一套最佳过程,只要完全按这标准执行,开发质量便得以保障。

本来美国设计这模型时,因对团队每个岗位都要有用,覆盖的范围很广,除了软件工程 从需求到最终验证确认外,还包括项目管理、配置管理、PDCA 试点与推广、度量与根因分析等。虽然模型是面面俱全。但企业使用这模型来做PDCA过程改进时应每一轮试点应只针对最大的痛点做改善,有显著改善后再针对其次的痛点改善,最终满足模型所有实践范围。所以每当美国软件工程协会(原创CMMI模型的机构)听到某企业能快速“高效”在12月内从零开始,达到三级评估要求,都会觉得是不可思议的笑话。

与成为有效过渡者的要素一样,企业、团队、个人要有效改善,必须有针对性,大部分企业没有利用数据、找根因、做改进。所以开始时应只针对缺陷排除和返工工时,每次迭代回顾时分析根因。

“听你这样说,反观我们团队,我立马想到有很多地方需要改进,例如需求调研、开发流程、持续集成、测试自动化、配置管理等。为什么你提议只针对减少缺陷引起的返工做改进?”

要理解背后的原因,先听听质量大师Dr Juran回顾过去质量改善的成功要素:

  • All Improvement takes place Project by Project 所有改进只能按项目逐个进行
  • Backlog of Improvement projects is huge 潜在的改进项目非常多
  • Quality Improvement does not come Free 质量改进并非免费
  • Major gains come from the Vital few projects 主要效果(收益)来自少数重要项目
  • Quality improvement extends to All parameters 质量改进可扩展到各类参数 (如生产率、进度、安全性、环境等)

(以上源自 Juran 博士《 Juran Quality Handbook 》第五章质量改进。)

所以如果开始时同时对4 – 5 个方向同时做改进,反而会失去聚焦,难以尽早看到改进的效果。

但如果只针对降低缺陷引起的返工,目标明确不仅让大家容易接受,而且也容易扩展到各个过程,例如需求、开放、产品集成,甚至配置管理。

因开始时能否引起高层对改进的兴趣很重要,与企业领导的首次见面,我也都会讲以下内容,说明团队如何分析迭代缺陷数据,开始定量管理。

TED演讲式总结

今年被质量经理邀请参加他们的质量沙龙,但只有30分钟,我就用了TED演讲思路,用了17分钟讲软件开发公司的常见质量问题和改进措施。

你觉得下面4种工作,哪一类工种占的工作量最多?
  1. 编码与代码设计。
  2. 交付后的所有工作,包括维护、更新与缺陷修正。
  3. 交付前的评审、静态扫描、测试与缺陷修正。
  4. 项目管理与监控。

从2012年Capers Jones对美国软件公司的统计中看到,编码只排第二(占开发工作量的25%),测试与评审和缺陷修改的总工作量才是排第一(占30%)。你选1.编码,其实大部分耗时的不是写代码,而是修正错误代码。软件开发有特点,缺陷发现越晚,修改耗费的工作量就越大。如果早期发现,可能只需要花费半小时、1小时修正。原因很简单,当已经集成为一个十几万行的系统,里面有很多组件。如果集成完成后使用时才发现BUG,首先很难找出是哪里代码出问题,然后为了验证代码修正对不对,首先要测试单元模块通不通过,再测集成通不通,最后也通过系统测试才能给客户。但是如果前面自己自测、集成测试、评审时尽早发现并解决问题,便能节省了很多时间。
但是公司大部分的缺陷都是在系统测试或集成测试时暴露,有些产品线的缺陷数甚至达到4位数。如果可以把这些缺陷减少一半,能为公司节省下接近一半工作量,同时也改善产品质量,对吗?
这道理大家都知道,但是为什么没有改善?怎样才能改变现状,提前发现缺陷?
这种改进绝对不能下达一个命令,或者领导开会讲讲就能做到。我先说一个故事,有一家上万人的大型公司,质量经理说公司一直都非常注重量化管理,定了各种KPI给团队遵守,每个月主管分析数据。发现开始时是有些改善,但过了一段时候,后面作用就不大了。而且当那些数字变成KPI以后,发现有数字作假。所以我跟做分析的质量经理说,如果希望量化管理就必须要从团队提升开始,而不是靠总体数据分析,制订公司级改进策略。度量与分析最主要的作用是帮助团队做好根因分析,制订纠正措施,在下一轮迭代做提升。
比如你们现在都是按2~4周一次发版迭代,有些团队确实也有做复盘,但是他们不理解纠正措施和改正的区分,他们只是针对个别的缺陷去修改,这种还是会导致因为没有修正系统的基本问题,缺陷、事故还是会重现。但是如果我们整个团队每轮迭代分析数据、找根因、制订纠正措施,在下一个迭代验证是否有效。要养成这个习惯,最重要还是要团队动起来。首先领导要给他们有充足的时间去做复盘。要做好这种根因分析的复盘差不多要3个小时,因为要收集数据、分析和讨论。
我们可以先从分析缺陷排除率开始,让团队开始养成复盘分析根因的习惯。缺陷有真实数据,让团队分析为什么需求引入的缺陷这么多?引导团队一起用“五个为什么”找出根因。让团队人员知道现在的质量水平。一般问需求人员自己质量水平怎么样?他很会说我们需求评审发现很少BUG,代表质量好。其实他误解了一些结果成绩的度量和过程的度量。他在评审过程里面没有发现不表示需求没缺陷,等到客户发现缺陷更糟糕。
我们也可以利用一些预测模型、统计分析的方法。在迭代里让团队不仅制订纠正措施,也有定量化目标,例如需求评审应该发现多少缺陷?单元测试应该发现多少缺陷?如果没达到预计范围,表示很可能还是有不少缺陷会遗漏到后面。所以按这个目标就可以更好驱动他做好前面的评审和单元测试。 如果团队开始有分析根因并制订纠正措施的习惯,领导也一直关注团队的持续改进,会不时问:“下次迭代?改进了多少?”,就可以把根因分析扩大。除了分析缺陷外,也可以扩大根因分析其他改进方向。
怎么可以开始?
只是把小孩扔进海里,他是学不会游泳的。所以通常建议先进行培训,举办两天的工作坊,用一些实际的数据,带领大家做一些互动根因分析练习,然后公司内部教练辅导团队,帮助他们做好迭代里复盘。

如果有老师教练教大家各种分析技巧,并能帮助大家客观看到团队水平,大多数团队对针对降低客户缺陷率和返工这明确量化目标都会感兴趣,认同大家一起分析迭代缺陷和返工量数据,制定下一轮改进计划与措施(好比《汤姆历险记》里,Tom认为给花园栅栏涂漆是件极富挑战,一般人难以做好的任务,他的朋友圈都会很想参加,甚至愿意付Tom礼物)。反之,如果是为了公司顺利通过3年一次的评估,大多数人都会说后面3-6 个月的非常忙,没有时间。

但任何显著的提升都同样需要有他们那种内心思维的转变。 也正因为改变固有思想和习惯很不容易,如果个人、团队、企业没有改变思维,满意现状,觉得暂时不需要继续改善,敏捷大师提供的敏捷宣言、12条原则和各种方法(如SCRUM、XP),和相关的培训、技巧学习,最终都无法对做好敏捷开发出效果。

反之,如果个人和企业领导不满意现在的工作状态,真心相信必须改善质量,有危机感,觉得这些应是工作的重要部分,是唯一能真正完善时,不一定单纯依赖敏捷的原则和方法,甚至可以在改善过程中创建更佳方法与技巧。

团队和企业要健康成长依赖以下主要因素(与上一章创新的要素类似):

  • 高层要制订高的目标,也要提供资源。
    • 可参考开始过程改进之旅里面的获取高层支持,尽早估算改进能节省多少成本,要求立项,把过程改进作为项目来管理。
  • 改进要有专注。
    • 例如针对如何减少缺陷返工,尽早在评审和前期测试发现缺陷,如何做好迭代回顾部分能帮助团队了解应如何开始。
  • 团队成员的能力与动力。
    • 个人提升、自我管理、代码质量等部分能帮助提升。

有竞争才有进步,不知道自身的不足,缺乏危机感是改善的最大阻力。

东北虎作为濒危物种,目前在国内的数量估计不超过30只,因此国家动物保护组织采取了多项措施予以保护,其中包括人工饲养。专家曾试图将这些人工饲养的东北虎重新放归野外,但这一任务极为艰巨。它们是否能够在野外独立存活下来,仍然是一个未知数。有一部纪录片生动地讲述了动物保护组织在这一过程中所面临的各种挑战和困难。

要确保老虎在野外能独立生存,它们必须能够自行觅食。在自然环境中,它们主要的捕猎对象就是鹿,但鹿非常敏捷,时速可达50公里,而且具备很强的耐力。因此,专家需要评估老虎是否能够成功捕猎到鹿,否则就不能将它们放归到野外。在评估过程中,专家发现老虎的奔跑和狩猎能力明显不如野生老虎,因为缺少运动,它们缺乏狩猎的能力。因此,专家设计了多种锻炼方法,如使用车辆牵引轮胎,并插上鲜肉块来刺激它们奔跑。经过一系列的锻炼,老虎的体力得到了恢复,但能否成功捕猎到鹿仍然是未知数。接着试验是用汽车拖着鹿的尸体吸引老虎奔跑。然而,有些老虎因为在平时的饲养过程中并没有吃过鹿肉,所以对此并不感兴趣。最终只有两三只老虎追着汽车跑,试图抓到鹿。最后有2只年轻的老虎获胜了。但要将鹿的尸体作为奖励喂给获胜的老虎也并不容易,发现它们对着鹿的尸体不知道如何下口,因为以前都是由饲养员将肉切好后喂给它们吃。最终这2只老虎花了数小时才慢慢学会如何吃到鹿肉。

环境是影响团队能力与动力的重要因素。看完这部纪录片,我立刻想到了有些本来很有抱负的年轻程序员,也是同样受到环境的影响。公司大部分程序员都只是天天赶工,不注重质量,管理层也习惯了大量的缺陷等到后面测试阶段才暴露,大量返工这种生产方式,如何能希望这些年轻的程序员注重代码质量。跟保护区把饲养的东北虎放归野外一样,但这些新人几个月后也习惯了大家的工作模式,后面要改变习惯便非常难。需要经过艰苦的培训,才能提高大家的竞争力。关键是管理层必须认识到,如果自己也满足于当前的模式、质量水平,对产品质量和不断改进没有要求,那么公司的产品质量将永远无法提高,也难以与其他公司竞争。


针对软件开发,我们这一代继承了之前从60年代以来的各种硬件软件的创新,给予我们继续发展的“根”。
敏捷宣言指出了传统瀑布式开发和传统计划驱动开发的弊端,给我们“翼”,为有能力的团队提供了机会,可以更快速地开发出高质量的产品。
千万不要误以为这过程会一帆风顺,按计划执行就能达到目标。实际肯定会遇到种种无法预料的问题,但只要个人、团队、企业了解当前水平,分析根因,采取纠正措施、持续改善,像第一章丰田方式的习惯4:“持续改善没有停止”—— 龟兔赛跑里的乌龟。

以上简单道理不仅适用于敏捷开发,但回顾周围,有多少人、团队能做到?

即使知道了最佳实践方法,如果没有动力(心态转变),最终只是梦想。

反观我的动力是什么?虽然软件工程发展历史不长(50年代才出现第一台大型计算机),但发展速度惊人。环顾周围,几乎难以找到没有附带软件的产品。 在此过程中,我们受益于软件工程的前辈,包括软件工程学院的 Humphrey先生,发表敏捷宣言的17位敏捷大师等,以及质量改善和组织发展的研究,如 Juran 博士、Lewin 教授、Weisbord 先生等。希望在我有限的能力和时间内,尽可能系统地总结这20多年与软件团队交流中的所见所闻和经验教训,解读敏捷开发最佳实践,方便大家参考。也希望各位同仁可以找到驱动个人或团队改善的动力,沿着前辈的步伐一路前行,持续改善。

参考 References

  1. Covey, Stephen R. The Seven Habits of Highly Effective People. (1990) Fireside Book
  2. Isaacson, Walter. Steve Jobs. (2011)
  3. Juran, Joseph M. Juran's Quality Handbook (5 ed., 1999) McGraw - Hill

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2135006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Go】Go语言中延迟函数、函数数据的类型、匿名函数、闭包等高阶函数用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

每日处理250亿个事件,Canva如何应对数据洪流

在这个数据被称为“新石油”的时代,如何有效地处理海量信息流显得尤为重要。作为广受欢迎的设计平台,Canva不仅因其用户友好的界面而备受关注,还因其高效利用Amazon Kinesis管理每日高达250亿个事件而成为热议焦点。让我们深入探讨Canva是如何…

【案例70】invalid secrity token(null)

问题现象 系统登录时提示invalid secrity token(null) 问题分析 排查发现令牌种子没有配置或被人为修改 解决方案 1、登录环境。代码路径下bin下有个sysconfig.bat。左侧选“系统配置”。右侧点“安全”。读取保存一下。 2、或者找一个好用的环境。把ierp/bin下的prop.xml文…

Redis简介、常用命令及优化

文章目录 一、关系数据库​​与非关系型数据库概述1. 关系型数据库2. 非关系型数据库3.关系数据库与非关系型数据库区别 二、Redis简介1.Redis的单线程模式2.Redis 优点3.Redis 缺点 三、安装redis四、Redis 命令工具五、Redis 数据库常用命令六、Redis 多数据库常用命令七、Re…

【算法专题--回文】最长回文子串 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、预备知识 🥝 什么回文串 ? 四、题目解析 五、总结与提炼 六、共勉 一、前言 最长回文子串 这道题,可以说是--回文专题 --,最经典的一道题,也是在面试中频率最高…

哈希表和双向链表实现LRU

LRU(Least Recently Used)即最近最少使用,是一种内存管理算法。最近在Linux的缓冲区管理也看到了使用LRU算法,即利用哈希表进行 O(1) 复杂度的快速查找,利用双向链表(里面的元素是缓冲头)对缓冲…

再次进阶 舞台王者 第八季完美童模全球赛代言人【吴浩美】赛场+秀场超燃合集

7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——吴浩美迎来了她舞台生涯的璀璨时刻。 代言人——吴浩美,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台,作为开…

【趣学Python算法100例】兔子产子

问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少? 题目解析 兔子产子问题是一个有趣的古典数学问题&#xff0c…

Office关闭安全提示

每次启动都要提示这个,怎么关?

大数据-135 - ClickHouse 集群 - 数据类型 实际测试

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数

title: Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数 date: 2024/9/14 updated: 2024/9/14 author: cmdragon excerpt: 通过使用 Nuxt Kit 的自动导入功能,您可以更高效地管理和使用公共函数、组合式函数和 Vue API。无论是单个导入、目录导入还是从第三方模块导入…

GMB外链是什么?

GMB外链其实就是百万外链,它是一种通过大量反向链接来提升网站页面权重的方法。如果你刚建了一个新网站,想在短时间内被收录并获得排名,GMB外链能帮你做到这点。它不像传统SEO那样需要等待好几个月的效果,GMB外链能在24小时内帮你…

vector(2)

前言 通过上一节的学习,我们知道了vector中可以存放各种类型的数据,这就意味着vector之中不仅仅可以存放int、char等内置类型,还可以存放vector和string等类型,我们结合底层的具体情况来具体分析 vector的复用(套娃&a…

光控资本:股票增发是什么意思?股票增发的形式?

股票增发配售是已上市的公司通过指定投资者(如大股东或组织投资者)或全部投资者额定发行股份搜集资金的融资办法。 留意:股票增发后,股价会除权下降。由于增发后股本扩大了,那么每股收益与每股净资产均下降&#xff0…

今天一次讲明白C++条件变量

在C中,std::condition_variable 条件变量是一个同步原语,它允许一个或多个线程在某个条件成立时,被另一个线程唤醒。std::condition_variable 条件变量通常与互斥锁(std::mutex)一起使用,以保护共享数据和同…

David Baker 任科学顾问,初创公司发布世界最大蛋白质相互作用数据库,已获 8 轮融资

蛋白质-蛋白质相互作用 (Protein-Protein Interactions, PPI) 是细胞生命活动的重要组成部分,在调控和维持细胞的生理功能中(如细胞的信号传导、代谢反应和基因表达)发挥着不可或缺的作用。 然而目前 PPl 数据库中的数据相对较少&#xff0c…

穿越病毒区-第15届蓝桥省赛Scratch中级组真题第2题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第187讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,…

CCF201912_1

题解&#xff1a; #include<bits/stdc.h>using namespace std;int n;bool shouldSkip(int num) {if (num % 7 0){return true;}while (num > 0){if (num % 10 7){return true;}num / 10;}return false; } int main() {scanf("%d", &n);int b[4] { 0…

Android Studio 安装配置教程(Windows最详细版)

目录 前言 Android Studio 下载 Android Studio 安装 Android Studio 使用 一、创建默认项目&#xff08;Compose&#xff09; 二、创建常规项目 三、使用ViewBinding 四、查看Gradle版本、SDK版本、JDK版本 ① Gradle版本 ② SDK版本 ③ JDK版本 前言 Android开发…

跟《经济学人》学英文:2024年09月14日这期 The sweet story of Peru’s blueberry boom

The sweet story of Peru’s blueberry boom Plucky farmers have transformed the market in only ten years plucky&#xff1a;英 [ˈplʌki] 勇敢的&#xff1b;无畏的&#xff1b;有胆识的 原文&#xff1a; Peru’s blueberry harvest is just beginning, and Ivan Ja…