今天,我们谈一下一名普通的敏捷开发实践者该如何修炼自身的技能。因为毕竟能够成为scrum master,对于很多人来说可能还是几年后的事情,那么我们需要着眼于现在,通过不断的修炼,提升自己的能力。
那么我们作为team中的一员,该如何修炼自身的敏捷开发之道呢?我想可以通过以下三个方面,不断锤炼自己。然而鉴于篇幅原因,本文对于文章中提到的各点只做一些引述,接下来我会陆续发表对于各部分详细内容的专题文章,希望大家关注,也希望能和您探讨,我们共同进步:)
既然是一名敏捷开发者,敏捷思想的掌握自然首当其冲。在敏捷开发实施的过程中,我们虽然不是scrum master,没有管理scrum流程的职责,但是对于流程,角色,职责的理解熟悉是非常必要的,不然参与了半天的敏捷开发,到头来却还说不出个所以然来可不行。作为一名敏捷开发者,我们需要:
1. 熟知流程
下图详细描绘了scrum的流程以及流程中各元素及其作用。作为team中的一员,我们应该将流程以及其中的工具熟记心中,并严格要求自己按照流程工作,让敏捷开发的思想融入到自己的血液之中。例如,关于站会,很多team 成员根本没有当回事,认为这只是个形式,敷衍了事。究其原因,就是他们对于其根本的思想没有领会,因而态度不正,最终使得站会流于形式。 Scrum中的每一类会议都有其存在的重大意义,我们应该认真体会,高度重视。当我们把这些都已形成了习惯,你会发现Scrum原来如此之美。关于scrum中各部分的具体的分析,之后会陆续发布文章。
对于此点,市面上的书不少,但是都紧紧局限于理论。我觉得其实敏捷思想的内容不多,每本书上讲的也都大同小异。问题的重点不在于看书,而在于通过自身敏捷实践的体会,将理论联系到实践当中,感受它给我们的软件开发工作带来的好处与乐趣。
图片来源于网络
2. 厘清职责
熟悉了流程,我们还需要认清各种角色,并定位自己。上面图中可以看出,敏捷开发中共有四种不同的角色。作为team成员的我们,自然首先应该熟记自身的职责,并了解其它角色的职责。图中有每个角色的具体的职责,在这里就不再重复叙述。我们将重点关注于我们自身。作为team中的一员,我们最重要的就是功能的开发以及维护。这就要求我们自己要不断的增强自身能力,使得自己负责的功能的质量有所保证。关于如何增强自身能力,在下面的面向对象开发之道中我会提出我的见解。
3. 协作沟通
协作与沟通是敏捷开发的重要特征。team中的每一个成员都应该理解其重要性。对于team成员来说,沟通包括与scrum master的沟通,与product owner的沟通,以及team成员之间的沟通。协作则是team成员间的协作。我们应该敞开心扉,抱着助人即为助己的态度。
作为一名敏捷开发者,熟悉面向对象的开发,深谙其道,深知其理非常重要。在我看来,对于每一个sprint的每一个task的开发,都遵循着这样一个四步循环:首先是需求分析,通过我们拿到的交互图开始进行详细的需求的分析;其次,当我们通过交互图的分析,将每一步都了然于胸的时候,开始着手设计,这是设计模式表演的时刻,我们运用合适的设计模式设计相应的功能,完成后得到设计图;再次,根据设计图开始编写代码;最后,当这一切完成之后,我们会开始审视当前的工作,发现问题后做适当的重构。这样对于每一个我们完成的task,我们就能够保证其质量都是过关的。下面我们逐步解释。
第一阶段:需求分析
在开始每个task之前,我们首先要做的就是仔细分析UX交付给我们的用户交互图,我们通过对用户交互图的深入理解,以及在sprint plan meeting与backlog grooming meeting的对于task的深入分析,做到将task的具体内容与流程熟记于心,胸有成竹。
第二阶段:设计模式
通过对交互图的分析,现在我们已经对task有了具体的理解,那么这个阶段我们可以开始对task进行详细设计了。这个阶段的关键是如何设计出一套可复用,可扩展,可测试的方案来。我们应遵循面向对象的几个设计原则(之后的文章会详述),将功能的流程图,类图,对象图等5图设计出来。敏捷开发中并不强调文档的必要性,因此我们可以通过草图的方式将设计思想表现出来,以利于后续代码编写工作的进行。至于设计模式的学习,经典书籍数不胜数,推荐两本:四人帮的《设计模式--可复用面向对象软件的基础》,《Head First设计模式》,国内的一本《研磨设计模式》写的也不错。
第三阶段:代码艺术
现在我们可以开始编写代码了。需要注意的是,我们已经设计好了具体的方案,因此我们只需要按照设计图纸进行施工就好了。这个阶段我们需要注意的是代码的质量,也就是所谓的代码艺术。写代码不是体力活。如果我们仅仅满足于堆砌代码,那么我们始终都只能是一个码农。要写出漂亮的代码,需要我们自己不断的揣摩实践,不断的修正。对此我会写一篇关于代码艺术的文章,是自己的一些亲身感受与实践体会。那么这里推荐几本非常好的书籍:《代码整洁之道》《代码大全》《程序员修炼之道--从小工到专家》等。
第四阶段:重构之术
到这里task已经基本完成了,注意这里仅仅是基本完成,并没有最终完成。那么这一步我们应该做些什么呢?重构。我们在编写代码的时候,由于各种各样的原因,可能并没有按照我们之前设计的“图纸”执行。因此,这个阶段我们需要重新审视自己的设计与实际代码,找到那些背离设计原则,不可测,不可扩展,不可复用的代码,逐步重构,使其最大限度的达到我们面向对象设计原则的要求。关于重构,可以参考《重构:改善既有代码的设计》写的非常的好,值得深读。
至此,task的开发工作总算完成。接下来就是下一个task,再下一个......循环反复。最终确保我们的项目顺利向前。
学无止境,对于我们程序员尤其如此。敏捷思想对于软件开发已取得了革命性的成功。然而我想,敏捷思想不仅仅可以用在软件开发领域,在其它的领域依然大有所为。那么我们是不是可以将敏捷的思想运用到日常的学习中去呢?怎样运用呢?通过自己的亲身实践,我觉得我们可以通过如下几点,将敏捷运用到学习的实践中去。
1. 化整为零,小步前进,迭代学习,增量回顾
首先我们将大块的学习内容分成每一个小块,通过在一定周期内对于每一个小块的学习,最终完成大块的学习。比如我们要看一本书,我们可以将这本书视为一个story,其中每一章视为一个task,那么我们将2周定为一个迭代,每两周完成一章内容,在每个迭代的最后我们进行总结回顾,以此方式不断前进,最终实现小步前进,完成整本书的阅读。
2. 利用番茄时间法,分解时间,多任务并发前进
根据经典著作《番茄时间法》,我们也可以将大块的时间分成一些小块,对不同的内容进行学习。这样可以达到多个任务同时进行,且不会相互干扰。我们可以充分利用时间碎片来学习,将一些零散的知识,在时间碎片内完成学习。
通过以上,进过一段时间之后,你会发现,你的学习的速度和质量均会明显提升,一种酣畅淋漓的成就感油然而生。
原文来自:简书/Ifdef_Max