运用孙子兵法思想搞好软件开发
2016-04-25WangJue
王 珏/Wang Jue
运用孙子兵法思想搞好软件开发
王 珏/Wang Jue
作为长期从事科研工作的我来说,原以为那些兵法之书读来是很乏味的,也曾以为生活与那些兵法相差甚远,读来也只是浪费时间和精力。但通过前段时间对《孙子兵法》的研读,打消了原本幼稚的想法,被其中高深的谋略和杰出的智慧所俘虏了。在当今社会,科学技术在国防科技中扮演的角色越来越突出,正如习近平在中国科学院第十七次院士大会中指出“科技是国家强盛之基,创新是民族进步之魂”。国际间的实力较量已从过去侧重军事力量的较量,让位于经济力量的竞争,特别表现为科技实力的竞争。治学如治兵,《孙子兵法》中的谋略思想,同样是指导科研工作的法宝。以软件开发来说,如能应用孙子兵法思想来把握一些环节,将如虎添翼,事半功倍。
一 、注重“知彼知己”,通过需求分析实现“百战不殆”
孙子曰:“知彼知己者,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆。”(《孙子·谋攻篇》)这句话告诉我们,既要了解敌人,又要了解自己,则经历上百次战斗也不会有危险;不了解敌人,只了解自己,或许会胜利;但既不了解敌人也不了解自己,则每次用兵都会遭遇到危险。孙子重知、更重先知、反对不知的思想,体现了他对信息的高度重视,他把“知”看作是正确指导战争胜利的先决条件。同样,进行软件开发,也必须体察“彼”“己”,做到知彼知己。在软件开发中所谓“彼”,一是要掌握外界的研发动态,避免重复研究和滞后研究;二是深入进行需求分析,瞄准客户需求搞研发。①很长时间里人们一直误认为需求分析是整个软件开发中的一个简单步骤,未能引起足够重视,但实践证明它是整个过程中的重中之重。只有通过软件需求分析,才能确定主攻方向,也才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,归根到底是需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不认可,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。所谓“己”,主要指项目组自身的实力,包括项目经理的领导能力、技术人员科研开发能力、整个团队协作能力等。因此,项目经理要能够准确地对团队中每个成员进行合理评估,善于发掘队员潜力,发挥各自优势,有的放矢地灵活指挥,最大限度地提升团队效率。与此同时,更要及时准确地掌握项目运作情况以及阶段性成果等,并依此制定和调整计划。否则,就会脱离实际而迷失方向。
二、重视“庙算”,通过概要设计实现“先胜而后求战”
孙子曰:“夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎!”(《孙子·计篇》)这句话告诉我们拉开战斗序幕之前,就已“庙算”周密,充分估量了有利条件和不利条件,开战之后往往会取得胜利;拉开战斗序幕之前,没能进行周密“庙算”,很少分析有利条件和不利条件,开战之后往往会失败,更何况开战之前无“庙算”呢?孙子认为,“未战而庙算”对战争胜负起着决定性的作用。也就是说,战前一定要反复计议,权衡比较,透彻分析,科学决策,做到目标明确、条件具备方可行动,力避盲目性。
在软件开发中,概要设计(系统设计)是决定软件性能高低的重要因素,关系到整个项目的成败。因此,必须深思熟虑,进行“庙算”。由于盲目决策而造成科研项目失败的事例,比比皆是。某些决策失误,可以设法挽回,但重大决策失误,将造成不可挽回的损失。因此,在软件开发前应该综合考虑软件系统可靠性、健壮性、可修改性、效率性、可扩展性等因素,设计合理的系统框架,力求为软件开发夯实基础。如软件系统的可靠性,随着软件功能的扩展及用户需求的提升,软件系统规模越做越大,越来越复杂,其可靠性越来越难保证。软件本身对系统运行的可靠性要求越来越高,软件系统的可靠性也直接关系到软件自身的声誉和生存发展竞争能力。因此,软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。
三、善于“以迂为直”,通过合理变通实现“后发先至”
孙子曰:“军争之难者,以迂为直,以患为利。故迂其途,而诱之以利,后人发,先人至,此知迂直之计者也。”(《孙子·军争篇》)这句话强调,两军争夺胜利时,最难的是如何通过迂远曲折的途径,达到近直的目的,变不利条件为有利条件,做到晚于敌人出发而先于敌人到达目的地。在军事战略上,“直”往往是最难达到的,因为双方的注意力都集中在此,成了实际上的“迂”;而“迂”看似缓慢,然而避实击虚,成了实际上的“直”,“迂”与“直”往往会发生转化。孙子这一辩证思想对软件编码具有重要启迪意义。
软件开发的最终目的是创造出满足用户需求的软件。因此,在顶层设计的基础之上,落实到底层还是代码的编写。软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的“源程序清单”。在软件编写过程中无论是开发人员也好、测试人员也好,其对需求的理解是一个波浪式渐进的过程,由一开始理解得不够全面、透彻,到具体编写代码过程中思路的逐步清晰,再到脑子中具体疑问的越来越多。所以,懂得了这个道理,我们就要通过迂远曲折的途径,达到近直的目的。在开发过程中不要只知道往前走,适当的时候停下来,甚至往回走,重新去审视一下用户需求,往往会有新的发现。此时再根据对需求的重新理解去编写代码,这样就能事半功倍。在代码编写过程中,由于内存没有及时释放、数组越界、函数返回值错误等问题,导致程序开发停滞不前时,更应当借鉴以迂为直的思想,合理地利用代码重用性,使开发人员在编程时提高效率,而且可以将一些比较实用的代码有效地在其它项目中重新发挥作用。在上述情况中,把软件代码的直接编写看做“直”,而将利用代码重用性、借鉴他人的编程成果、用较短的时间达成用户需求目的看作为“迂”。从中便不难看出,以迂为直,合理变通,后发先至,不失为软件开发的良策。
注释
①陈妍:《谈计算机软件开发前期的建模测试》,《网络安全技术与应用》2013年第9期,第9-11页。
(责任编辑:薛宁东)
摘 要:《孙子兵法》中的谋略思想,同样是指导科研工作的法宝,对软件开发有所启示。一 、注重“知彼知己”,通过需求分析实现“百战不殆”。二、重视“庙算”,通过概要设计实现“先胜而后求战”。三、善于“以迂为直”,通过软件开发实现“后发先至”。
Developing Software with the Thinking of The Art of War
Abstract:The stratagem thinking in The Art of War is also effective method directing the scientific research work, which has enlightenment for software development.First, attaching great importance to estimating correctly one's strength as well as that of one's opponent and realizing fighting one hundred battles with no danger of defeat.Second, attaching great importance to estimation and realize that a victorious army always seeks battle after his plans indicate that victory is possible under them through sketch design.Third, being good at making the devious route the most direct and through software development to realize getting to destination first despite starting late.
关键词:孙子兵法软件开发启示
Key Words:The Art of War; Software Development; Enlightenment
作者简介:王珏,中国人民解放军国防大学研究生院博士研究生、上尉。
收稿日期:2015-1-26
中图分类号:E8
文献标识码:A
文章编号:2095-9176(2016)01-0086-03