技术开发 频道

自适应软件开发

【IT168 技术文章】

    序言

    几年前,当我确定我的发展方向是软件开发时,给自己订下的三步曲是:软件编程、软件设计、软件工程。随着对既定目标的越来越近的时候,我却出现了一种困扰我的忧虑。

    记得两年前开始的一个正规的软件项目,我是一个程序员,项目就像一颗种子一样渐渐得长成了一棵大树,按道理来说,看到如此成果应该会有一些成就或是自豪。可是我却感到了一种忧虑,人在项目当中究竟是什么呢?现代科学的软件管理让软件开发变成“软件工厂”,其中的人就像一个被催眠了的机器人,我被定义成一个部件,一个资源,任凭别人的调度和摆布。没有想法,机械地在一个生产线上执行着已被他人安排好的流程和工作,我的想法和主张完全被格式化的条款规定一个狭窄的框架中。我完全就是一个“奴隶”,我开始怀疑所谓的软件工程。

    后来,我逐渐成长起来,并成为一个项目经理,有一段时间,我开始同时从事三个项目,一个项目中任系统分析,一个项目中任项目管理,一个项目中任售前技术负责。还要和一个朋友专研电脑游戏技术。在第一个项目中,有两个程序员接收我的分析结果,我把系统分析的详细设计写到了流程图和伪代码,他们负责实现,我负责解释。在第二个项目中,我有五个人员供我调配,在项目初期,我分配两个人做需求调研,另外三个人做技术准备,需求确定后,我分配一个人解释需求,我和另一个搞需求的人做数据模型和详细设计,而那三个人开始进行技术环境和基础框架程序准备,一切都是按照软件工程所定义的实施,文档和程序大量的出现,一切尽在掌握当中。

    这是我平生以来工作强度最大的时期,每天我都要工作到凌晨三点,第二天八点就得起床上班。连续持续了两个月后,每当我看那些曾经和我一样的人,我有一种负债的感觉,我干了什么啊?他们是活生生的人啊,但他们却被我变了一个部件,一台机器。而我变成了“奴隶主”。

    我开始以政治家的口气对自己说:“做一个好的软件,就得这么做,收起你的同情心吧,现实一点”。但我却无法停止困惑、开始自我遣责,难道这就是我要的软件工程?ISO-9000、CMM、大学时所学的软件工程,就是要把人当成一个资源、一个部件、一台机器?最近半年,我经常为这个问题所困扰,这完全就是奴隶主和奴隶的体制,我怀疑我生活在历史书中所描述的强权统治社会。

    两周前,一个好朋友向我推荐了一本书,我还记得那天早上收到快递公司送来的这本书后,我就翻开看了,却再也无法停止,一直看到三更半夜。因为我所焦虑的,我所怀疑的,都在这本书中得到了解决。难道老天真的知道我在想什么吗?

    世界观的重生

    这本书叫《自适应软件开发》,封面上写着“尤其适用于紧张、高度竞争和经常变更的软件项目”,其实这是片面的,这本书所表达的思想应该是“适应于人类的一切活动,大则包括社会制度,小则包含个人发展”。

    生物进化被达尔文解释为“适者生存”(survival of fittest),要是达尔文错了呢?现在许多人更相信的是“适者达到”(arrival of fittest),也就是说,生物的进化最根本的是不同生物间自行组织为共同的目标相互协作,而适者生存只是在这个基础上去粗留精。也就是说,新生物的出现是因为微生物间的相互合作和自行组织,而不是自然界的挑选。自组织行为才是进化的根本。

    与所有生命体一样,现在的人类团体也是为了自行组织相互工作而形成的。这意味着一个组织,一个项目团队,不是机器,而是一群有生命气息的有机体。我们怎么能把组成这样一个有生命力的有机体的人当成劳动力资源,当成一个部件,当在一个死的、机械的、线性的机器使用?(摘一句作者的话——“我希望让那种使人们像被催眠的机器人那样在高速传送带上组装产品就能够产生生产软件产品的软件工厂的观念永远到一边歇着去”)

    我们要让我们的团队充满生命力,充满创造性。要让我们的团队能够适应当今这个变化飞快、竞争激烈、复杂纷乱的年代。这两个方面都是传统软件工程所能以达到的。

    虽然奴隶主同样可以带领奴隶们完成“金字塔”、“长城”等大项目,但是他们只能应用于长期稳定不变的环境,对于复杂多变,并要求高速的发展的极限项目,却不能适应。正如生物的进化不是由“自然界”说了算的,更不是由奴隶主说了算的,而是由生物们自行组织、自行适应复杂多变的环境。

    这就是“自适应”理论的世界观,他的三大件是——“混乱边缘的繁荣”、“领导—协作”、“预测—协作—学习”。

    混乱边缘的繁荣

    书中是以“混沌”作为术语,我觉得有些拗口,所以改成“混乱”。

    在现在的软件开发中,软件工程协会所制定的能力成熟度模型(CMM)被誉为圣杯,并在当今的世界中大行其道,随着软件开发的过程的细化程度而分成五级。愈高的等级,过程愈细化。为的就是追求一种稳定,一种可控的效果。并也取得了一种快速开发的结果。

    但 CMM / ISO9000 / BRP 这种被书中所描述为“里程碑”式的开发,只能在一种稳定的条件下生存,也就是需求在开发过程中不会改变。如果处在一个复杂多变的环境中,如客户都不清楚需求细节,外界的环境很不确定,此时,这种方法将难以生存。并且从事于这种模型下的团队或公司很难进入另一个领域,从事另一块全新的软件开发。

    什么是稳定?就目前时代而言,唯一稳定的就是“变化”。长期使用CMM和传统软件工程开发的团队,很反感变化,那怕是生死悠关的变化,他们也照样忽略。他们喜欢的是稳定的环境,他们喜欢的是一劳永逸。稳定总是让人感到安全,可是稳定具有滋生死板和扼杀创造性的倾向。在非常细的过程定义当中,我们没有过多的思想,而只有像机器一样的在生产线上执行过程。而混乱则会让人产生危机感,会想办法去应对,于是会让人产生爆发力和创新意识。

    当然,过多的混乱会招致人所承受的压力过大,而出现精神错乱,而稳定则会让人处于昏迷壮态。“稳定和混乱具有相同的破坏性”!因此,真正的团队应该离开熟悉和稳定的状态,朝着混乱移动,但却不能迷失其中。成功也只会降临在保持忧患意识的人,那些能够调整自我矛盾、迷惘心情的人,以及那些保持足够创造力的人。

0
相关文章