软件开发实践存在一定的复杂性。这是因为,实践中遇到的背景知识是广泛的。这些背景知识,通常不会在一本或几本参考书中找到答案。例如,当你需要开发一个Linux版本的通信系统的时候,需要具备很多相关的知识。否则,会遇到很多困难。我有过类似的经历。当时接到了一个任务:我们要准备一个运行在VMWARE中的应用系统DEMO。这个DEMO将被部署在WAS(已部署WPS )上,系统运行时调用部署在WPS上的业务流程接口,业务流程的节点上会调用公司的规则引擎,规则引擎被封装成
EJB部署在WAS上。所有的企业应用软件部署过程使用自动化脚本。整个任务的时间是一周。如果你不了解VMWARE、WAS、WPS、规则引擎、EJB、SHELL SCRIPT、JACL和应用系统本身等,你该怎么做?没有答案。估计只能像我们一样瞎蒙吧。 相关背景知识的积累需要一个长期的过程。在这个过程中,主要的工作就是收集信息。收集信息软件开发是一项艰巨复杂的任务。但是,对收集信息软件开发来说,这项任务是过程性的任务,而不是我们的目标任务。
可是,我总是很遗憾地发现,很多软件开发人员都被这个过程性的任务蒙蔽了双眼。他们中的一部分,始终徘徊在信息收集的门外(因为无法掌握足够的信息而无力解决问题),他们中的另一部分,在积累了丰富的信息之后,尽管已经不自觉地站到了一个更高的层次(可以用思想来指导行动)上,但是主观上,他们仍然把信息收集的过程当作了软件开发的本质内容。之所以在这里谈论一些看似微不足道的差异,是因为我非常在乎思想观念上的差异。
在我看来,出发点的不同,导致的结果可能完全两样。这也是我不断强调在软件开发思想上要坚持简单化原则的原因。其实,信息量的多寡,根本不能反映软件开发能力的本质差异。我们说必要的知识积累是软件开发的起点,但是软件开发的本质在于创造,所以运用信息的能力才是关键。从这个角度来看,很多软件开发组织对软件开发技能的认识其实都是错误的。
这些组织看重信息量,而忽视信息的使用方法。这也是我们为什么总是遇到复杂混乱的软件架构的原因之一。如果你的企业正在招聘人才,请关注应聘者解决问题的思路和看待问题的层次。信息量既不是生产好软件的前提,也不是生产好软件的必要条件。以后的章节中,我还会进一步论述这个观点。让我们再回到简单化的话题。简单化有什么好处呢?越简单越准确。 用例的撰写就是一个明证:不需要修饰语,不需要副词,不需要语气词和助动词。有效的用例只保留主谓宾,没有任何内涵和外延干扰意思的表达。用例简单到只有常识和术语,几乎不可能带来歧义。 对于收集信息软件开发来说,简单化还是准确沟通的最好保证。