一个人的软件方法

 

在学校呆了很久,学的正是现在大热的模式识别、机器学习,用现在流行的术语就是人工智能、大数据。精疲力尽地毕业之后,确定自己不是搞研究的料,也不想做“本行”,于是想改个行,把十多年的兴趣“兵棋推演”当事业做。当年的兵棋玩友做了一个微型公司给军队做软硬件技术服务,我投奔他开发兵棋推演系统。

在学校期间,我用C++写工业机器人操作控制语言(一种领域特定语言)的语法解析器;用MATLAB和R写图像目标归类、语音分类算法;用Python写集成了指纹,图像,录音的身份特征数据采集工具;还部署算法到MPI集群,移植算法到GPU……自认为自己姿势水平够高了,什么样的复杂算法我没有见过,我和它们谈笑风生……


《软件方法》推荐序:一个人的软件方法_分类算法

有了这些底气,再加上自以为对“兵棋推演”的业务场景非常熟悉,觉得应该很容易就写出来。但事与愿违,干了一段时间,突然发现事情并不简单,根本出不来成型的系统。我泄了气,打算捏着鼻子回到正在大热的本行,但公司极力挽留,让我不胜惶恐。

这时,我通过潘老师的文章第一次了解到他的建模思想。文章里说的“唱曲的名家,唱到极快之处,吐字依然干净利落”正是我想达到的目标,于是我购买了《软件方法》,此时是2016年4月。

正好当时公司正在给军校做一个小系统,由于双方对需求工作流的技能没有认识,对软件的责任边界也很模糊,导致已经反复折腾了两年时间。看完《软件方法》上册之后,我开始有意识地运用书里的技能。

做需求启发时,我发现确实如书中所说:涉众往往会做而不会定义;把不同类型的涉众放在一起访谈时,只会剩下在场军衔最高那个人的意见……

此外,通过刻意关注涉众利益,出现了神奇的效果。和甲方的沟通效率和变更质量明显提升,改一个中一个,即使隔一段时间演示的时候涉众已经忘记了自己之前的想法,只要从当初记录下的涉众利益角度稍微一提,涉众就会立刻想起来,而且很容易认账,“对对对”成了口头语,对软件的功能越来越满意。

有了这个小系统从原地打转到圆满解决的牛刀小试,2016年底,一个真正的兵棋推演系统项目来了。我从寻找老大、揣摩愿景、业务建模、系统用例,需求规约,分析模型,设计开发,学的基本都用上了。整个2017年上半年,就是在这样边学边干的紧张状态里渡过的。想着这次要是再砸了就真没退路了。好在最终扛下来了,对甲方,对公司,对自己,都算是有了个交代。

由于项目涉密,具体项目细节略去不再谈。现在回顾一下最大的挑战是,在“敌人炮火最猛烈的时候",我始终记着《软件方法》里潘老师对核心域的描述“只有一个领域(核心域)的知识是系统能在市场上生存的理由”。即使别人认识不到,我也必须强迫我不断思考,找准核心域,然后就要像狗看骨头一样,死死地守住它的边界。

从核心域透镜的角度看问题,对军事领域很多听起来唬人的噱头有了自己的独立看法。谁应该说"信火一体"(信息与火力),谁应该说“察打分离”(侦察与打击),一个合成营要指挥下面十五个不同兵种的连,责任分配合理吗?

在离开校园两年后,我也算终于在北京这个已经感觉陌生的城市站住脚了,而此时离学习软件方法,才仅仅过去一年。

许庆晗

工学博士,兵棋开发者

2017年10月