后软件工程时代

  接着标题,曾经有过软件工程时代吗?一直疑惑中,软件工程的思考好像是源自《人月神话》时代,很遥远了,而且那是个失败的项目。如今的教科书上,还在长篇大论着面向过程设计和面向对象设计,以及象形文字一般的UML语言。

  现在,敏捷开发占了主导。但能说信息社会到了敏捷时代吗?我想不能。用以命名一个时代的,应该具有改变时代的能力。比如几百年前欧洲的大航海时代和工业革命时代,改变了西方,也改变了世界。在中国可以说*时代,因为*决定了那个时代的中国格局。刚刚登顶欧洲足坛的国际米兰,两年的魔力鸟时代也划上了句号。虽然我们可以说现在是信息时代,但不是软件工程或敏捷开发时代。软件工程或敏捷开发都没有带来走向成功的公式,不同的时间、地点、目标,同样的做法导致的结果极可能有天壤之别。

  作为智慧结晶的软件产品,有个共同点和制作艺术品一样:成功的经验很难完全复制。比如闻名世界的青花瓷,要“天青色等烟雨”。还有日本刀,纯手工打造的日本刀是冷兵器时代世界最犀利的武器。没有哪两把刀是完全一样的,打造各方面都接近完美的极品非常需要运气,铁矿的含炭量,熔炉的温度等一点点偏差都会决定成败。但是总体上说,工匠的经验是最重要的因素。

  同样地,敏捷开发的出现,最大的成绩就是使软件决策者和开发者也认识到这一点:软件成败,主要是人的因素。软件工程的始祖们显然也是一些很伟大的程序员,但现在看来,他们的成功是几个人特定环境下的经验,结果让大家削足适履。想拿盖楼的方式做软件,根本是天方夜谈的想法。敏捷开发的那些原则,只是对被曲解了的软件开发做的勘补而已。一套成熟的建筑图纸可以用很多次,看一个小区里几十几百的楼都是一个样子,可软件却不是这么生产出来的。软件开发,还停留在手工时代,而且是初级的手工时代,因为我们,人,无法保证软件必然成功。当然情况已经改进了许多,需求、合作、环境、支持、营销都没有拖后腿的话,我们即使不能得到完美的结果,也越来越有信心相信会避免看出糟糕的结果。

  对我们这些从业者来说,就像走出洞穴,进入农耕社会的原始人,刚认识了时令和天气的影响,离软件开发的工业革命时代,还有很遥远很漫长的路。于是我们努力寻找着新的工具,从青铜到铁器,从VS2010到VS20NN ..... 

  “故其疾如风,其徐如林,侵掠如火,不动如山,难知如阴,动如雷震”。这是《孙子兵法》中对一支常胜之师的形象描述。我承认内心很想去打仗,投笔从戎,为国建功立业。但和平年代,只能做软件了。

  想以设计工程的方式在软件时代成功,已经是“人月神话”。软件的成败关键,只在于团队(包括决策者)的能力-策略+技术。将强兵精,才能百战不殆。  软件兵法时代来临了,这点勿庸置疑,揭开序幕的是就是敏捷(Agile)开发。

  其实Agile也出现了好些年了,时至今日,已经小有规模,出现不少最佳实践的套路,比如Scrum。它们好像阐述了一些兵法,但都还达不到纵观全局的系统高度,所以现在只是兵法时代的序幕。

  一部《孙子兵法》,影响了世界几千年的战争,我想我们正需要那样的软件兵法。《孙子》十三篇,没有任何地方教如何制定作战计划,计划该怎么写。战争的复杂多变性,和软件开发如出一辙。并不是不需要计划,而是计划相对于兵法来说,已比较次要。战争千差万别,每场战斗千变万化,

  我们需要的兵法,要告诉我们这一系列的问题:要做软件需要什么,要克服什么;什么软件该做,什么软件不该做;哪些应该外包,哪些应该自己开发;决策者和开发团队要有什么,不该有什么;软件怎么算成功,怎么算失败。

  虽然还很遥远,但希望软件开发的孙子兵法,也出自我们这五千年的文明古国。

  

  

原文地址:https://www.cnblogs.com/XmNotes/p/1747507.html