关于层(layer)
原文链接 http://reborncodinglife.com/2016/06/29/about-layer/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
今天谈谈“层”这个字,如果要让我在计算机科学中挑选一个最神奇的字,我会选择“层”字,因为生活中随处可见使用“层”的例子。
先从我们身边的电脑说起,电脑就是一个典型的层次化产品的例子。从下往上看,第一层是看得见摸得着的硬件,比如CPU、内存条和硬盘等,第二层是BIOS(Basic Input Output System),即基本输入输出系统,主要作用是检测硬件和引导操作系统,第三层就是操作系统,比如Windows、Linux和Mac等,第四层就是我们常用的软件比如微信、QQ和浏览器等,这样做有什么好处呢?其实最主要的目的就是为了简单方便。你可以想象下如果使用QQ需要特定的硬件、特定的BIOS和特定的操作系统,那估计就没几个人使用了。通过抽象分层,QQ只依赖于具体的操作系统,即QQ只需要和自己的下一层通信即可,其他层如何变化不影响QQ的使用。所以有针对不同操作系统的QQ软件,但是没有针对不同硬件或者BIOS的QQ软件。
以编程语言为例,第一层肯定是01010101,第二层是CPU可以理解的汇编指令,第三层一般是编程语言比如C、C++和Go等,第四层就是编程语言提供的各种库,如果还有第五层,那就是你使用编程语言开发的软件了。当然这里的分层也不一定严谨,因为如果你留意的话,很多编程语言其实都是将C语言进行了不同的封装,提供一个更简易抽象的接口供程序员使用而已。层在编程语言中也可以理解成封装,通过编程语言提供的基本语法和内置函数,将很多常用的功能封装成库提供给大家使用,这就是层在编程语言中的具体体现,通过隐藏具体的实现细节,减少编程的复杂度,使得程序员能专注更重要的部分。但是太过于抽象容易在出错时不知所措,所以还是要好好看看C语言,不要让封装把你迷惑了,技术要学好学精,没有捷径可取,底层的东西还是需要关注的,比如一个JAVA程序员,他就不一定知道while(*s++=*t++);
是字符串拷贝代码。
以公司管理层为例,第一层是公司的董事长,第二层是公司的总经理,接下来还有副总层、部门负责人层、小组长层,然后才到一般职员。相信大家很轻易的就能看见这样分层的好处,董事长离职,换一个人就可以了,一般职员、小组长或者部门负责人根本就不需要关心谁是董事长,但是总经理就得关注了。一般职员离职,董事长也不需要关注,但是小组长就需要知道了,这样分层有利于管理,但是办事效率就不一定高了,有可能要申请购买一个设备,签字批准都得几天,没办法,大公司只能这样,人太多了。
以支付宝为例,支付宝其实就是一个中介,也是利用层次思想。以前我们难免会有很多张不同银行的储蓄卡或者信用卡,然后你一会需要去这个银行取钱,一会需要去哪个银行转账,有了支付宝,你懂的。支付宝就是我们和银行之间的一个层,当然,马云发现了这个层,以前我们每个人都需要和不同的银行打交道,很麻烦(至于有多麻烦,我想你懂的)。于是马云搞出了一个支付宝,我们只需和支付宝打交道,马云负责更麻烦的事(和银行打交道),看见没,支付宝知道我们的痛处,解决了我们的真正需求--存钱和转账,所以,成功了。
说完支付宝,不得不说说滴滴打车,以前我们打车时,总是在街上不停的招手,各种求带,但是经常被出租车司机拒载,至于拒载原因,我就不说了,相信你也懂的。直到有了滴滴打车,作为我们和司机之间的一个中间层出现了,你要做的就是确保手机没有停机,且支付宝或者微信有钱,然后发个订单即可,滴滴打车负责调度附近车辆,帮你完成打车这件麻烦事,价格便宜且服务态度好。你不是嫌打车麻烦吗?滴滴帮你解决。和支付宝一样,但凡牛逼的公司,肯定很清楚客户的真正需求,帮他们解决问题,就是这样简单。
其实,层次化思想在生活中随处可见,比如虚拟化技术、租房的中介、快递等。所以如果你能开发一个同时更新微博、微信朋友圈和QQ状态的APP,我肯定会下载使用的,因为你肯定知道同时维护几个社交软件的不易,当然如果你要创业,务必挑选好这个中间层,真正的帮用户解决问题!