序言
几年前,当我确定我的发展方向是软件开发时,给自己订下的三步曲是:软件编程、软件设计、软件工程。随着对既定目标的越来越近的时候,我却出现了一种困扰我的忧虑。
记得两年前开始的一个正规的软件项目,我是一个程序员,项目就像一颗种子一样渐渐得长成了一棵大树,按道理来说,看到如此成果应该会有一些成就或是自豪。可是我却感到了一种忧虑,人在项目当中究竟是什么呢?现代科学的软件管理让软件开发变成“软件工厂”,其中的人就像一个被催眠了的机器人,我被定义成一个部件,一个资源,任凭别人的调度和摆布。没有想法,机械地在一个生产线上执行着已被他人安排好的流程和工作,我的想法和主张完全被格式化的条款规定一个狭窄的框架中。我完全就是一个“奴隶”,我开始怀疑所谓的软件工程。
后来,我逐渐成长起来,并成为一个项目经理,有一段时间,我开始同时从事三个项目,一个项目中任系统分析,一个项目中任项目管理,一个项目中任售前技术负责。还要和一个朋友专研电脑游戏技术。在第一个项目中,有两个程序员接收我的分析结果,我把系统分析的详细设计写到了流程图和伪代码,他们负责实现,我负责解释。在第二个项目中,我有五个人员供我调配,在项目初期,我分配两个人做需求调研,另外三个人做技术准备,需求确定后,我分配一个人解释需求,我和另一个搞需求的人做数据模型和详细设计,而那三个人开始进行技术环境和基础框架程序准备,一切都是按照软件工程所定义的实施,文档和程序大量的出现,一切尽在掌握当中。
这是我平生以来工作强度最大的时期,每天我都要工作到凌晨三点,第二天八点就得起床上班。连续持续了两个月后,每当我看那些曾经和我一样的人,我有一种负债的感觉,我干了什么啊?他们是活生生的人啊,但他们却被我变了一个部件,一台机器。而我变成了“奴隶主”。
我开始以政治家的口气对自己说:“做一个好的软件,就得这么做,收起你的同情心吧,现实一点”。但我却无法停止困惑、开始自我遣责,难道这就是我要的软件工程?ISO-9000、CMM、大学时所学的软件工程,就是要把人当成一个资源、一个部件、一台机器?最近半年,我经常为这个问题所困扰,这完全就是奴隶主和奴隶的体制,我怀疑我生活在历史书中所描述的强权统治社会。
两周前,一个好朋友向我推荐了一本书,我还记得那天早上收到快递公司送来的这本书后,我就翻开看了,却再也无法停止,一直看到三更半夜。因为我所焦虑的,我所怀疑的,都在这本书中得到了解决。难道老天真的知道我在想什么吗?
世界观的重生
这本书叫《自适应软件开发》,封面上写着“尤其适用于紧张、高度竞争和经常变更的软件项目”,其实这是片面的,这本书所表达的思想应该是“适应于人类的一切活动,大则包括社会制度,小则包含个人发展”。
生物进化被达尔文解释为“适者生存”(survival of fittest),要是达尔文错了呢?现在许多人更相信的是“适者达到”(arrival
of fittest),也就是说,生物的进化最根本的是不同生物间自行组织为共同的目标相互协作,而适者生存只是在这个基础上去粗留精。也就是说,新生物的出现是因为微生物间的相互合作和自行组织,而不是自然界的挑选。自组织行为才是进化的根本。
与所有生命体一样,现在的人类团体也是为了自行组织相互工作而形成的。这意味着一个组织,一个项目团队,不是机器,而是一群有生命气息的有机体。我们怎么能把组成这样一个有生命力的有机体的人当成劳动力资源,当成一个部件,当在一个死的、机械的、线性的机器使用?(摘一句作者的话——“我希望让那种使人们像被催眠的机器人那样在高速传送带上组装产品就能够产生生产软件产品的软件工厂的观念永远到一边歇着去”)
我们要让我们的团队充满生命力,充满创造性。要让我们的团队能够适应当今这个变化飞快、竞争激烈、复杂纷乱的年代。这两个方面都是传统软件工程所能以达到的。
虽然奴隶主同样可以带领奴隶们完成“金字塔”、“长城”等大项目,但是他们只能应用于长期稳定不变的环境,对于复杂多变,并要求高速的发展的极限项目,却不能适应。正如生物的进化不是由“自然界”说了算的,更不是由奴隶主说了算的,而是由生物们自行组织、自行适应复杂多变的环境。
这就是“自适应”理论的世界观,他的三大件是——“混乱边缘的繁荣”、“领导—协作”、“预测—协作—学习”。
混乱边缘的繁荣
书中是以“混沌”作为术语,我觉得有些拗口,所以改成“混乱”。
在现在的软件开发中,软件工程协会所制定的能力成熟度模型(CMM)被誉为圣杯,并在当今的世界中大行其道,随着软件开发的过程的细化程度而分成五级。愈高的等级,过程愈细化。为的就是追求一种稳定,一种可控的效果。并也取得了一种快速开发的结果。
但 CMM / ISO9000 / BRP 这种被书中所描述为“里程碑”式的开发,只能在一种稳定的条件下生存,也就是需求在开发过程中不会改变。如果处在一个复杂多变的环境中,如客户都不清楚需求细节,外界的环境很不确定,此时,这种方法将难以生存。并且从事于这种模型下的团队或公司很难进入另一个领域,从事另一块全新的软件开发。
什么是稳定?就目前时代而言,唯一稳定的就是“变化”。长期使用CMM和传统软件工程开发的团队,很反感变化,那怕是生死悠关的变化,他们也照样忽略。他们喜欢的是稳定的环境,他们喜欢的是一劳永逸。稳定总是让人感到安全,可是稳定具有滋生死板和扼杀创造性的倾向。在非常细的过程定义当中,我们没有过多的思想,而只有像机器一样的在生产线上执行过程。而混乱则会让人产生危机感,会想办法去应对,于是会让人产生爆发力和创新意识。
当然,过多的混乱会招致人所承受的压力过大,而出现精神错乱,而稳定则会让人处于昏迷壮态。“稳定和混乱具有相同的破坏性”!因此,真正的团队应该离开熟悉和稳定的状态,朝着混乱移动,但却不能迷失其中。成功也只会降临在保持忧患意识的人,那些能够调整自我矛盾、迷惘心情的人,以及那些保持足够创造力的人。
“革新、创造性和突发结果在混乱的边缘地带应运而生”!
对于人的个人发展,难道不也是这样的吗?对于一个在“混乱边缘”的民族(如日本和韩国)不是更有创造力吗?不是“乱世出英雄”吗?真正的稳定,是让自己适应变化,而不是呆在温暖的大棚下面。而是要出去接收新的空气,那怕波涛汹涌。真正的稳定是当变化来临时,自已照样屹立不倒。
当然,最最关键的是做到“边缘”,让稳定和混乱保持一种平衡,这是非常难的,但我们别无选择。就个人而言,我的对个人发展的信条是——“永远从事有挑战的事,但不要太有挑战,最好从事70%是熟练的,而30%却是从来没有接触过的事”,包括把自己放在一个高速成展的公司,而不是形成规模稳健的公司,也是给自己一个“混乱的边缘”。就软件工程而言,就是要让目标有那么一点不确定,而让团队自身调整。
那么,我们是不是要抛弃软件工程原有的东西,抛弃CMM?不!答案是否定的。我们需要他们,只不是过,原有的那些教条不再成为束缚我们思想创造力的枷锁,而变成控制这种平衡的工具。控制稳定和混乱的平衡,这才是其中的关键。
“混乱边缘的繁荣”,这是本书最根本的思想,书中所有的章节都是充斥着这种思想。
领导—协作
我们生活的这个世界是一个强制秩序的年代,为了保持稳定,我们的领导人以发布命令的方式指使着我们,并对我们的日常活动进行控制。正规软件工程中的项目经理,也正如我们的大多数中小学老师,还有我们的政府。他们把他们的思想强行灌输给我们,而不管我们的个性和自由。于是,我们的思想,我们的创造力,我们的相像力,全部被扼杀了。我们就像一具没有思想的尸体,被别人搬来弄去,过着毫无意义的人生。
这是“命令—控制”时代所带来的恶果。“自适应”就是要让我们脱离这种恶劣的环境。我们要采取“领导—协作”的方法。命令者知道目标,而领导者把握方向;命令者发布命令,领导者施加影响;控制者发出要求,协作者使之发展;控制者进行微观管理,协作者实施鼓励。领导是引领团队,他并不压制新的思想,只是引导。协作是一种共同进步,是一种对别人的帮助,是一种思想的统一。真正的领袖从不命令,只是营造一个好的协作氛围,并指引领着团队走向正确的方向。
“不幸的是,大多数的软件开发是被“管理”的,而不是被“领导”的”。
真正的“领导—协作”是每个人都有责任,每个人不但对自己的工作负责,也对整个项目负责,每个人都是领导,大家在一种包容于别人思想的环境中,相互作用,相互帮助,相互尊重,相互交流,其不仅对自己的工作进行负责,进行领导,并且也统一思想做一个共同的决定。
这里,项目经理不是实施权力,而是要营造这种环境,一人团队只有在维持了共性和个性的张力时,才会是有创造性的。而专制则意味着放弃一些东西,而毫无所得,其更本不管一些项目中产生的各种信息,而强制决定,强行按照流程规定执行。对于个人来说,对于商业活动来说,对于管理来说,对于社会制度来说,这都是适用的,这难道不是一个进步的思想吗?
“领导—协作”是自适应管理的根本思想,也是一个团队的文化氛围。
预测—协作—学习
这是自适应的模型的。“预测—协作—学习”不断迭代,从而让团队不断进化,不断适应多变的环境。
[预测]——就是对目标做一个分析,给出一个大的方向,但不要太具体,但是大方向一定要对。这不仅是提供给团队目标,还有就是让团队中的每个人会因为这个目标而兴奋,而产生激情。在这个过程中,项目组中要定期的散焦,在一个过程开始时不要太关注于细节实现,而过程进行时要从散焦变成聚焦,逐步协商合作,统一每个人的思想,逼近正确目标,以为后续的工作提供可靠的保证。
[协作]——第一个障碍是强权管理,第二个障碍是个人主义。相互信任、相互尊重、相互参与、相互承诺是创造双赢的核心。无论是和客户也好,还是人与人之间也好,还是公司与公司也好,协作绝对是一个人,一个团队,一个公司最具竞争力的核心。能不能在内部和外部出现协作,是能否自动适应各种环境的重要因素。协作需要的是努力得整合自己和别人观点的分歧。
[学习]——学习是一种态度。自我批评、反馈、信息共享是其核心。我们一定要不停地问自己至少下面三个问题:和客户讨论时,我们要反复地问,“我们在做正确的事吗?”,在设计编码测试时,我们要反复地问,“我们用正确的手段做这件事吗?”,在事后分析时,我们也要反复地问,“还能有更好的方法做这件事吗?”,在项目过程中要给予这种时间进行反馈、自我批评、并交流个人的心得体会。于是,我们就在一种高速—慢速—再高速—再慢速—超高速的发展。
对于个人发展,对于团队,对于管理,对于营销……,不都是这样的吗?
边角料
《自适应软件开发》是一本很晦涩的书,简直是很难读,我很同情翻译人员的痛苦,我相信即使是英文版的,也是难懂,对于书中的许多地方,我也是揣摩猜测。可能会和书中的内容大相径庭,这点可能类似于爱因斯坦的《相对论》这类思想高深的书,很难让人明白。不过当你忍着痛苦,细细得揣摩书中的思想和方法,并读完整本书后,你会发现这似乎不是一本软件工程的书,这好像是一本哲学书,并会为之有一种激动不已的感觉。并写下这篇文章,希望和大家共享,并希望和大家交流学习。
《自适应软件开发》它并不否定传统的软件工程,只是把原有的结构重新组织了一下。所谓戏法人人都会变,只是玩法不同。下棋的规则就那么多,可是几百年来在棋术上的创新却从来没有停止过。本书还讲了团队中的人际关系、团队的激情、和客户的关系、商业营销、管理、企业文化等多方面的内容。也让人收益不少。
《自适应软件开发》从我的感觉上来说,他让我得到的并不是软件工程方法那么简单的内容,其中的思想,对我们个人也好,团队或是这个社会制度也好,在各个人类活动的方面都会有很大的收获。书中对对软件工程的有细节方面的论述,我就不多说了,我更喜欢的是其中的哲学思想。
与此类似的还有一本书《人件》(PeopleWare),正在期待中译版的出版。
最后声明一点,我不是书托,我真是的由感而发。呵呵。
|