我觉得编程本质上来源于生活,编程相关的一些知识和经验如果深入分析一下,会发现多数可能就是对生活现象的抽象再抽象。刚开始接触编程的时候,我还没有这种感觉。后来经过几年的学习和体验,我渐渐对编程有了一点自己的理解。
既然提到编程,如果只是空洞的谈可能会有些模糊,既不方便理解也不方便叙述。那就拿我比较熟悉的一门语言开始切入吧,Java。提到Java就不得不提到面向对象,面向对象可以说是面向过程的升级版或者说是扩展版,只要是写程序就离不开顺序、分支(选择)和循环。本质上讲两种思想的底层都是依靠这三个词而堆积起来的一行行代码,但是往深了考虑两种思想有不同的特点。
关于面向对象和面向过程,我举一个简单的例子,比如你想吃鱼香肉丝这道菜,那么你可能需要先去买食材,买完食材要进行初步加工,之后经过一个个工序才可以吃到这道菜。那么这个方式就可以理解为面向过程,我们都知道生活里还有另一种方式,你可以不自己做而直接去饭店点菜,你只需要报一个菜名就可以吃到你想吃的菜,这个方式就类似面向对象。
从生活和编程的关系来看,编程之所以能快速发展而且由它带来的东西能出现在生活的方方面面并很好的为我们服务。我的理解是因为它本就是和生活为一体,从面向过程到面向对象,(再次用一下那个例子)为了更快更好的解决吃到某道菜的问题才出现了饭店,那么饭店或者说饭店里的每一道菜就可以理解为不同的对象。从生活角度来看,面向对象的思想可能更具有普适性,它的功能是大还是小这是根据实际情况和实际效果来评判的,而且它也是因为要解决生活里的问题才出现的。其实生活里依然有一些场景是需要面向过程的,比如一些机器里的嵌入式程序等等。我们再来看一下这个例子,饭店里的菜从顾客的角度看是面向对象,因为顾客只需要说菜名就可以了,但是对于厨师来说每一道菜又同时是面向过程的,因为厨师同样的要完成买食材,清理食材等等一系列步骤才能做好这道菜。编程是用来解决问题的,不论是编程思想还是编程语言、不管是层出不穷的框架还是一个个新的技术,它们都是从生活场景中来,到生活场景中去。
面向过程是一种以”过程“为中心的编程思想,它首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,在使用时依次调用,是一种基础的顺序的思维方式。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
面向过程关注每个步骤之间的先后关系,面向对象则是把类似的相近的关联性强的一些步骤进行抽象聚合,使其成为一个个对象,然后去考虑对象和对象之间的关联,这样的思维更适合解决更大更复杂的问题,也更容易实现‘’’高内聚低耦合“的软件设计目标。这一特点让面向对象在实际应用中有了更强的适应性,在增加新的功能的时候,可以在原有的基础上进行扩展而不用去改变原有的内部的细节,这对迭代开发是非常友好的。面向对象最关键的思想就是抽象,对象或者说类都是抽象的产物,通过抽象可以让关联关系很轻松的结合也可以很轻松的解开,新增和删除关联关系也就变的相对简单。
还有我们熟知的软件设计模式,比如代理模式、外观模式、适配器模式等等都可以在生活中找到对应的场景,其实本质上来说,这些设计模式就是从生活里的某些场景中抽象而来,它们的存在就是为了更好地解决现实生活存在的问题。所以我觉得编程其实是很朴素的,它本身就和生活密不可分,而由它产生的一系列产品也对我们的生活影响巨大。
很喜欢黑格尔的一句话:凡是合理的就是现实的,凡是现实的就是合理的。编程因生活而起又因生活而发展,生活因为有了编程而出现了很大的进步,同时它的变化又督促着编程技术的发展。编程需要应用,只有在应用中的思考和提升才是最直接有效的,应用是编程发展源源不断的动力,编程和生活相辅相成、不断进步。技术本身在应用中会得到高速的发展,而就我们个人而言,学习一种新思想或者一门新技术,也同样需要在实际应用中得到提升,这既是压力也是动力,在这个过程中会收获最独特的经验和教训。