从编程到工程
——读《大道至简》有感
我们编写程序的目的也就是为了完成某些功能而做工程。从编程到工程,我们会经历许多,也认识收获了很多。
《列子》中有一句话,“地其精而忘其粗,在其内而忘其外;见其所见,不见其所不见,视其所视,而遗其所不视。”意思是:得到了精华却忘记了粗糙,在内部而忘记了外部;只能看见看得到的东西却无法领悟那些看不到的内涵。按照人类的发展来看,猿与人的区别的关键在于其能否利用工具,创造工具。而编程人员往往被称作程序猿,我想大概也是因为我们对于工具的盲目性所造成的。要知道程序语言对于编程人员来说只是一个工具而已,我们说这个语言好,那个语言不好,也仅仅是就我们个人的偏好和熟练度来说的。语言不存在差异,但我们往往只注重了语言,却忽略了他的本质作用。作为IT人员,看清楚大的程序只是项目的开始而已。语言仅仅是一个工具,是用于和计算机对话的,一个我们用来实现工程的工具。如果我们太专注遇语言工具的的学习了而对于其他专业知识反而造成了忽视,那就太得不偿失了。
程序的本源是“程序=算法+结构”,任何与程序有关的工作都是以此为本源编写出来的。即使面对再复杂的程序我们也应该抽丝剥茧地理清思路,回归本源,那样在难的程序也都很容易看懂了。
随着事情的发展,根据前人的实践和总结,过程、对象和方法都出现了。方法和方法论是用于推动程序向前发展的。要知道的是方法不是实物,不能被看到,只有拥有足够的编程经验才能理解。并且理解过程需要编程经验,理解对象也需要编程经验,也就是说我们需要的是熟能生巧。过程是伴随着工程而出现的,过程就是角色、沟通和环节,解决的是角色间的关系问题。
最狭义的工程,是“做什么”和“做到什么”。也就是说,把我们要实现的目标通过语言、方法、工具实现出来的就是工程。工程需要方法和过程来达成。对于大的工程而言,团队极为重要。一个人是很难高效率地完成大工程的。在现今社会中,如果没有团队意识,那么就会一触而溃。
在团队中,组织是很重要的。这个组织无关于技术,而重点放在人力资源、项目资金和项目组的协同等方面。工程理论其实就囊括了组织学。当工程关注的只是需求、配置和文档等要素,那么这样的过程是肤浅的技术层面。所以我们应该关注的还是实现工程的细节,而非目标。这些应该是项目经理和技术经理所共同关注的一部分。
实现是开发项目的本质性需求。为了去实现项目,我们需要不断积累和时间来总结和归纳方法。由于“实现”的需要,我们有了团队组织、有了模型、有了语言工具。