在计算机专业图书市场上,软件工程已经是热过又冷下来的话题,不过很多专业人士坚信,真正的软件工程发展热潮,在中国才刚刚开始。只有到了今天这个时候,在提高软件开发效率和质量的压力已经明确地传达到几乎所有软件企业身上的时候,作为一个整体的中国软件产业才真正萌发了对软件工程的实质需求。相比较而言,此
然而,当泡沫散去,露出啤酒的时候,我们惊惶地发现,其实我们的理论准备也非常糟糕。除了一堆洋精华或洋糟粕之外,我们自己竟然没有什么拿得出手的东西。普遍真理必须与具体实际相结合,在这方面,现在国内的软件工程领域,已经出现实践超越理论,理论落后于实践的状况。当大部分软件工程学者还在靠念洋经在书刊杂志上扬名立万的时候,不少默默无闻的一线开发者和项目经理已经开始根据各自实际灵活运用软件工程,并且取得了令人欣喜的成绩。在这种情况下,软件工程图书面临的冷遇也就不难理解了。
新的形势需要学者们采取新的方法来研究软件工程。要适应中国软件产业发展的需要,软件工程学者们必须深入中国的实践,将国外理论与本土实践结合起来,改进实践后再总结出新理论。在这方面,电子工业出版社博文视点公司新近出版的软件工程著作《超越传统的软件开发――极限编程的幻象与真实》做了一个精彩的阐释。
这本书的主要内容是介绍和分析极限编程的(Extreme Programming)方法和经验。这样一个主题,在今日软件工程图书中并不鲜见。然而这本书不仅内容丰富、旁征博引,读来充满意趣,而且积极思辨、严谨求实,体现了当今软件工程实践派学者的务实创新思维,是一本难得的佳作。
读这本书最大的感觉,就是其内容的严谨思辨,立论有据,充分体现了学者之风。这在今天的计算机图书领域,尤其是软件工程图书领域中尤其难得。目前很多软件工程图书,甚至包括一些国外软件工程著作,在描述软件开发中遇到的问题及解决之道时,很容易虚设场景,妄断因果,甚至随意篡改和解释实践,以迎合自己的理论。本书则绝然不同。作者在所讨论的主题上,显然有非常深入的研究,不但见识博大,而且理解深刻。即便如此,作者在每一个论点上仍然充分调研,详加考证,反复思辨,小心求证。书中最精彩的例子是对结对编程的利弊考察,耗用三章篇幅,从多个方面全面讨论了结对编程在效率上、经济上和心理上的优缺点,对每一个结论都以实践结果予以评论,处处体现了学者的思辨光芒。在这种认真的态度之下,不少似是而非的流行误解得到了澄清。不但书中所得到的结论是非常有意义的,其展示的做学问的方法更令人获益匪浅。
本书的内容非常丰富,涉及了诸多方面,从方法学到具体实施,从重构到测试驱动开发,从理论到工具使用,都有深入涉及。作者显然是把握关键的高手,能够在有限的篇幅内将问题的核心把握,并帮助读者迅速掌握其主要内容。试以“重构”一章为例,众所周知,MartinFowler曾就此主题撰写数百页的专著,而本书中仅仅只用了20页,就向读者传达了很多关键信息。有一定实践经验的读者,只需认真阅读这20页内容,就可以了解重构的主要思想和方法,不能不说是了不起的事情。
对比是掌握知识、加深理解的好方法,而作者显然是这方面的专家。书中运用图表与对比方法对各种不同的软件开发模型、工程实施方法和工具进行了简洁、深刻的对比。例如将XP与CMM对比,将XP与Scrum对比,在很小的篇幅里使问题本质暴露无疑,使人印象极为深刻。此外,作者知识面极为宽广,广泛引用各行各业的理论和事例,充分利用隐喻和类比,将原本枯燥的内容变得颇为富有智趣。例如在讲解Scrum时,作者不惜笔墨,图文并茂地将Scrum的词源――美式橄榄球集团的组成和特点明白道出。这个道理一讲明白,再稍加罗列归纳,Scrum这个怪异的术语立刻就活灵活现,Scrum方法之精髓也能大体掌握。看上去有四两拨千斤之妙,却体现了作者深厚的研究功力。再比如谈到重构时,作者首先提出一个思辨命题,软件开发更像学数学还是更像写作?这一个有趣的隐喻其实颇为深刻,发人深思。读此书不仅在纵向上加强了对专业理解的深入程度,在横向上也大大扩展了知识面,并学习到跨学科分析的思想方法。
特别值得称道的是,本书体现了一种务实创新,而不是死守教条的软件工程理论及研究方法,这种态度和方法对于今天的软件工程学界和实践者来说,具有重要的启发作用。作者精通理论,但是不为理论所羁绊,而是能根据实践相反正,提出具有创新性的想法;作者非常尊重实践,一切观点均要由实践来证明和阐释,但并没有坠入经验主义泥潭而一叶障目,不见泰山;作者尊重洋人的实践,更尊重国人的实践,对于产生自开发一线的本土经验,绝无高高在上横加指责的傲慢,而是怀着欣喜的态度虚心学习,认真总结,这种态度难能可贵。从某种意义上说,当今中国软件工程领域的核心任务是,把在国外行之有效的软件工程理论和实践与中国软件产业具体情况相结合,创新适合中国软件企业的各种具有本土特色的软件工程方法。在我看来,只有秉持作者这样的态度和研究方法,我们才有可能获得成功。从这个意义上讲,作者通过这本书给很多人上了重要的一课。
当然,这本书也并不是完美无缺的。首先,从行文上看,由于材料非常丰富,整体和个别局部组织上就显得缺乏连贯性。有些地方虽有内在逻辑,但并没有良好的贯穿显示出来,结果给人以简单罗列的感觉。例如第一章的各节就显得比较零散,弱化了主题。其次,作者在前言中希望能够基于国内的软件开发项目经验来写作,虽然尽力而为,但就著作而言,对国内企业实践的调研还显得不足。当然这不能怪作者,当前中国软件企业普遍工程化水平低劣,不愿接受类似调研,名为保密,实为遮羞,在此环境下,作者恐怕也难为无米之炊。相信随着国内软件工程的迅速进展,这方面的环境能够逐渐好转。另外,作者纵情于具体问题的分析之中,却没有能够对这本书最有价值的东西――作者本人的思考和研究方式进行分析,没有在书中提出自己的软件工程(研究)观进行总结,也多少有一点未能授人以渔的遗憾。不过这本书仍然是我近期看到的软件开发方法学方面的杰作,很值得关心软件开发方法的所有人阅读、学习与思考。 (《超越传统的软件开发――极限编程的幻象与真实》,雷剑文陈振冲李明树著,电子工业出版社,2005年1月,定价:39.00元)