“得其精而忘其粗,在其内而忘其外;见其所见,不见其所不见,视其所视,而遗其所不见,视其所视,而遗其所不视。”
——《列子·说符》
语言只是一种工具,并没有好坏之分。无论是Java还是C/C++或者是其他的语言他们都有其存在的道理,只能说某种语言适合当下的编程,而不能说其他的语言不好。“软件工程”这四个字代表着代码、方法、过程、工作和组织。对于一个程序员来说,清楚的看清他们之间关系的第一步是就是一句“语言只是工具!”。程序=算法+结构。这是编程的本源定义,也是原始的状态,与代码相关的任何工作,最终都会落足于这样一条规则,这是编程世界的规则。
长期的编程实践,自然地归演与总结,必须沉淀为某种(软件开发)方法,于是“过程”出现了,于是“对象”出现了,于是相关的方法论也就出现了。这是实践的结果。并不是某个人或某个组织创造的。方法并不神秘,因为它就是今天你正在做的、从事的和实现的。正如“模式”是一种方法,而模式就是你昨天书写代码的那个行为。你看不到你做事的内在规律,也就不能理解“模式”作为一种方法的价值。所以大师们众口一词:模式需要一定的编程经验才能理解。 同理,理解过程也需要编程经验,理解对象也需要编程经验,理解MDA与SOA还是需要编程经验。这可能就发生在你去回顾你上一行代码编写的,或者上一个项目失败的经历的那一瞬息。经验来源于回顾、理解与分析,而不是你将要写的下一行代码。
过程伴生工程而生。过程解决的事工程中角色间的关系问题。过程说的是很多的人(团队)如何组织在一起进行开发的问题。他首先把工程中的环节分解出来。这样,有了环节,就有了角色。有了角色,就有了沟通。 因此过程中的问题,就是角色、沟通和环节的问题。角色的确定,环节的把握以及角色间的沟通问题,在项目过程中显得尤为重要,工作的组织是否和谐,相互的协作是否紧密,是这个项目成功的保障。
最狭义的工程,被描述为“做什么”和“做到什么”。是对目标的描述和成果的检测。而这个工程目标的实现,是“过程”和“方法”的事,这是工具的事情了。
从最初的简单编程开始,到现在的工程团队的组织开发,实现都是最终目的,所以,实现,是软件开发的本质要求。正是出于实现的需要,我们才设计了一些数据结构或逻辑结构来映射物理模型。因此类似于过程、单元、记录结构、对象的出现,其实都是出于编程的实现需要,而后,给予某种数据结构的编程实践(的不断积累),决定了软件开发方法理论的产生。方法,是对既有行为的归纳总结。