语言只是工具,在学习编程的过程中,我们不断接触多种多样的语言,学习并且运用它们。我们会因为无法精通某种语言而着急,而担忧,当然也会因为对某种语言的了解而兴奋,而激动。但逐渐的,我们忘记了学习语言的最终目的,编程和工程不同,我们可能在编程中用不同方法解决问题,可能因为哪种方法的更巧妙或者技术方面的问题和自己的伙伴产生矛盾,产生争论。这样的争论在学习研究过程中是件好事,多学术的进步有着帮助,但是在工程中就不同了,工程的进行可能会因为这样的争论而拖延工期,最后可能并没有什么改变还拉长了工程时间。作为一个软件工程学者,对语言运用的要求高是一件好事,但当我们成为一个工程师,解决问题,实现工程才是目的,运用的语言只是我们的工具,怎么样能更快更好的解决问题才是我们考虑的问题,而语言运用技术上的问题不再是关键。
程序=算法+结构,这是编程的精义,从有开发行为开始它就存在了,就像愚公,他在“移山”的时候,也用了类同的行为做编程实践,而这么多年来,我们也是在循环与分支所构成的逻辑中打转。
推动这种逻辑向前发展的“方法”和“方法论”的出现,长期的编程实践实践,通过自然的归演与总结,于是“过程”出现了,于是“对象”出现了,于是相关的方法方法论也出现了。方法不是创造出来的,是一代又一代的工程师在实现工程的过程中慢慢积累出来的。“模式”也是一种方法,就是你在昨天的编程中书写代码的行为。
模式的理解需要编程经验,同样,过程和对象的理解也需要编程经验,经验的来源不会在你将要书写的下一行代码中,而是在你对回顾上一行代码或者上一个过程的思考过程中。
过程,伴随工程而出现,将工程分解了不同的环节,有了环节,就有了角色,同样也就有了沟通。在实现过程的过程中最重要的就是角色与角色之间的沟通与环节问题,所以合作是过程最需要也是必不可少的东西。
最后说到工程,最狭义的工程就是描述“做什么”和“做到什么”,其实工程就是对目标的描述和成果的检测,至于工程目标的实现,就是“过程”和“方法”的事了,而快速有效的实现“过程”和“方法”就是用到最直接效率的“工具”,也就是我们现在学习的“语言”。
工程的实现需要的不仅仅是技术人员,还有的就是任何一个项目都需要的项目经理,来统筹安排这样一个工程。也就是说工程的实现需要组织,作为管理方保证工程的进行,其实也就是一个完整的团队。
所以,工程的实现,从最小的使用工具,到整个做工程的团队,由小到大,各有所用。