正如《列子·说符》中所讲的“得其精而忘其粗,在其内而忘其外;见其所见,不见其所不见,视其所视,而遗其所不视。我们往往处于“不识庐山真面目,只缘身在此山中”的地步。学习软件工程之初,我们只能被称作普通的编程者。事实上或许每个编程者都有自己喜欢的一种语言,或C和C++,或java,又或C#。有的人或许会吹捧自己所选的语言多么强大,但从根本上来讲,语言其实只是一种工具,它是我们与计算机交流的一种途径。这和我们所讲的语言其实完全相同,不管你是讲汉语,英语还是俄语甚至是阿拉伯语,只要别人听得懂,结果其实都一样。因此我们并不需要拘泥于编程该使用哪种语言,要明白语言只是一种工具。
软件工程,在其最内层的环里是我们目前所接触到的“程序=算法+结构”。这是编程的本源定义,也是原始的状态。然而这种原始的状态并不会凝滞不前,随之而来的是方法的诞生。方法并不神秘,因为它就是你今天正在做的、从事的和实现的。当然这些简单的方法必须要建立在你有一些编程基础与经验。在编程与方法都有了之后,工程也就应运而生了。那么这里不得不提一下过程。过程说的是团队如何组织在一起进行开发的问题。它首先把工程中的环节分解出来。这样,有了环节,就有了角色;有了角色,就有了沟通。而沟通会使一个团队的合作更加的紧密,所做出的成绩也就越发的高。角色的确定,以及角色间的沟通问题,在项目过程中 也同样重要。工程组织是否合理,相互的协作是否紧密,是这个项目成功能的保障。而这一切都由完美的过程解决了。
最狭义的工程,是描述“做什么”和“做到什么”。 也就是说,是对目标的描述和成果的检测。至于这个工程目标的实现,是“过程”和“方法”的事;而有效、 快速地实现“过程”和“方法”所需的,就是“工具”。作者说的“牛屎图”生动的描述了何为软件工程。
基于实现对象而产生的过程需要用方法与工具来实现。从最初的简单编程开始,到现在工程团队的组织开发,实现(一个软件)都是最终的目的。所以可以这样说:实现,是软件开发的本质需求。因此如何更好的实现这些需求就成了我们当前需要为之努力奋斗的目标。
从编程到工程看上去一个字的变化,却让我们不得不深思熟虑一下我们软件工程的精义所在。