我们之前学过的数据结构与算法可以说是告诉我们要完成一个功能用什么样的设计能够实现,而软件工程引入的工程化方法则是进一步指导我们如何具体地实现系统的各个需求。这种方法学的指导看似虚无缥缈,而且从书上第一次看来感觉很平凡,都是些我曾经知道的名词,并没有什么的特别之处。然而就是严谨的工程化方法使复杂系统的开发成为可能。

历史上的失败有OS360的泥沼,而最近的失败就发生在我身边:在上个月美国数学建模大赛的比赛过程中,我和我的队友就合写了一个开始编程以来我们写过的最丑陋的程序。这个程序的功能是根据给定的参数来模拟难民人口流动的情况。为了尽早完成论文,我们预计用1天写完,而实际上用了2天的时间实践和调试这个程序,也最终影响了我们论文完成的进度。主要的问题有一下几点:

1、版本控制。一个复杂的系统实现,需要有比较良好的文档辅助,而我们为了尽快完成程序实现忽略这一点,导致有时候自己负责部分的代码都会不理解。

2、异常处理。我们的程序是根据参数来模拟人口流动,其中的分布模型是有输入条件的,在一定的情况下,我们核心的随机化算法会发生崩溃,导致失败。而这些条件有时又是不易再现的。

3、由于在需求分析上花的时间不够多,数学模型逐步完善了几次,这就导致了程序实现的改变,加上版本控制不当,进一步增加了实现难度。

现在看来,这个小程序的开发也的确有点真实项目开发的意思。其中既有分工合作,还有因为数学模型建立不完善而不断改变的需求。

实践出真知。在之后的项目开发中,还需要合适的工程化的方法来指导,否则还会平添很大的工作量。这并不意味着每个小改动都需要写很多文档增加工作量,而是选择适当的工程化方法,在上面的比赛过程中,如果需求会常常变化,或许开发的敏捷更是一种要求吧。

以上就是我从一个月前的开发失败中得到的收获。